Browse Source

Merge "msm: camera: reqmgr: Workqueue congestion handling" into camera-kernel.lnx.4.0

Camera Software Integration 4 years ago
parent
commit
992378c626
1 changed files with 17 additions and 11 deletions
  1. 17 11
      drivers/cam_req_mgr/cam_req_mgr_core.c

+ 17 - 11
drivers/cam_req_mgr/cam_req_mgr_core.c

@@ -1694,18 +1694,24 @@ static int __cam_req_mgr_process_req(struct cam_req_mgr_core_link *link,
 
 	rc = __cam_req_mgr_send_req(link, link->req.in_q, trigger, &dev);
 	if (rc < 0) {
-		/* Apply req failed retry at next sof */
-		slot->status = CRM_SLOT_STATUS_REQ_PENDING;
+		if (in_q->last_applied_idx < in_q->rd_idx) {
+			/* Apply req failed retry at next sof */
+			slot->status = CRM_SLOT_STATUS_REQ_PENDING;
 
-		link->retry_cnt++;
-		if (link->retry_cnt == MAXIMUM_RETRY_ATTEMPTS) {
-			CAM_DBG(CAM_CRM,
-				"Max retry attempts reached on link[0x%x] for req [%lld]",
-				link->link_hdl,
-				in_q->slot[in_q->rd_idx].req_id);
-			__cam_req_mgr_notify_error_on_link(link, dev);
-			link->retry_cnt = 0;
-		}
+			link->retry_cnt++;
+			if (link->retry_cnt == MAXIMUM_RETRY_ATTEMPTS) {
+				CAM_DBG(CAM_CRM,
+					"Max retry attempts reached on link[0x%x] for req [%lld]",
+					link->link_hdl,
+					in_q->slot[in_q->rd_idx].req_id);
+				__cam_req_mgr_notify_error_on_link(link, dev);
+				link->retry_cnt = 0;
+			}
+		} else
+			CAM_WARN(CAM_CRM,
+				"workqueue congestion, last applied idx:%d rd idx:%d",
+				in_q->last_applied_idx,
+				in_q->rd_idx);
 	} else {
 		if (link->retry_cnt)
 			link->retry_cnt = 0;