Merge "msm: camera: reqmgr: On bubble reset appropriate slots" into camera-kernel.lnx.6.0

This commit is contained in:
Camera Software Integration
2021-12-15 19:16:25 -08:00
zatwierdzone przez Gerrit - the friendly Code Review server

Wyświetl plik

@@ -817,8 +817,8 @@ static int __cam_req_mgr_check_next_req_slot(
*/
if (slot->status == CRM_SLOT_STATUS_REQ_APPLIED) {
CAM_WARN(CAM_CRM,
"slot[%d] wasn't reset, reset it now",
idx);
"slot [idx: %d req: %lld last_applied_idx: %d] was not reset, reset it now",
idx, in_q->slot[idx].req_id, in_q->last_applied_idx);
if (in_q->last_applied_idx == idx) {
CAM_WARN(CAM_CRM,
"last_applied_idx: %d",
@@ -2986,6 +2986,7 @@ void __cam_req_mgr_apply_on_bubble(
int cam_req_mgr_process_error(void *priv, void *data)
{
int rc = 0, idx = -1;
int i, slot_diff;
struct cam_req_mgr_error_notify *err_info = NULL;
struct cam_req_mgr_core_link *link = NULL;
struct cam_req_mgr_req_queue *in_q = NULL;
@@ -3017,8 +3018,8 @@ int cam_req_mgr_process_error(void *priv, void *data)
"req_id %lld not found in input queue",
err_info->req_id);
} else {
CAM_DBG(CAM_CRM, "req_id %lld found at idx %d",
err_info->req_id, idx);
CAM_DBG(CAM_CRM, "req_id %lld found at idx %d last_applied %d",
err_info->req_id, idx, in_q->last_applied_idx);
slot = &in_q->slot[idx];
if (!slot->recover) {
CAM_WARN(CAM_CRM,
@@ -3045,13 +3046,31 @@ int cam_req_mgr_process_error(void *priv, void *data)
in_q->slot[idx].sync_mode = 0;
}
/* The next req may also be applied */
/*
* Reset till last applied, even if there are scheduling delays
* we start fresh from the request on which bubble has
* been reported
*/
idx = in_q->rd_idx;
__cam_req_mgr_inc_idx(&idx, 1,
link->req.l_tbl->num_slots);
if (in_q->last_applied_idx >= 0) {
slot_diff = in_q->last_applied_idx - idx;
if (slot_diff < 0)
slot_diff += link->req.l_tbl->num_slots;
} else {
/* Next req at the minimum may be applied */
slot_diff = 1;
}
if (in_q->slot[idx].status == CRM_SLOT_STATUS_REQ_APPLIED)
in_q->slot[idx].status = CRM_SLOT_STATUS_REQ_ADDED;
for (i = 0; i < slot_diff; i++) {
__cam_req_mgr_inc_idx(&idx, 1,
link->req.l_tbl->num_slots);
CAM_DBG(CAM_CRM,
"Recovery on idx: %d reset slot [idx: %d status: %d]",
in_q->rd_idx, idx, in_q->slot[idx].status);
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;