diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index 0be1a662038d..cf9cfc97e011 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -109,6 +109,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ftrace_oops_exit); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ftrace_size_check); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ftrace_format_check); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ftrace_dump_buffer); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ufs_fill_prdt); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ufs_prepare_command); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ufs_update_sysfs); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ufs_send_command); diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index 109231398fce..73cbec392899 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -2256,6 +2256,7 @@ static int ufshcd_map_sg(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) struct scsi_cmnd *cmd; int sg_segments; int i; + int err; cmd = lrbp->cmd; sg_segments = scsi_dma_map(cmd); @@ -2287,7 +2288,9 @@ static int ufshcd_map_sg(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) lrbp->utr_descriptor_ptr->prd_table_length = 0; } - return ufshcd_vops_fill_prdt(hba, lrbp, sg_segments); + err = 0; + trace_android_vh_ufs_fill_prdt(hba, lrbp, sg_segments, &err); + return err; } /** diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h index c663a4031f24..99714a2d64ce 100644 --- a/drivers/scsi/ufs/ufshcd.h +++ b/drivers/scsi/ufs/ufshcd.h @@ -324,8 +324,6 @@ struct ufs_pwr_mode_info { * @device_reset: called to issue a reset pulse on the UFS device * @program_key: program or evict an inline encryption key * @event_notify: called to notify important events - * @fill_prdt: called after initializing the standard PRDT fields so that any - * variant-specific PRDT fields can be initialized too */ struct ufs_hba_variant_ops { const char *name; @@ -362,8 +360,6 @@ struct ufs_hba_variant_ops { const union ufs_crypto_cfg_entry *cfg, int slot); void (*event_notify)(struct ufs_hba *hba, enum ufs_event_type evt, void *data); - int (*fill_prdt)(struct ufs_hba *hba, struct ufshcd_lrb *lrbp, - unsigned int segments); }; /* clock gating state */ @@ -1268,16 +1264,6 @@ static inline void ufshcd_vops_config_scaling_param(struct ufs_hba *hba, hba->vops->config_scaling_param(hba, profile, data); } -static inline int ufshcd_vops_fill_prdt(struct ufs_hba *hba, - struct ufshcd_lrb *lrbp, - unsigned int segments) -{ - if (hba->vops && hba->vops->fill_prdt) - return hba->vops->fill_prdt(hba, lrbp, segments); - - return 0; -} - extern struct ufs_pm_lvl_states ufs_pm_lvl_states[]; /* diff --git a/include/trace/hooks/ufshcd.h b/include/trace/hooks/ufshcd.h index 51629c0ae40c..c22e5d37a962 100644 --- a/include/trace/hooks/ufshcd.h +++ b/include/trace/hooks/ufshcd.h @@ -13,6 +13,12 @@ struct ufs_hba; struct request; struct ufshcd_lrb; + +DECLARE_HOOK(android_vh_ufs_fill_prdt, + TP_PROTO(struct ufs_hba *hba, struct ufshcd_lrb *lrbp, + unsigned int segments, int *err), + TP_ARGS(hba, lrbp, segments, err)); + DECLARE_HOOK(android_vh_ufs_prepare_command, TP_PROTO(struct ufs_hba *hba, struct request *rq, struct ufshcd_lrb *lrbp, int *err),