Commit 4ee64041 authored by Lucas De Marchi's avatar Lucas De Marchi
Browse files

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: default avatarRodrigo Vivi <rodrigo.vivi@intel.com>
Reviewed-by: default avatarRodrigo Vivi <rodrigo.vivi@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250124050411.2189060-4-lucas.demarchi@intel.com


Signed-off-by: default avatarLucas De Marchi <lucas.demarchi@intel.com>
parent ef7ce393
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -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;
	}