Setting event_init to NULL is mostly done to detect when the driver is
partially working: i915 probed, but pmu is not registered. However,
checking for event_init is odd as it was supposed to always be set and
kernel/events/ would just crash if it found it set to NULL.

Since there's already a "closed" boolean, use that instead and extend
it's meaning to unregistered/unregistering.

Reviewed-by: Matt Roper <matthew.d.ro...@intel.com>
Signed-off-by: Lucas De Marchi <lucas.demar...@intel.com>
---
 drivers/gpu/drm/i915/i915_pmu.c | 18 ++++++------------
 1 file changed, 6 insertions(+), 12 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_pmu.c b/drivers/gpu/drm/i915/i915_pmu.c
index 8706957ddc0a3..86faa5705fd8f 100644
--- a/drivers/gpu/drm/i915/i915_pmu.c
+++ b/drivers/gpu/drm/i915/i915_pmu.c
@@ -302,7 +302,7 @@ void i915_pmu_gt_parked(struct intel_gt *gt)
 {
        struct i915_pmu *pmu = &gt->i915->pmu;
 
-       if (!pmu->base.event_init)
+       if (pmu->closed)
                return;
 
        spin_lock_irq(&pmu->lock);
@@ -324,7 +324,7 @@ void i915_pmu_gt_unparked(struct intel_gt *gt)
 {
        struct i915_pmu *pmu = &gt->i915->pmu;
 
-       if (!pmu->base.event_init)
+       if (pmu->closed)
                return;
 
        spin_lock_irq(&pmu->lock);
@@ -1177,8 +1177,6 @@ static int i915_pmu_cpu_online(unsigned int cpu, struct 
hlist_node *node)
 {
        struct i915_pmu *pmu = hlist_entry_safe(node, typeof(*pmu), cpuhp.node);
 
-       GEM_BUG_ON(!pmu->base.event_init);
-
        /* Select the first online CPU as a designated reader. */
        if (cpumask_empty(&i915_pmu_cpumask))
                cpumask_set_cpu(cpu, &i915_pmu_cpumask);
@@ -1191,8 +1189,6 @@ static int i915_pmu_cpu_offline(unsigned int cpu, struct 
hlist_node *node)
        struct i915_pmu *pmu = hlist_entry_safe(node, typeof(*pmu), cpuhp.node);
        unsigned int target = i915_pmu_target_cpu;
 
-       GEM_BUG_ON(!pmu->base.event_init);
-
        /*
         * Unregistering an instance generates a CPU offline event which we must
         * ignore to avoid incorrectly modifying the shared i915_pmu_cpumask.
@@ -1265,9 +1261,10 @@ void i915_pmu_register(struct drm_i915_private *i915)
                &i915_pmu_cpumask_attr_group,
                NULL
        };
-
        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;
@@ -1316,6 +1313,8 @@ void i915_pmu_register(struct drm_i915_private *i915)
        if (ret)
                goto err_unreg;
 
+       pmu->closed = false;
+
        return;
 
 err_unreg:
@@ -1323,7 +1322,6 @@ void i915_pmu_register(struct drm_i915_private *i915)
 err_groups:
        kfree(pmu->base.attr_groups);
 err_attr:
-       pmu->base.event_init = NULL;
        free_event_attributes(pmu);
 err_name:
        if (IS_DGFX(i915))
@@ -1336,9 +1334,6 @@ void i915_pmu_unregister(struct drm_i915_private *i915)
 {
        struct i915_pmu *pmu = &i915->pmu;
 
-       if (!pmu->base.event_init)
-               return;
-
        /*
         * "Disconnect" the PMU callbacks - since all are atomic synchronize_rcu
         * ensures all currently executing ones will have exited before we
@@ -1352,7 +1347,6 @@ void i915_pmu_unregister(struct drm_i915_private *i915)
        i915_pmu_unregister_cpuhp_state(pmu);
 
        perf_pmu_unregister(&pmu->base);
-       pmu->base.event_init = NULL;
        kfree(pmu->base.attr_groups);
        if (IS_DGFX(i915))
                kfree(pmu->name);
-- 
2.47.0

Reply via email to