On 21/09/18 16:08, Shameer Kolothum wrote:
[...]
+
+       err = cpuhp_state_add_instance_nocalls(cpuhp_state_num,
+                                              &smmu_pmu->node);

In theory a hotplug event could happen as soon as the instance is registered...

+       if (err) {
+               dev_err(dev, "Error %d registering hotplug, PMU @%pa\n",
+                       err, &res_0->start);
+               return err;
+       }
+
+       /* Pick one CPU to be the preferred one to use */
+       smmu_pmu->on_cpu = get_cpu();

...so this looks too late, i.e. a race here can result in a bogus call to perf_pmu_migrate_context() with an uninitialised pmu.

Robin.

+       WARN_ON(irq_set_affinity(smmu_pmu->irq, cpumask_of(smmu_pmu->on_cpu)));
+
+       err = perf_pmu_register(&smmu_pmu->pmu, name, -1);
+       if (err) {
+               dev_err(dev, "Error %d registering PMU @%pa\n",
+                       err, &res_0->start);
+               goto out_unregister;
+       }
+
+       put_cpu();

Reply via email to