浏览代码

msm: camera: ife: Look into next request if res not found

In cases where IRQ delays or overlap happens, the IRQ
we get for the resource may belong to the 2nd request
in the queue. If the IRQ resource is not found in top
request, look into the second request as well.

CRs-Fixed: 2600457
Change-Id: Ida2665a00169463e2f146de1cfa6be076d8c7d72
Signed-off-by: Pavan Kumar Chilamkurthi <[email protected]>
Pavan Kumar Chilamkurthi 5 年之前
父节点
当前提交
a44cb8d722
共有 1 个文件被更改,包括 22 次插入4 次删除
  1. 22 4
      drivers/cam_isp/cam_isp_context.c

+ 22 - 4
drivers/cam_isp/cam_isp_context.c

@@ -809,10 +809,28 @@ static int __cam_isp_ctx_handle_buf_done_for_request(
 		}
 
 		if (j == req_isp->num_fence_map_out) {
-			CAM_ERR(CAM_ISP,
-				"Can not find matching lane handle 0x%x!",
-				done->resource_handle[i]);
-			rc = -EINVAL;
+			if (done_next_req) {
+				/*
+				 * If not found in current request, it could be
+				 * belonging to next request, This can happen if
+				 * IRQ delay happens.
+				 */
+				CAM_WARN(CAM_ISP,
+					"BUF_DONE for res 0x%x not found in Req %lld ",
+					__cam_isp_resource_handle_id_to_type(
+					done->resource_handle[i]),
+					req->request_id);
+
+				done_next_req->resource_handle
+					[done_next_req->num_handles++] =
+					done->resource_handle[i];
+			} else {
+				CAM_ERR(CAM_ISP,
+					"Can not find matching lane handle 0x%x! in Req %lld",
+					done->resource_handle[i],
+					req->request_id);
+				rc = -EINVAL;
+			}
 			continue;
 		}