msm: camera: sync: Fix bugs related to monitor information

Release spinlock before calling synx APIs.

CRs-Fixed: 3350863
Change-Id: I156a70b18c76f4a2f30de70c23d44032bdf8f571
Signed-off-by: Haochen Yang <quic_haocyang@quicinc.com>
Šī revīzija ir iekļauta:
Haochen Yang
2023-02-13 18:03:25 -08:00
revīziju iesūtīja Camera Software Integration
vecāks 6fbf41d2a1
revīzija 26dfb39090

Parādīt failu

@@ -488,10 +488,13 @@ int cam_synx_obj_internal_signal(int32_t row_idx,
signal_synx_obj->synx_obj);
}
row->state = CAM_SYNX_OBJ_STATE_SIGNALED;
if (test_bit(CAM_GENERIC_FENCE_TYPE_SYNX_OBJ, &cam_sync_monitor_mask))
cam_generic_fence_update_monitor_array(row_idx,
&g_cam_synx_obj_dev->dev_lock, g_cam_synx_obj_dev->monitor_data,
CAM_FENCE_OP_SIGNAL);
spin_unlock_bh(&g_cam_synx_obj_dev->row_spinlocks[row_idx]);
rc = synx_signal(g_cam_synx_obj_dev->session_handle,
signal_synx_obj->synx_obj, signal_status);
@@ -505,7 +508,6 @@ int cam_synx_obj_internal_signal(int32_t row_idx,
signal_synx_obj->synx_obj, signal_status, rc);
end:
spin_unlock_bh(&g_cam_synx_obj_dev->row_spinlocks[row_idx]);
return rc;
}
@@ -560,12 +562,12 @@ int cam_synx_obj_signal_obj(struct cam_synx_obj_signal *signal_synx_obj)
signal_synx_obj->synx_obj);
}
row->state = CAM_SYNX_OBJ_STATE_SIGNALED;
spin_unlock_bh(&g_cam_synx_obj_dev->row_spinlocks[idx]);
if (test_bit(CAM_GENERIC_FENCE_TYPE_SYNX_OBJ, &cam_sync_monitor_mask))
cam_generic_fence_update_monitor_array(idx,
&g_cam_synx_obj_dev->dev_lock, g_cam_synx_obj_dev->monitor_data,
CAM_FENCE_OP_SIGNAL);
spin_unlock_bh(&g_cam_synx_obj_dev->row_spinlocks[idx]);
rc = synx_signal(g_cam_synx_obj_dev->session_handle,
signal_synx_obj->synx_obj, signal_status);
@@ -647,19 +649,20 @@ int cam_synx_obj_register_cb(int32_t *sync_obj, int32_t row_idx,
cam_generic_fence_update_monitor_array(row_idx,
&g_cam_synx_obj_dev->dev_lock, g_cam_synx_obj_dev->monitor_data,
CAM_FENCE_OP_REGISTER_CB);
spin_unlock_bh(&g_cam_synx_obj_dev->row_spinlocks[row_idx]);
rc = synx_async_wait(g_cam_synx_obj_dev->session_handle, &cb_params);
if (rc) {
CAM_ERR(CAM_SYNX,
"Failed to register cb for synx obj: %d rc: %d",
synx_obj, rc);
goto monitor_dump;
return rc;
}
CAM_DBG(CAM_SYNX,
"CB successfully registered for synx obj: %d for sync_obj: %d",
synx_obj, *sync_obj);
spin_unlock_bh(&g_cam_synx_obj_dev->row_spinlocks[row_idx]);
return rc;
monitor_dump: