Message ID | 89b90646c310fb0048701f219eb23c4b35ef7dcf.1594174981.git.kwmad.kim@samsung.com (mailing list archive) |
---|---|
State | Changes Requested |
Headers | show |
Series | [RESEND,RFC,v4,1/3] ufs: introduce a callback to get info of command completion | expand |
> > 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@samsung.com> > Acked-By: Stanley Chu <stanley.chu@mediatek.com> Reviewed-by: Avri Altman <avri.altman@wdc.com> It will require another spin however, because you'll need to rebase it After Stanley's (scsi: ufs: Fix and simplify setup_xfer_req vop and request's completion timestamp) Is accepted. Thanks, Avri
> > 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@samsung.com> > > Acked-By: Stanley Chu <stanley.chu@mediatek.com> > Reviewed-by: Avri Altman <avri.altman@wdc.com> > > It will require another spin however, because you'll need to rebase it > After Stanley's (scsi: ufs: Fix and simplify setup_xfer_req vop and > request's completion timestamp) Is accepted. > > Thanks, > Avri Got it. And is there any way that you can recommend to rebase, not by hand? I tried to find how but failed. Thanks. Kiwoong Kim
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..e5353d6 100644 --- a/drivers/scsi/ufs/ufshcd.h +++ b/drivers/scsi/ufs/ufshcd.h @@ -294,6 +294,7 @@ struct ufs_hba_variant_ops { struct ufs_pa_layer_attr *, struct ufs_pa_layer_attr *); void (*setup_xfer_req)(struct ufs_hba *, int, bool); + void (*compl_xfer_req)(struct ufs_hba *hba, int tag, bool is_scsi); void (*setup_task_mgmt)(struct ufs_hba *, int, u8); void (*hibern8_notify)(struct ufs_hba *, enum uic_cmd_dme, enum ufs_notify_change_status); @@ -1070,6 +1071,13 @@ static inline void ufshcd_vops_setup_xfer_req(struct ufs_hba *hba, int tag, return hba->vops->setup_xfer_req(hba, tag, is_scsi_cmd); } +static inline void ufshcd_vops_compl_xfer_req(struct ufs_hba *hba, + int tag, bool is_scsi) +{ + if (hba->vops && hba->vops->compl_xfer_req) + hba->vops->compl_xfer_req(hba, tag, is_scsi); +} + static inline void ufshcd_vops_setup_task_mgmt(struct ufs_hba *hba, int tag, u8 tm_function) {