mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2025-01-10 07:44:23 +08:00
drm/i915/pmu: Keep a reference to module while active
While a perf event is open, keep a reference to the module so we don't remove the driver internals mid-sampling. Testcase: igt/perf_pmu/module-unload Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Cc: stable@vger.kernel.org Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20200430183324.23984-1-chris@chris-wilson.co.uk
This commit is contained in:
parent
16e8745967
commit
3b55cdeb8f
@ -442,6 +442,7 @@ static u64 count_interrupts(struct drm_i915_private *i915)
|
|||||||
static void i915_pmu_event_destroy(struct perf_event *event)
|
static void i915_pmu_event_destroy(struct perf_event *event)
|
||||||
{
|
{
|
||||||
WARN_ON(event->parent);
|
WARN_ON(event->parent);
|
||||||
|
module_put(THIS_MODULE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
@ -533,8 +534,10 @@ static int i915_pmu_event_init(struct perf_event *event)
|
|||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
if (!event->parent)
|
if (!event->parent) {
|
||||||
|
__module_get(THIS_MODULE);
|
||||||
event->destroy = i915_pmu_event_destroy;
|
event->destroy = i915_pmu_event_destroy;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user