Linux-ARM-Kernel Archive on lore.kernel.org
 help / color / mirror / Atom feed
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

  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