Forráskód Böngészése

msm: camera: isp: Don't clear lists when disabling all events

On overflow, cam_irq_controller_disable_all function is called from top
half handler, which itself is in a loop of all entries of top half list.
Manipulating the list to remove all elements can leave it in an unstable
state and cause the loop to never terminate. Since events are removed
from all lists when unsubscribing from the IRQs, do not clear the top
half list when disabling all events.

CRs-Fixed: 3043489
Change-Id: Idee0a017cdea1dac73e9a7a00f07463afe324983
Signed-off-by: Anand Ravi <[email protected]>
Anand Ravi 3 éve
szülő
commit
c213491c20

+ 0 - 8
drivers/cam_isp/isp_hw_mgr/hw_utils/irq_controller/cam_irq_controller.c

@@ -743,7 +743,6 @@ static void __cam_irq_controller_th_processing(
 void cam_irq_controller_disable_all(void *priv)
 {
 	struct cam_irq_controller  *controller  = priv;
-	struct cam_irq_evt_handler  *evt_handler, *evt_handler_temp;
 	struct cam_irq_register_obj *irq_register;
 
 	uint32_t i = 0;
@@ -751,13 +750,6 @@ void cam_irq_controller_disable_all(void *priv)
 	if (!controller)
 		return;
 
-	for (i = 0; i < CAM_IRQ_PRIORITY_MAX; i++) {
-		list_for_each_entry_safe(evt_handler, evt_handler_temp,
-			&controller->th_list_head[i], th_list_node) {
-			list_del_init(&evt_handler->th_list_node);
-		}
-	}
-
 	for (i = 0; i < controller->num_registers; i++) {
 		irq_register = &controller->irq_register_arr[i];
 		memset(irq_register->top_half_enable_mask, 0, CAM_IRQ_PRIORITY_MAX);