Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dfb3fc66 authored by Alok Chauhan's avatar Alok Chauhan
Browse files

msm: camera: cdm: Protect cdm reset status



CDM reset and submit BL callbacks can run in parallel.
As submit BL callback is relying on cdm reset bit status
so this condition can fail incase CDM reset also run in
parallel.

Protect cdm reset bit status by lock.

CRs-Fixed: 2622981
Change-Id: Iecf001fd8d3861d7a96428c4013fc2e6fd16bad0
Signed-off-by: default avatarAlok Chauhan <alokc@codeaurora.org>
parent 3c47df1d
Loading
Loading
Loading
Loading
+4 −5
Original line number Diff line number Diff line
@@ -1269,12 +1269,12 @@ int cam_hw_cdm_reset_hw(struct cam_hw_info *cdm_hw, uint32_t handle)

	cdm_core = (struct cam_cdm *)cdm_hw->core_info;

	set_bit(CAM_CDM_RESET_HW_STATUS, &cdm_core->cdm_status);
	reinit_completion(&cdm_core->reset_complete);

	for (i = 0; i < cdm_core->offsets->reg_data->num_bl_fifo; i++)
		mutex_lock(&cdm_core->bl_fifo[i].fifo_lock);

	set_bit(CAM_CDM_RESET_HW_STATUS, &cdm_core->cdm_status);
	reinit_completion(&cdm_core->reset_complete);

	for (i = 0; i < cdm_core->offsets->reg_data->num_bl_fifo; i++) {
		reset_val = reset_val |
			(1 << (i + CAM_CDM_BL_FIFO_FLUSH_SHIFT));
@@ -1336,11 +1336,10 @@ int cam_hw_cdm_handle_error_info(

	cdm_core = (struct cam_cdm *)cdm_hw->core_info;

	reinit_completion(&cdm_core->reset_complete);

	for (i = 0; i < cdm_core->offsets->reg_data->num_bl_fifo; i++)
		mutex_lock(&cdm_core->bl_fifo[i].fifo_lock);

	reinit_completion(&cdm_core->reset_complete);
	set_bit(CAM_CDM_RESET_HW_STATUS, &cdm_core->cdm_status);
	set_bit(CAM_CDM_FLUSH_HW_STATUS, &cdm_core->cdm_status);