[PATCH 3/4] ARM: perf: check that we have an event in the PMU IRQ handlers
Will Deacon
will.deacon at arm.com
Fri Feb 24 05:11:30 EST 2012
On Fri, Feb 24, 2012 at 01:34:32AM +0000, Ming Lei wrote:
> On Thu, Feb 23, 2012 at 11:58 PM, Will Deacon <will.deacon at arm.com> wrote:
> > @@ -513,7 +496,8 @@ armv6pmu_handle_irq(int irq_num,
> > struct perf_event *event = cpuc->events[idx];
> > struct hw_perf_event *hwc;
> >
> > - if (!counter_is_active(pmcr, idx))
> > + /* Ignore if we don't have an event. */
> > + if (!event)
>
> I think we should check it via test_bit(idx, cpuc->used_mask) because
> 'hw_events->events[idx] = val' is not atomic operation and it is read here
> in irq context.
I dunno, that code is compiled to:
e5973000 ldr r3, [r7]
e7834106 str r4, [r3, r6, lsl #2]
so you should either see the new value or the old one - you can't see half a
pointer in there since it's a single 32-bit store.
Will
More information about the linux-arm-kernel
mailing list