{
struct i915_pmu *pmu = >->i915->pmu;
- if (pmu->closed)
+ if (!pmu->registered)
return;
spin_lock_irq(&pmu->lock);
{
struct i915_pmu *pmu = >->i915->pmu;
- if (pmu->closed)
+ if (!pmu->registered)
return;
spin_lock_irq(&pmu->lock);
struct drm_i915_private *i915 = pmu_to_i915(pmu);
int ret;
- if (pmu->closed)
+ if (!pmu->registered)
return -ENODEV;
if (event->attr.type != event->pmu->type)
struct hw_perf_event *hwc = &event->hw;
u64 prev, new;
- if (pmu->closed) {
+ if (!pmu->registered) {
event->hw.state = PERF_HES_STOPPED;
return;
}
{
struct i915_pmu *pmu = event_to_pmu(event);
- if (pmu->closed)
+ if (!pmu->registered)
return;
i915_pmu_enable(event);
{
struct i915_pmu *pmu = event_to_pmu(event);
- if (pmu->closed)
+ if (!pmu->registered)
goto out;
if (flags & PERF_EF_UPDATE)
{
struct i915_pmu *pmu = event_to_pmu(event);
- if (pmu->closed)
+ if (!pmu->registered)
return -ENODEV;
if (flags & PERF_EF_START)
* Unregistering an instance generates a CPU offline event which we must
* ignore to avoid incorrectly modifying the shared i915_pmu_cpumask.
*/
- if (pmu->closed)
+ if (!pmu->registered)
return 0;
if (cpumask_test_and_clear_cpu(cpu, &i915_pmu_cpumask)) {
};
int ret = -ENOMEM;
- pmu->closed = true;
-
spin_lock_init(&pmu->lock);
hrtimer_init(&pmu->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
pmu->timer.function = i915_sample;
if (ret)
goto err_unreg;
- pmu->closed = false;
+ pmu->registered = true;
return;
{
struct i915_pmu *pmu = &i915->pmu;
+ if (!pmu->registered)
+ return;
+
/*
* "Disconnect" the PMU callbacks - since all are atomic synchronize_rcu
* ensures all currently executing ones will have exited before we
* proceed with unregistration.
*/
- pmu->closed = true;
+ pmu->registered = false;
synchronize_rcu();
hrtimer_cancel(&pmu->timer);