Message ID | 20210531104308.391842-3-huobean@gmail.com |
---|---|
State | New |
Headers | show |
Series | [v2,1/4] scsi: ufs: Cleanup ufshcd_add_command_trace() | expand |
On 2021-05-31 18:43, Bean Huo wrote: > From: Bean Huo <beanhuo@micron.com> > > The current UPIU completion event trace still prints the COMMAND UPIU > header, rather than the RSP UPIU header. This makes UPIU command trace > useless in problem shooting in case we receive a trace log from the > customer/field. > > There are two important fields in RSP UPIU: > 1. The response field, which indicates the UFS defined overall success > or failure of the series of Command, Data and RESPONSE UPIU’s that > make up the execution of a task. > 2. The Status field, which contains the command set specific status > for > a specific command issued by the initiator device. > > Before this patch, the UPIU paired trace events: > > ufshcd_upiu: send_req: fe3b0000.ufs: HDR:01 20 00 1c 00 00 00 00 00 00 > 00 00, CDB:3b e1 00 00 00 00 00 00 30 00 00 00 00 00 00 00 > ufshcd_upiu: complete_rsp: fe3b0000.ufs: HDR:01 20 00 1c 00 00 00 00 > 00 00 00 00, CDB:3b e1 00 00 00 00 00 00 30 00 00 00 00 00 00 00 > > After the patch: > > ufshcd_upiu: send_req: fe3b0000.ufs: HDR:01 20 00 1c 00 00 00 00 00 00 > 00 00, CDB:3b e1 00 00 00 00 00 00 30 00 00 00 00 00 00 00 > ufshcd_upiu: complete_rsp: fe3b0000.ufs: HDR:21 00 00 1c 00 00 00 00 > 00 00 00 00, CDB:3b e1 00 00 00 00 00 00 30 00 00 00 00 00 00 00 > > Signed-off-by: Bean Huo <beanhuo@micron.com> > --- > drivers/scsi/ufs/ufshcd.c | 8 +++++++- > 1 file changed, 7 insertions(+), 1 deletion(-) > > diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c > index 85590d3a719e..c5754d5486c9 100644 > --- a/drivers/scsi/ufs/ufshcd.c > +++ b/drivers/scsi/ufs/ufshcd.c > @@ -302,11 +302,17 @@ static void ufshcd_add_cmd_upiu_trace(struct > ufs_hba *hba, unsigned int tag, > enum ufs_trace_str_t str_t) > { > struct utp_upiu_req *rq = hba->lrb[tag].ucd_req_ptr; > + struct utp_upiu_header *header; > > if (!trace_ufshcd_upiu_enabled()) > return; > > - trace_ufshcd_upiu(dev_name(hba->dev), str_t, &rq->header, > &rq->sc.cdb, > + if (str_t == UFS_CMD_SEND) > + header = &rq->header; > + else > + header = &hba->lrb[tag].ucd_rsp_ptr->header; > + > + trace_ufshcd_upiu(dev_name(hba->dev), str_t, header, &rq->sc.cdb, > UFS_TSF_CDB); > } Reviewed-by: Can Guo <cang@codeaurora.org>
diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index 85590d3a719e..c5754d5486c9 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -302,11 +302,17 @@ static void ufshcd_add_cmd_upiu_trace(struct ufs_hba *hba, unsigned int tag, enum ufs_trace_str_t str_t) { struct utp_upiu_req *rq = hba->lrb[tag].ucd_req_ptr; + struct utp_upiu_header *header; if (!trace_ufshcd_upiu_enabled()) return; - trace_ufshcd_upiu(dev_name(hba->dev), str_t, &rq->header, &rq->sc.cdb, + if (str_t == UFS_CMD_SEND) + header = &rq->header; + else + header = &hba->lrb[tag].ucd_rsp_ptr->header; + + trace_ufshcd_upiu(dev_name(hba->dev), str_t, header, &rq->sc.cdb, UFS_TSF_CDB); }