From: Lucas De Marchi Date: Fri, 24 Jan 2025 05:04:09 +0000 (-0800) Subject: drm/xe/pmu: Get/put runtime pm on event init X-Git-Tag: v6.15-rc1~120^2~15^2~86 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4ee64041bcca5289623c287336bfd94a42f42104;p=thirdparty%2Fkernel%2Flinux.git drm/xe/pmu: Get/put runtime pm on event init 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 Reviewed-by: Rodrigo Vivi Link: https://patchwork.freedesktop.org/patch/msgid/20250124050411.2189060-4-lucas.demarchi@intel.com Signed-off-by: Lucas De Marchi --- diff --git a/drivers/gpu/drm/xe/xe_pmu.c b/drivers/gpu/drm/xe/xe_pmu.c index 33598272db6aa..6678340d6195b 100644 --- a/drivers/gpu/drm/xe/xe_pmu.c +++ b/drivers/gpu/drm/xe/xe_pmu.c @@ -7,6 +7,7 @@ #include #include "xe_device.h" +#include "xe_pm.h" #include "xe_pmu.h" /** @@ -68,6 +69,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); } @@ -100,6 +102,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; }