浏览代码

msm: camera: reqmgr: Reset the slot if it is applied

This change reset the slot when the next req is applied, it
should be caused by some exception before, we need to reset
this slot in case we applied wrong req to sub devices.

CRs-Fixed: 2949657
Change-Id: I0b5f7b1d8450ed355701090b185812fb7a6b6e06
Signed-off-by: Depeng Shao <[email protected]>
Depeng Shao 4 年之前
父节点
当前提交
2d0124f109
共有 1 个文件被更改,包括 18 次插入0 次删除
  1. 18 0
      drivers/cam_req_mgr/cam_req_mgr_core.c

+ 18 - 0
drivers/cam_req_mgr/cam_req_mgr_core.c

@@ -761,6 +761,24 @@ static int __cam_req_mgr_check_next_req_slot(
 
 	CAM_DBG(CAM_CRM, "idx: %d: slot->status %d", idx, slot->status);
 
+	/*
+	 * Some slot can't be reset due to irq congestion and
+	 * and performance issue, we need to reset it when we
+	 * want to move to this slot.
+	 */
+	if (slot->status == CRM_SLOT_STATUS_REQ_APPLIED) {
+		CAM_WARN(CAM_CRM,
+			"slot[%d] wasn't reset, reset it now",
+			idx);
+		if (in_q->last_applied_idx == idx) {
+			CAM_WARN(CAM_CRM,
+				"last_applied_idx: %d",
+				in_q->last_applied_idx);
+			in_q->last_applied_idx = -1;
+		}
+		__cam_req_mgr_reset_req_slot(link, idx);
+	}
+
 	/* Check if there is new req from CSL, if not complete req */
 	if (slot->status == CRM_SLOT_STATUS_NO_REQ) {
 		rc = __cam_req_mgr_check_for_lower_pd_devices(link);