All of lore.kernel.org
 help / color / mirror / Atom feed
From: daniel.thompson@linaro.org (Daniel Thompson)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2] arm: Fix backtrace generation when IPI is masked
Date: Tue, 15 Sep 2015 14:15:10 +0100	[thread overview]
Message-ID: <55F819DE.9040704@linaro.org> (raw)
In-Reply-To: <20150915113003.GS21084@n2100.arm.linux.org.uk>

On 15/09/15 12:30, Russell King - ARM Linux wrote:
> On Tue, Sep 15, 2015 at 12:05:12PM +0100, Daniel Thompson wrote:
>> Currently on ARM when <SysRq-L> is triggered from an interrupt handler
>> (e.g. a SysRq issued using UART or kbd) the main CPU will wedge for ten
>> seconds with interrupts masked before issuing a backtrace for every CPU
>> except itself.
>>
>> The new backtrace code introduced by commit 96f0e00378d4 ("ARM: add
>> basic support for on-demand backtrace of other CPUs") does not work
>> correctly when run from an interrupt handler because IPI_CPU_BACKTRACE
>> is used to generate the backtrace on all CPUs but cannot preempt the
>> current calling context.
>
> This patch needs a little more work - what happens to the IPI_CPU_BACKTRACE
> we've sent to ourselves?  (It fires after the interrupt handler for the
> UART/kbd has finished.)  It ought to be masked out if we're going to
> handle it a different way.

Actually it already gets masked out. The argument to raise_nmi() points 
to a data structure owned by the backtrace library functions and this 
structure if altered during the execution of nmi_cpu_backtrace() to 
clear the calling CPU.

I had originally planned to use cpumask_test_and_clear_cpu() for the 
conditional branch but that would be broken because nmi_cpu_backtrace() 
would become a nop if we clear anything from the mask before calling it!

I guess I should add a comment about this to save us from broken but 
"obviously correct" cleanups in the future...


Daniel.

WARNING: multiple messages have this Message-ID (diff)
From: Daniel Thompson <daniel.thompson@linaro.org>
To: Russell King - ARM Linux <linux@arm.linux.org.uk>
Cc: linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org, patches@linaro.org,
	linaro-kernel@lists.linaro.org,
	Thomas Gleixner <tglx@linutronix.de>,
	Hillf Danton <hillf.zj@alibaba-inc.com>
Subject: Re: [PATCH v2] arm: Fix backtrace generation when IPI is masked
Date: Tue, 15 Sep 2015 14:15:10 +0100	[thread overview]
Message-ID: <55F819DE.9040704@linaro.org> (raw)
In-Reply-To: <20150915113003.GS21084@n2100.arm.linux.org.uk>

On 15/09/15 12:30, Russell King - ARM Linux wrote:
> On Tue, Sep 15, 2015 at 12:05:12PM +0100, Daniel Thompson wrote:
>> Currently on ARM when <SysRq-L> is triggered from an interrupt handler
>> (e.g. a SysRq issued using UART or kbd) the main CPU will wedge for ten
>> seconds with interrupts masked before issuing a backtrace for every CPU
>> except itself.
>>
>> The new backtrace code introduced by commit 96f0e00378d4 ("ARM: add
>> basic support for on-demand backtrace of other CPUs") does not work
>> correctly when run from an interrupt handler because IPI_CPU_BACKTRACE
>> is used to generate the backtrace on all CPUs but cannot preempt the
>> current calling context.
>
> This patch needs a little more work - what happens to the IPI_CPU_BACKTRACE
> we've sent to ourselves?  (It fires after the interrupt handler for the
> UART/kbd has finished.)  It ought to be masked out if we're going to
> handle it a different way.

Actually it already gets masked out. The argument to raise_nmi() points 
to a data structure owned by the backtrace library functions and this 
structure if altered during the execution of nmi_cpu_backtrace() to 
clear the calling CPU.

I had originally planned to use cpumask_test_and_clear_cpu() for the 
conditional branch but that would be broken because nmi_cpu_backtrace() 
would become a nop if we clear anything from the mask before calling it!

I guess I should add a comment about this to save us from broken but 
"obviously correct" cleanups in the future...


Daniel.




  reply	other threads:[~2015-09-15 13:15 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-14  9:18 [PATCH] arm: Fix backtrace generation when IPI is masked Daniel Thompson
2015-09-14  9:18 ` Daniel Thompson
2015-09-15 11:05 ` [PATCH v2] " Daniel Thompson
2015-09-15 11:05   ` Daniel Thompson
2015-09-15 11:30   ` Russell King - ARM Linux
2015-09-15 11:30     ` Russell King - ARM Linux
2015-09-15 13:15     ` Daniel Thompson [this message]
2015-09-15 13:15       ` Daniel Thompson
2015-09-15 13:42       ` Russell King - ARM Linux
2015-09-15 13:42         ` Russell King - ARM Linux
2015-09-15 14:40 ` [PATCH v3] " Daniel Thompson
2015-09-15 14:40   ` Daniel Thompson
2015-09-16  2:43   ` Hillf Danton
2015-09-16  2:43     ` Hillf Danton
2015-09-22 10:59   ` Thomas Gleixner
2015-09-22 10:59     ` Thomas Gleixner
2015-10-03 15:40   ` Russell King - ARM Linux
2015-10-03 15:40     ` Russell King - ARM Linux

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=55F819DE.9040704@linaro.org \
    --to=daniel.thompson@linaro.org \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.