mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-03-22 07:27:12 +08:00
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 <rodrigo.vivi@intel.com> Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20250124050411.2189060-4-lucas.demarchi@intel.com Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
This commit is contained in:
@@ -7,6 +7,7 @@
|
||||
#include <linux/device.h>
|
||||
|
||||
#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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user