[PATCH v14 6/7] drm/xe/pmu: Get/put runtime pm on event init

Lucas De Marchi
2025-01-22T06:24:17Z

When the event is created, make sure runtime pm is taken and later put:
in order to read an event counter the GPU needs to remain accessible and
doing a get/put during perf's read is not possible it's holding a
raw_spinlock.

Suggested-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
---
drivers/gpu/drm/xe/xe_pmu.c | 2 ++
1 file changed, 2 insertions(+)

diff --git a/drivers/gpu/drm/xe/xe_pmu.c b/drivers/gpu/drm/xe/xe_pmu.c
index 68ebec1746a53..8d938d67c1f2c 100644
--- a/drivers/gpu/drm/xe/xe_pmu.c
+++ b/drivers/gpu/drm/xe/xe_pmu.c
@@ -79,6 +79,7 @@ static void xe_pmu_event_destroy(struct perf_event *event)
struct xe_device *xe = container_of(event->pmu, typeof(*xe), pmu.base);

drm_WARN_ON(&xe->drm, event->parent);
+ xe_pm_runtime_put(xe);
drm_dev_put(&xe->drm);
}

@@ -111,6 +112,7 @@ static int xe_pmu_event_init(struct perf_event *event)

if (!event->parent) {
drm_dev_get(&xe->drm);
+ xe_pm_runtime_get(xe);
event->destroy = xe_pmu_event_destroy;
}

--
2.48.0