]> www.infradead.org Git - users/hch/configfs.git/commitdiff
drm/xe/pm: Add trace for pm functions
authorNirmoy Das <nirmoy.das@intel.com>
Wed, 17 Jul 2024 12:59:50 +0000 (14:59 +0200)
committerNirmoy Das <nirmoy.das@intel.com>
Thu, 18 Jul 2024 08:43:43 +0000 (10:43 +0200)
Add trace for xe pm function for better debuggability.

v2: Fix indentation and add trace for xe_pm_runtime_get_ioctl

Cc: Matthew Brost <matthew.brost@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Reviewed-by: Matthew Brost <matthew.brost@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240717125950.9952-1-nirmoy.das@intel.com
Signed-off-by: Nirmoy Das <nirmoy.das@intel.com>
drivers/gpu/drm/xe/xe_pm.c
drivers/gpu/drm/xe/xe_trace.h

index de3b5df65e4816989438624e8c68fae2c2020f7d..9f3c14fd9f33787351fc14ed2d49809e7fd30e4d 100644 (file)
@@ -20,6 +20,7 @@
 #include "xe_guc.h"
 #include "xe_irq.h"
 #include "xe_pcode.h"
+#include "xe_trace.h"
 #include "xe_wa.h"
 
 /**
@@ -87,6 +88,7 @@ int xe_pm_suspend(struct xe_device *xe)
        int err;
 
        drm_dbg(&xe->drm, "Suspending device\n");
+       trace_xe_pm_suspend(xe, __builtin_return_address(0));
 
        for_each_gt(gt, xe, id)
                xe_gt_suspend_prepare(gt);
@@ -131,6 +133,7 @@ int xe_pm_resume(struct xe_device *xe)
        int err;
 
        drm_dbg(&xe->drm, "Resuming device\n");
+       trace_xe_pm_resume(xe, __builtin_return_address(0));
 
        for_each_tile(tile, xe, id)
                xe_wa_apply_tile_workarounds(tile);
@@ -326,6 +329,7 @@ int xe_pm_runtime_suspend(struct xe_device *xe)
        u8 id;
        int err = 0;
 
+       trace_xe_pm_runtime_suspend(xe, __builtin_return_address(0));
        /* Disable access_ongoing asserts and prevent recursive pm calls */
        xe_pm_write_callback_task(xe, current);
 
@@ -399,6 +403,7 @@ int xe_pm_runtime_resume(struct xe_device *xe)
        u8 id;
        int err = 0;
 
+       trace_xe_pm_runtime_resume(xe, __builtin_return_address(0));
        /* Disable access_ongoing asserts and prevent recursive pm calls */
        xe_pm_write_callback_task(xe, current);
 
@@ -463,6 +468,7 @@ static void pm_runtime_lockdep_prime(void)
  */
 void xe_pm_runtime_get(struct xe_device *xe)
 {
+       trace_xe_pm_runtime_get(xe, __builtin_return_address(0));
        pm_runtime_get_noresume(xe->drm.dev);
 
        if (xe_pm_read_callback_task(xe) == current)
@@ -478,6 +484,7 @@ void xe_pm_runtime_get(struct xe_device *xe)
  */
 void xe_pm_runtime_put(struct xe_device *xe)
 {
+       trace_xe_pm_runtime_put(xe, __builtin_return_address(0));
        if (xe_pm_read_callback_task(xe) == current) {
                pm_runtime_put_noidle(xe->drm.dev);
        } else {
@@ -495,6 +502,7 @@ void xe_pm_runtime_put(struct xe_device *xe)
  */
 int xe_pm_runtime_get_ioctl(struct xe_device *xe)
 {
+       trace_xe_pm_runtime_get_ioctl(xe, __builtin_return_address(0));
        if (WARN_ON(xe_pm_read_callback_task(xe) == current))
                return -ELOOP;
 
index baba14fb1e32e6b511dff637e7330c5221b9bdf7..1abdb30cb7adee63f35dfa5d9270138fbeba4599 100644 (file)
@@ -369,6 +369,58 @@ TRACE_EVENT(xe_reg_rw,
                  (u32)(__entry->val >> 32))
 );
 
+DECLARE_EVENT_CLASS(xe_pm_runtime,
+                   TP_PROTO(struct xe_device *xe, void *caller),
+                   TP_ARGS(xe, caller),
+
+                   TP_STRUCT__entry(
+                            __string(dev, __dev_name_xe(xe))
+                            __field(void *, caller)
+                            ),
+
+                   TP_fast_assign(
+                          __assign_str(dev);
+                          __entry->caller = caller;
+                          ),
+
+                   TP_printk("dev=%s caller_function=%pS", __get_str(dev), __entry->caller)
+);
+
+DEFINE_EVENT(xe_pm_runtime, xe_pm_runtime_get,
+            TP_PROTO(struct xe_device *xe, void *caller),
+            TP_ARGS(xe, caller)
+);
+
+DEFINE_EVENT(xe_pm_runtime, xe_pm_runtime_put,
+            TP_PROTO(struct xe_device *xe, void *caller),
+            TP_ARGS(xe, caller)
+);
+
+DEFINE_EVENT(xe_pm_runtime, xe_pm_resume,
+            TP_PROTO(struct xe_device *xe, void *caller),
+            TP_ARGS(xe, caller)
+);
+
+DEFINE_EVENT(xe_pm_runtime, xe_pm_suspend,
+            TP_PROTO(struct xe_device *xe, void *caller),
+            TP_ARGS(xe, caller)
+);
+
+DEFINE_EVENT(xe_pm_runtime, xe_pm_runtime_resume,
+            TP_PROTO(struct xe_device *xe, void *caller),
+            TP_ARGS(xe, caller)
+);
+
+DEFINE_EVENT(xe_pm_runtime, xe_pm_runtime_suspend,
+            TP_PROTO(struct xe_device *xe, void *caller),
+            TP_ARGS(xe, caller)
+);
+
+DEFINE_EVENT(xe_pm_runtime, xe_pm_runtime_get_ioctl,
+            TP_PROTO(struct xe_device *xe, void *caller),
+            TP_ARGS(xe, caller)
+);
+
 #endif
 
 /* This part must be outside protection */