msm: eva: Improve error handling for pkt enqueuing

Report error code for pkt enqueue failure - critical
for reporting rejected frames in flush scenarios.
Improve logging for unprocessed frames.

Change-Id: Ic5d04a56122b0bbf94f69117ee0fde9f5993e275
Signed-off-by: Sabharsh Sidhu <quic_ssidhu@quicinc.com>
Tento commit je obsažen v:
Sabharsh Sidhu
2023-02-17 18:00:18 -08:00
odevzdal Gerrit - the friendly Code Review server
rodič 9de86afd60
revize 6aabaf3247
2 změnil soubory, kde provedl 29 přidání a 16 odebrání

Zobrazit soubor

@@ -171,6 +171,7 @@ static int msm_cvp_session_process_hfi(
unsigned int offset = 0, buf_num = 0, signal;
struct cvp_session_queue *sq;
struct msm_cvp_inst *s;
struct cvp_hfi_cmd_session_hdr *pkt_hdr;
bool is_config_pkt;
@@ -226,7 +227,8 @@ static int msm_cvp_session_process_hfi(
}
if (!is_buf_param_valid(buf_num, offset)) {
dprintk(CVP_ERR, "Incorrect buffer num and offset in cmd\n");
return -EINVAL;
rc = -EINVAL;
goto exit;
}
rc = msm_cvp_proc_oob(inst, in_pkt);
@@ -235,7 +237,15 @@ static int msm_cvp_session_process_hfi(
goto exit;
}
cvp_enqueue_pkt(inst, in_pkt, offset, buf_num);
rc = cvp_enqueue_pkt(inst, in_pkt, offset, buf_num);
if (rc) {
pkt_hdr = (struct cvp_hfi_cmd_session_hdr *)in_pkt;
dprintk(CVP_ERR, "Failed to enqueue pkt, inst %pK "
"pkt_type %08x ktid %llu transaction_id %u\n",
inst, pkt_hdr->packet_type,
pkt_hdr->client_data.kdata,
pkt_hdr->client_data.transaction_id);
}
exit:
cvp_put_inst(inst);
@@ -599,8 +609,10 @@ static int cvp_populate_fences( struct eva_kmd_hfi_packet *in_pkt,
cmd_hdr = (struct cvp_hfi_cmd_session_hdr *)in_pkt;
rc = cvp_alloc_fence_data((&f), cmd_hdr->size);
if (rc)
if (rc) {
dprintk(CVP_ERR,"%s: Failed to alloc fence data", __func__);
goto exit;
}
f->type = cmd_hdr->packet_type;
f->mode = OP_NORMAL;
@@ -668,11 +680,11 @@ static int cvp_populate_fences( struct eva_kmd_hfi_packet *in_pkt,
if (f->num_fences == 0)
goto free_exit;
rc = inst->core->synx_ftbl->cvp_import_synx(inst, f,
(u32*)fences);
if (rc)
rc = inst->core->synx_ftbl->cvp_import_synx(inst, f, (u32*)fences);
if (rc) {
dprintk(CVP_ERR,"%s: Failed to import fences", __func__);
goto free_exit;
}
fence_cmd_queue:
memcpy(f->pkt, cmd_hdr, cmd_hdr->size);
@@ -735,16 +747,16 @@ static int cvp_enqueue_pkt(struct msm_cvp_inst* inst,
msm_cvp_unmap_frame(inst,
cmd_hdr->client_data.kdata);
}
goto exit;
} else if (rc > 0) {
dprintk(CVP_SYNX, "Going fenced path\n");
rc = 0;
} else {
if (rc > 0)
dprintk(CVP_SYNX, "Going fenced path\n");
else if (map_type == MAP_FRAME)
dprintk(CVP_ERR,"%s: Failed to populate fences\n",
__func__);
if (map_type == MAP_FRAME)
msm_cvp_unmap_frame(inst, cmd_hdr->client_data.kdata);
goto exit;
}
exit:
return rc;
}