Merge "msm:cci: Add protection for race condition in cci queue access"

This commit is contained in:
Linux Build Service Account 2017-03-06 22:43:36 -08:00 committed by Gerrit - the friendly Code Review server
commit f35c117cc0

View file

@ -1,4 +1,4 @@
/* Copyright (c) 2012-2016, The Linux Foundation. All rights reserved. /* Copyright (c) 2012-2017, The Linux Foundation. All rights reserved.
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and * it under the terms of the GNU General Public License version 2 and
@ -1284,6 +1284,10 @@ static int32_t msm_cci_init(struct v4l2_subdev *sd,
CDBG("%s:%d master %d\n", __func__, __LINE__, master); CDBG("%s:%d master %d\n", __func__, __LINE__, master);
if (master < MASTER_MAX && master >= 0) { if (master < MASTER_MAX && master >= 0) {
mutex_lock(&cci_dev->cci_master_info[master].mutex); mutex_lock(&cci_dev->cci_master_info[master].mutex);
mutex_lock(&cci_dev->cci_master_info[master].
mutex_q[PRIORITY_QUEUE]);
mutex_lock(&cci_dev->cci_master_info[master].
mutex_q[SYNC_QUEUE]);
flush_workqueue(cci_dev->write_wq[master]); flush_workqueue(cci_dev->write_wq[master]);
/* Re-initialize the completion */ /* Re-initialize the completion */
reinit_completion(&cci_dev-> reinit_completion(&cci_dev->
@ -1308,6 +1312,10 @@ static int32_t msm_cci_init(struct v4l2_subdev *sd,
if (rc <= 0) if (rc <= 0)
pr_err("%s:%d wait failed %d\n", __func__, pr_err("%s:%d wait failed %d\n", __func__,
__LINE__, rc); __LINE__, rc);
mutex_unlock(&cci_dev->cci_master_info[master].
mutex_q[SYNC_QUEUE]);
mutex_unlock(&cci_dev->cci_master_info[master].
mutex_q[PRIORITY_QUEUE]);
mutex_unlock(&cci_dev->cci_master_info[master].mutex); mutex_unlock(&cci_dev->cci_master_info[master].mutex);
} }
return 0; return 0;