msm: camera: reqmgr: skip re_apply of ISP for buf_done request

crm applied both sensor and isp packets,sensor packet failed to
apply due to CCI timeout error. In the meantime ISP packet applied
and that request of ISP moved to free_list.In the next epoch crm
trying to reapply both the packets of sensor and isp again.In this
case ISP always reporting an apply failure because its pending queue
doesn’t have that request.To handle this we are skipping to re-apply
the ISP successful buf_done request and trying to apply only sensor
packet in this scenario.

CRs-Fixed: 2599186
Change-Id: Id7e72fc016a75782b57f05558c615b069b416ffe
Signed-off-by: Mangalaram ARCHANA <mangar@codeaurora.org>
This commit is contained in:
Mangalaram ARCHANA 2019-12-05 15:32:46 +05:30 • committed by Gerrit - the friendly Code Review server
commit 1f40c7a467
5 changed files with 25 additions and 1 deletions

View file

@ -2485,6 +2485,14 @@ static int __cam_isp_ctx_apply_req_in_activated_state(
goto end;
}
if (apply->re_apply)
if (apply->request_id <= ctx_isp->last_applied_req_id) {
CAM_INFO(CAM_ISP,
"Trying to reapply the same request %llu again",
apply->request_id);
return 0;
}
spin_lock_bh(&ctx->lock);
req = list_first_entry(&ctx->pending_req_list, struct cam_ctx_request,
list);

View file

@ -659,6 +659,11 @@ static int __cam_req_mgr_send_req(struct cam_req_mgr_core_link *link,
apply_req.link_hdl = link->link_hdl;
apply_req.report_if_bubble = 0;
apply_req.re_apply = false;
if (link->retry_cnt > 0) {
if (g_crm_core_dev->recovery_on_apply_fail)
apply_req.re_apply = true;
}
for (i = 0; i < link->num_devs; i++) {
dev = &link->l_dev[i];

View file

@ -406,10 +406,12 @@ struct cam_req_mgr_core_session {
* - Core camera request manager data struct
* @session_head : list head holding sessions
* @crm_lock : mutex lock to protect session creation & destruction
* @recovery_on_apply_fail : Recovery on apply failure using debugfs.
*/
struct cam_req_mgr_core_device {
struct list_head session_head;
struct mutex crm_lock;
bool recovery_on_apply_fail;
};
/**

View file

@ -1,6 +1,6 @@
// SPDX-License-Identifier: GPL-2.0-only
/*
* Copyright (c) 2016-2018, The Linux Foundation. All rights reserved.
* Copyright (c) 2016-2019, The Linux Foundation. All rights reserved.
*/
#include "cam_req_mgr_debug.h"
@ -128,5 +128,12 @@ int cam_req_mgr_debug_register(struct cam_req_mgr_core_device *core_dev)
debugfs_root, core_dev, &bubble_recovery))
return -ENOMEM;
if (!debugfs_create_bool("recovery_on_apply_fail",
0644,
debugfs_root,
&core_dev->recovery_on_apply_fail)) {
return -ENOMEM;
}
return 0;
}

View file

@ -320,6 +320,7 @@ struct cam_req_mgr_core_dev_link_setup {
* @request_id : request id settings to apply
* @report_if_bubble : report to crm if failure in applying
* @trigger_point : the trigger point of this apply
* @re_apply : to skip re_apply for buf_done request
*
*/
struct cam_req_mgr_apply_request {
@ -328,6 +329,7 @@ struct cam_req_mgr_apply_request {
uint64_t request_id;
int32_t report_if_bubble;
uint32_t trigger_point;
bool re_apply;
};
/**