Merge "msm: vidc: Fix a race condition with core instances list"
diff --git a/drivers/media/platform/msm/vidc/msm_vidc.c b/drivers/media/platform/msm/vidc/msm_vidc.c
index b6d031a..10a0eac 100644
--- a/drivers/media/platform/msm/vidc/msm_vidc.c
+++ b/drivers/media/platform/msm/vidc/msm_vidc.c
@@ -497,9 +497,9 @@
setup_event_queue(inst, &core->vdev[core_id].vdev);
- mutex_lock(&core->lock);
+ mutex_lock(&core->sync_lock);
list_add_tail(&inst->list, &core->instances);
- mutex_unlock(&core->lock);
+ mutex_unlock(&core->sync_lock);
return inst;
fail_init:
vb2_queue_release(&inst->bufq[OUTPUT_PORT].vb2_bufq);
diff --git a/drivers/media/platform/msm/vidc/msm_vidc_common.c b/drivers/media/platform/msm/vidc/msm_vidc_common.c
index 09f67a2..9d3afa1 100644
--- a/drivers/media/platform/msm/vidc/msm_vidc_common.c
+++ b/drivers/media/platform/msm/vidc/msm_vidc_common.c
@@ -1431,8 +1431,11 @@
return -EINVAL;
}
+ mutex_lock(&inst->core->sync_lock);
num_mbs_per_sec = msm_comm_get_load(inst->core, MSM_VIDC_DECODER);
num_mbs_per_sec += msm_comm_get_load(inst->core, MSM_VIDC_ENCODER);
+ mutex_unlock(&inst->core->sync_lock);
+
if (num_mbs_per_sec > inst->core->resources.max_load) {
dprintk(VIDC_ERR, "HW is overloaded, needed: %d max: %d\n",
num_mbs_per_sec, inst->core->resources.max_load);
@@ -1451,8 +1454,10 @@
if (inst->core->resources.has_ocmem) {
ocmem_sz = get_ocmem_requirement(inst->prop.height,
inst->prop.width);
+ mutex_lock(&inst->core->sync_lock);
rc = msm_comm_scale_bus(inst->core, inst->session_type,
OCMEM_MEM);
+ mutex_unlock(&inst->core->sync_lock);
if (!rc) {
mutex_lock(&inst->core->sync_lock);
rc = call_hfi_op(hdev, alloc_ocmem,