> > Some SoC specific might need command history for various reasons, such > > as stacking command contexts in system memory to check for debugging > > in the future or scaling some DVFS knobs to boost IO throughput. > > > > What you would do with the information could be variant per SoC > > vendor. > > > > Signed-off-by: Kiwoong Kim <kwmad.kim@xxxxxxxxxxx> > > --- > > drivers/scsi/ufs/ufshcd.c | 2 ++ > > drivers/scsi/ufs/ufshcd.h | 8 ++++++++ > > 2 files changed, 10 insertions(+) > > > > diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c > > index 52abe82..3326236 100644 > > --- a/drivers/scsi/ufs/ufshcd.c > > +++ b/drivers/scsi/ufs/ufshcd.c > > @@ -4882,6 +4882,7 @@ static void __ufshcd_transfer_req_compl(struct > > ufs_hba *hba, > > for_each_set_bit(index, &completed_reqs, hba->nutrs) { > > lrbp = &hba->lrb[index]; > > cmd = lrbp->cmd; > > + ufshcd_vops_compl_xfer_req(hba, index, (cmd) ? true : > > + false); > > if (cmd) { > > ufshcd_add_command_trace(hba, index, "complete"); > > result = ufshcd_transfer_rsp_status(hba, > > lrbp); @@ -4890,6 +4891,7 @@ static void > > __ufshcd_transfer_req_compl(struct > > ufs_hba *hba, > > /* Mark completed command as NULL in LRB */ > > lrbp->cmd = NULL; > > lrbp->compl_time_stamp = ktime_get(); > > + > > /* Do not touch lrbp after scsi done */ > > cmd->scsi_done(cmd); > > __ufshcd_release(hba); diff --git > > a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h index > > c774012..5cf9f99 100644 > > --- a/drivers/scsi/ufs/ufshcd.h > > +++ b/drivers/scsi/ufs/ufshcd.h > > @@ -307,6 +307,7 @@ struct ufs_hba_variant_ops { > > void (*config_scaling_param)(struct ufs_hba *hba, > > struct devfreq_dev_profile *profile, > > void *data); > > + void (*compl_xfer_req)(struct ufs_hba *hba, int tag, bool > is_scsi); > Maybe add it right after setup_xfer_req? > Makes more sense as it is its counterpart. > > Thanks, > Avri > > > }; Got it Thanks. Kiwoong Kim