All of lore.kernel.org
 help / color / mirror / Atom feed
From: Nicholas Piggin <npiggin@gmail.com>
To: Michael Ellerman <mpe@ellerman.id.au>
Cc: linuxppc-dev@ozlabs.org
Subject: Re: [RFC PATCH 1/4] powerpc/64: Save stack pointer when we hard disable interrupts
Date: Sat, 5 May 2018 16:26:40 +1000	[thread overview]
Message-ID: <20180505162640.06919112@roar.ozlabs.ibm.com> (raw)
In-Reply-To: <20180502130729.24077-1-mpe@ellerman.id.au>

On Wed,  2 May 2018 23:07:26 +1000
Michael Ellerman <mpe@ellerman.id.au> wrote:

> A CPU that gets stuck with interrupts hard disable can be difficult to
> debug, as on some platforms we have no way to interrupt the CPU to
> find out what it's doing.
> 
> A stop-gap is to have the CPU save it's stack pointer (r1) in its paca
> when it hard disables interrupts. That way if we can't interrupt it,
> we can at least trace the stack based on where it last disabled
> interrupts.
> 
> In some cases that will be total junk, but the stack trace code should
> handle that. In the simple case of a CPU that disable interrupts and
> then gets stuck in a loop, the stack trace should be informative.
> 
> We could clear the saved stack pointer when we enable interrupts, but
> that loses information which could be useful if we have nothing else
> to go on.
> 
> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
> ---
>  arch/powerpc/include/asm/hw_irq.h    | 6 +++++-
>  arch/powerpc/include/asm/paca.h      | 2 +-
>  arch/powerpc/kernel/exceptions-64s.S | 1 +
>  arch/powerpc/xmon/xmon.c             | 2 ++
>  4 files changed, 9 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/powerpc/include/asm/hw_irq.h b/arch/powerpc/include/asm/hw_irq.h
> index 855e17d158b1..35cb37be61fe 100644
> --- a/arch/powerpc/include/asm/hw_irq.h
> +++ b/arch/powerpc/include/asm/hw_irq.h
> @@ -237,8 +237,12 @@ static inline bool arch_irqs_disabled(void)
>  	__hard_irq_disable();						\
>  	flags = irq_soft_mask_set_return(IRQS_ALL_DISABLED);		\
>  	local_paca->irq_happened |= PACA_IRQ_HARD_DIS;			\
> -	if (!arch_irqs_disabled_flags(flags))				\
> +	if (!arch_irqs_disabled_flags(flags)) {				\
> +		asm ("stdx %%r1, 0, %1 ;"				\
> +		     : "=m" (local_paca->saved_r1)			\
> +		     : "b" (&local_paca->saved_r1));			\
>  		trace_hardirqs_off();					\
> +	}	

This is pretty neat, it would be good to have something that's not so
destructive as the NMI IPI.

Thanks,
Nick

  parent reply	other threads:[~2018-05-05  6:26 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-05-02 13:07 [RFC PATCH 1/4] powerpc/64: Save stack pointer when we hard disable interrupts Michael Ellerman
2018-05-02 13:07 ` [RFC PATCH 2/4] powerpc/nmi: Add an API for sending "safe" NMIs Michael Ellerman
2018-05-02 13:07 ` [RFC PATCH 3/4] powerpc/64s: Wire up arch_trigger_cpumask_backtrace() Michael Ellerman
2018-06-13  7:32   ` Christophe LEROY
2018-05-02 13:07 ` [RFC PATCH 4/4] powerpc/stacktrace: Update copyright Michael Ellerman
2018-05-05  6:26 ` Nicholas Piggin [this message]
2018-06-04 14:10 ` [RFC, 1/4] powerpc/64: Save stack pointer when we hard disable interrupts Michael Ellerman

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=20180505162640.06919112@roar.ozlabs.ibm.com \
    --to=npiggin@gmail.com \
    --cc=linuxppc-dev@ozlabs.org \
    --cc=mpe@ellerman.id.au \
    /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.