Bläddra i källkod

msm: camera: reqmgr: Reset the status for next req if bubble

If req#N in slot idx, and this req meets bubble issue,
then the req#(N+1) in slot (idx+1) may also be applied,
and its status is APPLIED. If req#(N+1) applies failed
after finishing bubble recovery due to some reasons,
but we still can move to next slot since the status of
slot (idx+1) is already APPLIED. This change resets
the status of slot (idx+1) to ADDED if it is APPLIED
during processing error.

CRs-Fixed: 2902809
Change-Id: I32f318569ad8f24fdf0f324603f4ea0036867e98
Signed-off-by: Depeng Shao <[email protected]>
Depeng Shao 4 år sedan
förälder
incheckning
5e48beb98b
1 ändrade filer med 9 tillägg och 0 borttagningar
  1. 9 0
      drivers/cam_req_mgr/cam_req_mgr_core.c

+ 9 - 0
drivers/cam_req_mgr/cam_req_mgr_core.c

@@ -2907,6 +2907,15 @@ int cam_req_mgr_process_error(void *priv, void *data)
 					link->req.l_tbl->num_slots);
 				in_q->slot[idx].sync_mode = 0;
 			}
+
+			/* The next req may also be applied */
+			idx = in_q->rd_idx;
+			__cam_req_mgr_inc_idx(&idx, 1,
+				link->req.l_tbl->num_slots);
+
+			if (in_q->slot[idx].status == CRM_SLOT_STATUS_REQ_APPLIED)
+				in_q->slot[idx].status = CRM_SLOT_STATUS_REQ_ADDED;
+
 			spin_lock_bh(&link->link_state_spin_lock);
 			link->state = CAM_CRM_LINK_STATE_ERR;
 			spin_unlock_bh(&link->link_state_spin_lock);