From: tom.leiming@gmail.com (Ming Lei)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 3/4] ARM: perf: check that we have an event in the PMU IRQ handlers
Date: Mon, 27 Feb 2012 17:56:46 +0800 [thread overview]
Message-ID: <20120227175646.7c39e542@tom-ThinkPad-T410> (raw)
In-Reply-To: <20120224101130.GB13504@mudshark.cambridge.arm.com>
Hi,
On Fri, 24 Feb 2012 10:11:30 +0000
Will Deacon <will.deacon@arm.com> wrote:
> 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@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.
Firstly the code above is only generated from one of many existing compile
options, for example, maybe storing to 32bit variable involves two instructions
in thumb mode, so are you sure it is always OK for all cases?
Secondly, I am even not sure if ARM irq handler is always triggered in instruction
boundary, maybe the irq handler is started during execution of the store instruction.
In fact, I can find the sentence below in 'B1.6.16 IRQ exception' of ARMv7 manual:
This relaxation of the normal definition of a precise asynchronous exception
permits interrupts to occur during the execution of instructions that change register
or memory values, while only requiring the implementation to restore those register
values that are needed to correctly re-execute the instruction after the preferred
exception return. LDM and STM are examples of such instructions.
So suggest to take the correct way in theory, IMO.
thanks,
--
Ming Lei
next prev parent reply other threads:[~2012-02-27 9:56 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-02-23 15:58 [PATCH 0/4] perf IRQ fixes Will Deacon
2012-02-23 15:58 ` [PATCH 1/4] ARM: perf: limit sample_period to half max_period in non-sampling mode Will Deacon
2012-02-23 15:58 ` [PATCH 2/4] ARM: perf: clear overflow flag when disabling counter on ARMv7 PMU Will Deacon
2012-02-24 2:05 ` Ming Lei
2012-02-23 15:58 ` [PATCH 3/4] ARM: perf: check that we have an event in the PMU IRQ handlers Will Deacon
2012-02-24 1:34 ` Ming Lei
2012-02-24 10:11 ` Will Deacon
2012-02-27 9:56 ` Ming Lei [this message]
2012-02-27 19:36 ` Will Deacon
2012-02-28 0:53 ` Ming Lei
2012-02-28 10:55 ` Will Deacon
2012-02-28 14:28 ` Ming Lei
2012-02-23 15:58 ` [PATCH 4/4] ARM: perf: fix overflow handling for xscale2 PMUs Will Deacon
2012-03-07 9:41 ` [PATCH 0/4] perf IRQ fixes Russell King - ARM Linux
2012-03-07 9:44 ` Will Deacon
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20120227175646.7c39e542@tom-ThinkPad-T410 \
--to=tom.leiming@gmail.com \
--cc=linux-arm-kernel@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox