Message ID | 20210119141542.3808-2-adrian.hunter@intel.com |
---|---|
State | Superseded |
Headers | show |
Series | scsi: ufs-debugfs: Add UFS Exception Event reporting | expand |
On Tue, 2021-01-19 at 16:15 +0200, Adrian Hunter wrote: > Currently, exception event status can be read from > wExceptionEventStatus > attribute (sysfs file attributes/exception_event_status under the UFS > host > controller device directory). Polling that attribute to track UFS > exception > events is impractical, so add a tracepoint to track exception events > for > testing and debugging purposes. > > Note, by the time the exception event status is read, the exception > event > may have cleared, so the value can be zero - see example below. > > Note also, only enabled exception events can be reported. A > subsequent > patch adds the ability for users to enable selected exception events > via > debugfs. > > Example with driver instrumented to enable all exception events: > > # echo 1 > > /sys/kernel/debug/tracing/events/ufs/ufshcd_exception_event/enable > > ... do some I/O ... > > # cat /sys/kernel/debug/tracing/trace > # tracer: nop > # > # entries-in-buffer/entries-written: 3/3 #P:5 > # > # _-----=> irqs-off > # / _----=> need-resched > # | / _---=> hardirq/softirq > # || / _--=> preempt-depth > # ||| / delay > # TASK-PID CPU# |||| TIMESTAMP FUNCTION > # | | | |||| | | > kworker/2:2-173 [002] .... 731.486419: > ufshcd_exception_event: 0000:00:12.5: exception event status 0x0 > kworker/2:2-173 [002] .... 732.608918: > ufshcd_exception_event: 0000:00:12.5: exception event status 0x4 > kworker/2:2-173 [002] .... 732.609312: > ufshcd_exception_event: 0000:00:12.5: exception event status 0x4 Hi Adrian aAbove print has two trace strings "exception event" in each event print, it is somehow redundant to me, why not replace the second one with the event string name? ufshcd_exception_event: 0000:00:12.5: LOW_TEMP 0x4 or just status: ufshcd_exception_event: 0000:00:12.5: status 0x4 Bean > >
diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index 46a499b7e8a8..7d46b2c278dd 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -5624,6 +5624,8 @@ static void ufshcd_exception_event_handler(struct work_struct *work) goto out; } + trace_ufshcd_exception_event(dev_name(hba->dev), status); + status &= hba->ee_ctrl_mask; if (status & MASK_EE_URGENT_BKOPS) diff --git a/include/trace/events/ufs.h b/include/trace/events/ufs.h index e151477d645c..5a2586217eb6 100644 --- a/include/trace/events/ufs.h +++ b/include/trace/events/ufs.h @@ -349,6 +349,27 @@ TRACE_EVENT(ufshcd_upiu, ) ); +TRACE_EVENT(ufshcd_exception_event, + + TP_PROTO(const char *dev_name, u16 status), + + TP_ARGS(dev_name, status), + + TP_STRUCT__entry( + __string(dev_name, dev_name) + __field(u16, status) + ), + + TP_fast_assign( + __assign_str(dev_name, dev_name); + __entry->status = status; + ), + + TP_printk("%s: exception event status 0x%x", + __get_str(dev_name), __entry->status + ) +); + #endif /* if !defined(_TRACE_UFS_H) || defined(TRACE_HEADER_MULTI_READ) */ /* This part must be outside protection */
Currently, exception event status can be read from wExceptionEventStatus attribute (sysfs file attributes/exception_event_status under the UFS host controller device directory). Polling that attribute to track UFS exception events is impractical, so add a tracepoint to track exception events for testing and debugging purposes. Note, by the time the exception event status is read, the exception event may have cleared, so the value can be zero - see example below. Note also, only enabled exception events can be reported. A subsequent patch adds the ability for users to enable selected exception events via debugfs. Example with driver instrumented to enable all exception events: # echo 1 > /sys/kernel/debug/tracing/events/ufs/ufshcd_exception_event/enable ... do some I/O ... # cat /sys/kernel/debug/tracing/trace # tracer: nop # # entries-in-buffer/entries-written: 3/3 #P:5 # # _-----=> irqs-off # / _----=> need-resched # | / _---=> hardirq/softirq # || / _--=> preempt-depth # ||| / delay # TASK-PID CPU# |||| TIMESTAMP FUNCTION # | | | |||| | | kworker/2:2-173 [002] .... 731.486419: ufshcd_exception_event: 0000:00:12.5: exception event status 0x0 kworker/2:2-173 [002] .... 732.608918: ufshcd_exception_event: 0000:00:12.5: exception event status 0x4 kworker/2:2-173 [002] .... 732.609312: ufshcd_exception_event: 0000:00:12.5: exception event status 0x4 Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> --- drivers/scsi/ufs/ufshcd.c | 2 ++ include/trace/events/ufs.h | 21 +++++++++++++++++++++ 2 files changed, 23 insertions(+)