Messages in this thread | | | Subject | Re: [PATCH v2 2/2] perf/arm-ccn: Remove broken race mitigation | From | Suzuki K Poulose <> | Date | Thu, 4 Apr 2019 11:46:50 +0100 |
| |
Hi Robin,
On 03/04/2019 18:10, Robin Murphy wrote: > Like arm-cci, arm-ccn has the same issue of disabling preemption around > operations which can take mutexes. Again, remove the definite bug by > simply not trying to fight the theoretical races. And since we are > touching the hotplug handling code, take the opportunity to streamline > it, as there's really no need to store a full-sized cpumask to keep > track of a single CPU ID. > > Signed-off-by: Robin Murphy <robin.murphy@arm.com> > --- > drivers/perf/arm-ccn.c | 23 +++++++++++------------ > 1 file changed, 11 insertions(+), 12 deletions(-) > > diff --git a/drivers/perf/arm-ccn.c b/drivers/perf/arm-ccn.c > index 2ae76026e947..a0214308b0cd 100644 > --- a/drivers/perf/arm-ccn.c > +++ b/drivers/perf/arm-ccn.c
> /* Pick one CPU which we will use to collect data from CCN... */ > - cpumask_set_cpu(get_cpu(), &ccn->dt.cpu); > + ccn->dt.cpu = raw_smp_processor_id(); > > /* Also make sure that the overflow interrupt is handled by this CPU */ > if (ccn->irq) { > - err = irq_set_affinity_hint(ccn->irq, &ccn->dt.cpu); > + err = irq_set_affinity_hint(ccn->irq, cpumask_of(ccn->dt.cpu)); > if (err) { > dev_err(ccn->dev, "Failed to set interrupt affinity!\n"); > goto error_set_affinity; > } > } > > + cpuhp_state_add_instance_nocalls(CPUHP_AP_PERF_ARM_CCN_ONLINE, > + &ccn->dt.node); > + > err = perf_pmu_register(&ccn->dt.pmu, name, -1); > if (err) > goto error_pmu_register;
Should we not remove the above instance, in case we fail to register the PMU ? Similarly for the CCI driver, we may have to reset the g_cci_pmu if we fail.
Cheers Suzuki
> > - cpuhp_state_add_instance_nocalls(CPUHP_AP_PERF_ARM_CCN_ONLINE, > - &ccn->dt.node); > - put_cpu(); > return 0; > > error_pmu_register: > error_set_affinity: > - put_cpu(); > error_choose_name: > ida_simple_remove(&arm_ccn_pmu_ida, ccn->dt.id); > for (i = 0; i < ccn->num_xps; i++) >
| |