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 3.19-rc2 v13 4/5] ARM: Add support for on-demand backtrace of other CPUs
Date: Mon, 05 Jan 2015 17:07:30 +0000	[thread overview]
Message-ID: <54AAC4D2.1030606@linaro.org> (raw)
In-Reply-To: <20150105101925.64e8ecec@gandalf.local.home>

On 05/01/15 15:19, Steven Rostedt wrote:
> On Mon,  5 Jan 2015 14:54:58 +0000
> Daniel Thompson <daniel.thompson@linaro.org> wrote:
> 
>> +
>> +/* For reliability, we're prepared to waste bits here. */
>> +static DECLARE_BITMAP(backtrace_mask, NR_CPUS) __read_mostly;
>> +static  cpumask_t printtrace_mask;
>> +
>> +#define NMI_BUF_SIZE		4096
>> +
>> +struct nmi_seq_buf {
>> +	unsigned char		buffer[NMI_BUF_SIZE];
>> +	struct seq_buf		seq;
>> +};
>> +
>> +/* Safe printing in NMI context */
>> +static DEFINE_PER_CPU(struct nmi_seq_buf, nmi_print_seq);
>> +
>> +/* "in progress" flag of arch_trigger_all_cpu_backtrace */
>> +static unsigned long backtrace_flag;
>> +
>> +/*
>> + * It is not safe to call printk() directly from NMI handlers.
>> + * It may be fine if the NMI detected a lock up and we have no choice
>> + * but to do so, but doing a NMI on all other CPUs to get a back trace
>> + * can be done with a sysrq-l. We don't want that to lock up, which
>> + * can happen if the NMI interrupts a printk in progress.
>> + *
>> + * Instead, we redirect the vprintk() to this nmi_vprintk() that writes
>> + * the content into a per cpu seq_buf buffer. Then when the NMIs are
>> + * all done, we can safely dump the contents of the seq_buf to a printk()
>> + * from a non NMI context.
>> + */
>> +static int nmi_vprintk(const char *fmt, va_list args)
>> +{
>> +	struct nmi_seq_buf *s = this_cpu_ptr(&nmi_print_seq);
>> +	unsigned int len = seq_buf_used(&s->seq);
>> +
>> +	seq_buf_vprintf(&s->seq, fmt, args);
>> +	return seq_buf_used(&s->seq) - len;
>> +}
>> +
> 
> This is the same code as in x86. I wonder if we should move the
> duplicate code into kernel/printk/ and have it compiled if the arch
> requests it (CONFIG_ARCH_WANT_NMI_PRINTK or something). That way we
> don't have 20 copies of the same nmi_vprintk() and later find that we
> need to change it, and have to change it in 20 different archs.

Sounds like a good idea. I'll take a look at this.


Daniel.

WARNING: multiple messages have this Message-ID (diff)
From: Daniel Thompson <daniel.thompson@linaro.org>
To: Steven Rostedt <rostedt@goodmis.org>
Cc: Thomas Gleixner <tglx@linutronix.de>,
	Jason Cooper <jason@lakedaemon.net>,
	Russell King <linux@arm.linux.org.uk>,
	linux-kernel@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org, patches@linaro.org,
	linaro-kernel@lists.linaro.org,
	John Stultz <john.stultz@linaro.org>,
	Sumit Semwal <sumit.semwal@linaro.org>,
	Dirk Behme <dirk.behme@de.bosch.com>,
	Daniel Drake <drake@endlessm.com>,
	Dmitry Pervushin <dpervushin@gmail.com>,
	Tim Sander <tim@krieglstein.org>,
	Stephen Boyd <sboyd@codeaurora.org>
Subject: Re: [PATCH 3.19-rc2 v13 4/5] ARM: Add support for on-demand backtrace of other CPUs
Date: Mon, 05 Jan 2015 17:07:30 +0000	[thread overview]
Message-ID: <54AAC4D2.1030606@linaro.org> (raw)
In-Reply-To: <20150105101925.64e8ecec@gandalf.local.home>

On 05/01/15 15:19, Steven Rostedt wrote:
> On Mon,  5 Jan 2015 14:54:58 +0000
> Daniel Thompson <daniel.thompson@linaro.org> wrote:
> 
>> +
>> +/* For reliability, we're prepared to waste bits here. */
>> +static DECLARE_BITMAP(backtrace_mask, NR_CPUS) __read_mostly;
>> +static  cpumask_t printtrace_mask;
>> +
>> +#define NMI_BUF_SIZE		4096
>> +
>> +struct nmi_seq_buf {
>> +	unsigned char		buffer[NMI_BUF_SIZE];
>> +	struct seq_buf		seq;
>> +};
>> +
>> +/* Safe printing in NMI context */
>> +static DEFINE_PER_CPU(struct nmi_seq_buf, nmi_print_seq);
>> +
>> +/* "in progress" flag of arch_trigger_all_cpu_backtrace */
>> +static unsigned long backtrace_flag;
>> +
>> +/*
>> + * It is not safe to call printk() directly from NMI handlers.
>> + * It may be fine if the NMI detected a lock up and we have no choice
>> + * but to do so, but doing a NMI on all other CPUs to get a back trace
>> + * can be done with a sysrq-l. We don't want that to lock up, which
>> + * can happen if the NMI interrupts a printk in progress.
>> + *
>> + * Instead, we redirect the vprintk() to this nmi_vprintk() that writes
>> + * the content into a per cpu seq_buf buffer. Then when the NMIs are
>> + * all done, we can safely dump the contents of the seq_buf to a printk()
>> + * from a non NMI context.
>> + */
>> +static int nmi_vprintk(const char *fmt, va_list args)
>> +{
>> +	struct nmi_seq_buf *s = this_cpu_ptr(&nmi_print_seq);
>> +	unsigned int len = seq_buf_used(&s->seq);
>> +
>> +	seq_buf_vprintf(&s->seq, fmt, args);
>> +	return seq_buf_used(&s->seq) - len;
>> +}
>> +
> 
> This is the same code as in x86. I wonder if we should move the
> duplicate code into kernel/printk/ and have it compiled if the arch
> requests it (CONFIG_ARCH_WANT_NMI_PRINTK or something). That way we
> don't have 20 copies of the same nmi_vprintk() and later find that we
> need to change it, and have to change it in 20 different archs.

Sounds like a good idea. I'll take a look at this.


Daniel.

  reply	other threads:[~2015-01-05 17:07 UTC|newest]

Thread overview: 206+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-11-05 10:27 [PATCH 3.18-rc3 v7 0/4] arm: Implement arch_trigger_all_cpu_backtrace Daniel Thompson
2014-11-05 10:27 ` Daniel Thompson
2014-11-05 10:27 ` [PATCH 3.18-rc3 v7 1/4] irqchip: gic: Make gic_raise_softirq() FIQ-safe Daniel Thompson
2014-11-05 10:27   ` Daniel Thompson
2014-11-05 10:27 ` [PATCH 3.18-rc3 v7 2/4] irqchip: gic: Introduce plumbing for IPI FIQ Daniel Thompson
2014-11-05 10:27   ` Daniel Thompson
2014-11-05 10:27 ` [PATCH 3.18-rc3 v7 3/4] ARM: add basic support for on-demand backtrace of other CPUs Daniel Thompson
2014-11-05 10:27   ` Daniel Thompson
2014-11-05 10:27 ` [PATCH 3.18-rc3 v7 4/4] arm: smp: Handle ipi_cpu_backtrace() using FIQ (if available) Daniel Thompson
2014-11-05 10:27   ` Daniel Thompson
2014-11-14 12:35 ` [PATCH 3.18-rc3 v8 0/4] arm: Implement arch_trigger_all_cpu_backtrace Daniel Thompson
2014-11-14 12:35   ` Daniel Thompson
2014-11-14 12:35   ` [PATCH 3.18-rc3 v8 1/4] irqchip: gic: Make gic_raise_softirq() FIQ-safe Daniel Thompson
2014-11-14 12:35     ` Daniel Thompson
2014-11-24 18:20     ` Thomas Gleixner
2014-11-24 18:20       ` Thomas Gleixner
2014-11-24 18:40       ` Daniel Thompson
2014-11-24 18:40         ` Daniel Thompson
2014-11-24 18:48       ` Thomas Gleixner
2014-11-24 18:48         ` Thomas Gleixner
2014-11-24 20:36         ` Daniel Thompson
2014-11-24 20:36           ` Daniel Thompson
2014-11-24 20:41           ` Thomas Gleixner
2014-11-24 20:41             ` Thomas Gleixner
2014-11-24 21:09             ` Daniel Thompson
2014-11-24 21:09               ` Daniel Thompson
2014-11-24 20:38         ` Thomas Gleixner
2014-11-24 20:38           ` Thomas Gleixner
2014-11-24 21:01           ` Daniel Thompson
2014-11-24 21:01             ` Daniel Thompson
2014-11-24 21:29             ` Thomas Gleixner
2014-11-24 21:29               ` Thomas Gleixner
2014-11-14 12:35   ` [PATCH 3.18-rc3 v8 2/4] irqchip: gic: Introduce plumbing for IPI FIQ Daniel Thompson
2014-11-14 12:35     ` Daniel Thompson
2014-11-14 12:35   ` [PATCH 3.18-rc3 v8 3/4] ARM: add basic support for on-demand backtrace of other CPUs Daniel Thompson
2014-11-14 12:35     ` Daniel Thompson
2014-11-14 12:35   ` [PATCH 3.18-rc3 v8 4/4] arm: smp: Handle ipi_cpu_backtrace() using FIQ (if available) Daniel Thompson
2014-11-14 12:35     ` Daniel Thompson
2014-11-24 17:09   ` [PATCH 3.18-rc3 v8 0/4] arm: Implement arch_trigger_all_cpu_backtrace Daniel Thompson
2014-11-24 17:09     ` Daniel Thompson
2014-11-25 17:26   ` [PATCH 3.18-rc3 v9 0/5] " Daniel Thompson
2014-11-25 17:26     ` Daniel Thompson
2014-11-25 17:26     ` [PATCH 3.18-rc3 v9 1/5] irqchip: gic: Finer grain locking for gic_raise_softirq Daniel Thompson
2014-11-25 17:26       ` Daniel Thompson
2014-11-25 17:40       ` Marc Zyngier
2014-11-25 17:40         ` Marc Zyngier
2014-11-25 20:17         ` Nicolas Pitre
2014-11-25 20:17           ` Nicolas Pitre
2014-11-25 21:10           ` Daniel Thompson
2014-11-25 21:10             ` Daniel Thompson
2014-11-26  1:27             ` Stephen Boyd
2014-11-26  1:27               ` Stephen Boyd
2014-11-26 11:05         ` Daniel Thompson
2014-11-26 11:05           ` Daniel Thompson
2014-11-25 17:26     ` [PATCH 3.18-rc3 v9 2/5] irqchip: gic: Make gic_raise_softirq() FIQ-safe Daniel Thompson
2014-11-25 17:26       ` Daniel Thompson
2014-11-25 17:26     ` [PATCH 3.18-rc3 v9 3/5] irqchip: gic: Introduce plumbing for IPI FIQ Daniel Thompson
2014-11-25 17:26       ` Daniel Thompson
2014-11-26 15:09       ` Tim Sander
2014-11-26 15:09         ` Tim Sander
2014-11-26 15:48         ` Daniel Thompson
2014-11-26 15:48           ` Daniel Thompson
2014-11-26 16:58           ` Tim Sander
2014-11-26 16:58             ` Tim Sander
2014-11-25 17:26     ` [PATCH 3.18-rc3 v9 4/5] ARM: add basic support for on-demand backtrace of other CPUs Daniel Thompson
2014-11-25 17:26       ` Daniel Thompson
2014-11-25 17:26     ` [PATCH 3.18-rc3 v9 5/5] arm: smp: Handle ipi_cpu_backtrace() using FIQ (if available) Daniel Thompson
2014-11-25 17:26       ` Daniel Thompson
2014-11-26 12:46       ` Tim Sander
2014-11-26 12:46         ` Tim Sander
2014-11-26 13:12         ` Russell King - ARM Linux
2014-11-26 13:12           ` Russell King - ARM Linux
2014-11-26 16:17           ` Daniel Thompson
2014-11-26 16:17             ` Daniel Thompson
2014-11-28  9:10             ` Tim Sander
2014-11-28  9:10               ` Tim Sander
2014-11-28 10:08               ` Russell King - ARM Linux
2014-11-28 10:08                 ` Russell King - ARM Linux
2014-12-01 10:32                 ` Tim Sander
2014-12-01 10:32                   ` Tim Sander
2014-12-01 10:38                   ` Russell King - ARM Linux
2014-12-01 10:38                     ` Russell King - ARM Linux
2014-12-01 13:54                     ` Tim Sander
2014-12-01 13:54                       ` Tim Sander
2014-12-01 14:13                       ` Daniel Thompson
2014-12-01 14:13                         ` Daniel Thompson
2014-12-03 13:41                         ` Tim Sander
2014-12-03 13:41                           ` Tim Sander
2014-12-03 14:53                           ` Daniel Thompson
2014-12-03 14:53                             ` Daniel Thompson
2014-12-01 15:02                       ` Russell King - ARM Linux
2014-12-01 15:02                         ` Russell King - ARM Linux
2014-12-05 16:00                         ` Tim Sander
2014-12-05 16:00                           ` Tim Sander
2014-11-26 16:23   ` [PATCH 3.18-rc4 v10 0/6] arm: Implement arch_trigger_all_cpu_backtrace Daniel Thompson
2014-11-26 16:23     ` Daniel Thompson
2014-11-26 16:23     ` [PATCH 3.18-rc4 v10 1/6] irqchip: gic: Finer grain locking for gic_raise_softirq Daniel Thompson
2014-11-26 16:23       ` Daniel Thompson
2014-11-26 16:23     ` [PATCH 3.18-rc4 v10 2/6] irqchip: gic: Optimize locking in gic_raise_softirq Daniel Thompson
2014-11-26 16:23       ` Daniel Thompson
2014-11-26 16:23     ` [PATCH 3.18-rc4 v10 3/6] irqchip: gic: Make gic_raise_softirq FIQ-safe Daniel Thompson
2014-11-26 16:23       ` Daniel Thompson
2014-11-26 16:23     ` [PATCH 3.18-rc4 v10 4/6] irqchip: gic: Introduce plumbing for IPI FIQ Daniel Thompson
2014-11-26 16:23       ` Daniel Thompson
2014-11-26 17:42       ` Jason Cooper
2014-11-26 17:42         ` Jason Cooper
2014-11-27 13:39         ` Daniel Thompson
2014-11-27 13:39           ` Daniel Thompson
2014-11-27 18:06           ` Jason Cooper
2014-11-27 18:06             ` Jason Cooper
2014-11-27 19:42             ` Daniel Thompson
2014-11-27 19:42               ` Daniel Thompson
2014-11-27 20:16               ` Daniel Thompson
2014-11-27 20:16                 ` Daniel Thompson
2014-11-26 16:23     ` [PATCH 3.18-rc4 v10 5/6] ARM: add basic support for on-demand backtrace of other CPUs Daniel Thompson
2014-11-26 16:23       ` Daniel Thompson
2014-11-26 16:23     ` [PATCH 3.18-rc4 v10 6/6] arm: smp: Handle ipi_cpu_backtrace() using FIQ (if available) Daniel Thompson
2014-11-26 16:23       ` Daniel Thompson
2014-11-27 20:10   ` [PATCH 3.18-rc4 v11 0/6] arm: Implement arch_trigger_all_cpu_backtrace Daniel Thompson
2014-11-27 20:10     ` Daniel Thompson
2014-11-27 20:10     ` [PATCH 3.18-rc4 v11 1/6] irqchip: gic: Finer grain locking for gic_raise_softirq Daniel Thompson
2014-11-27 20:10       ` Daniel Thompson
2014-11-27 20:10     ` [PATCH 3.18-rc4 v11 2/6] irqchip: gic: Optimize locking in gic_raise_softirq Daniel Thompson
2014-11-27 20:10       ` Daniel Thompson
2014-11-27 21:37       ` Thomas Gleixner
2014-11-27 21:37         ` Thomas Gleixner
2014-11-28 10:14         ` Daniel Thompson
2014-11-28 10:14           ` Daniel Thompson
2014-11-27 20:10     ` [PATCH 3.18-rc4 v11 3/6] irqchip: gic: Make gic_raise_softirq FIQ-safe Daniel Thompson
2014-11-27 20:10       ` Daniel Thompson
2014-11-27 21:45       ` Thomas Gleixner
2014-11-27 21:45         ` Thomas Gleixner
2014-11-28  9:21         ` Daniel Thompson
2014-11-28  9:21           ` Daniel Thompson
2014-11-27 20:10     ` [PATCH 3.18-rc4 v11 4/6] irqchip: gic: Introduce plumbing for IPI FIQ Daniel Thompson
2014-11-27 20:10       ` Daniel Thompson
2014-11-27 20:10     ` [PATCH 3.18-rc4 v11 5/6] ARM: add basic support for on-demand backtrace of other CPUs Daniel Thompson
2014-11-27 20:10       ` Daniel Thompson
2014-11-27 20:10     ` [PATCH 3.18-rc4 v11 6/6] arm: smp: Handle ipi_cpu_backtrace() using FIQ (if available) Daniel Thompson
2014-11-27 20:10       ` Daniel Thompson
2014-11-28 16:16   ` [PATCH 3.18-rc4 v12 0/5] arm: Implement arch_trigger_all_cpu_backtrace Daniel Thompson
2014-11-28 16:16     ` Daniel Thompson
2014-11-28 16:16     ` [PATCH 3.18-rc4 v12 1/5] irqchip: gic: Optimize locking in gic_raise_softirq Daniel Thompson
2014-11-28 16:16       ` Daniel Thompson
2014-11-28 16:16     ` [PATCH 3.18-rc4 v12 2/5] irqchip: gic: Make gic_raise_softirq FIQ-safe Daniel Thompson
2014-11-28 16:16       ` Daniel Thompson
2014-11-28 16:16     ` [PATCH 3.18-rc4 v12 3/5] irqchip: gic: Introduce plumbing for IPI FIQ Daniel Thompson
2014-11-28 16:16       ` Daniel Thompson
2014-11-28 16:16     ` [PATCH 3.18-rc4 v12 4/5] ARM: add basic support for on-demand backtrace of other CPUs Daniel Thompson
2014-11-28 16:16       ` Daniel Thompson
2014-11-28 16:16     ` [PATCH 3.18-rc4 v12 5/5] arm: smp: Handle ipi_cpu_backtrace() using FIQ (if available) Daniel Thompson
2014-11-28 16:16       ` Daniel Thompson
2014-12-08 16:00     ` [PATCH 3.18-rc4 v12 0/5] arm: Implement arch_trigger_all_cpu_backtrace Daniel Thompson
2014-12-08 16:00       ` Daniel Thompson
2015-01-05 14:54   ` [PATCH 3.19-rc2 v13 " Daniel Thompson
2015-01-05 14:54     ` Daniel Thompson
2015-01-05 14:54     ` [PATCH 3.19-rc2 v13 1/5] irqchip: gic: Optimize locking in gic_raise_softirq Daniel Thompson
2015-01-05 14:54       ` Daniel Thompson
2015-01-05 14:54     ` [PATCH 3.19-rc2 v13 2/5] irqchip: gic: Make gic_raise_softirq FIQ-safe Daniel Thompson
2015-01-05 14:54       ` Daniel Thompson
2015-01-05 14:54     ` [PATCH 3.19-rc2 v13 3/5] irqchip: gic: Introduce plumbing for IPI FIQ Daniel Thompson
2015-01-05 14:54       ` Daniel Thompson
2015-01-05 14:54     ` [PATCH 3.19-rc2 v13 4/5] ARM: Add support for on-demand backtrace of other CPUs Daniel Thompson
2015-01-05 14:54       ` Daniel Thompson
2015-01-05 15:19       ` Steven Rostedt
2015-01-05 15:19         ` Steven Rostedt
2015-01-05 17:07         ` Daniel Thompson [this message]
2015-01-05 17:07           ` Daniel Thompson
2015-01-09 16:48         ` Russell King - ARM Linux
2015-01-09 16:48           ` Russell King - ARM Linux
2015-01-11 23:37           ` Steven Rostedt
2015-01-11 23:37             ` Steven Rostedt
2015-01-13 10:36             ` Daniel Thompson
2015-01-13 10:36               ` Daniel Thompson
2015-01-13 12:27               ` Steven Rostedt
2015-01-13 12:27                 ` Steven Rostedt
2015-01-05 14:54     ` [PATCH 3.19-rc2 v13 5/5] ARM: Fix on-demand backtrace triggered by IRQ Daniel Thompson
2015-01-05 14:54       ` Daniel Thompson
2015-01-13 10:26   ` [PATCH 3.19-rc2 v14 0/7] arm: Implement arch_trigger_all_cpu_backtrace Daniel Thompson
2015-01-13 10:26     ` Daniel Thompson
2015-01-13 10:26     ` [PATCH 3.19-rc2 v14 1/7] irqchip: gic: Optimize locking in gic_raise_softirq Daniel Thompson
2015-01-13 10:26       ` Daniel Thompson
2015-01-13 10:26     ` [PATCH 3.19-rc2 v14 2/7] irqchip: gic: Make gic_raise_softirq FIQ-safe Daniel Thompson
2015-01-13 10:26       ` Daniel Thompson
2015-01-13 10:26     ` [PATCH 3.19-rc2 v14 3/7] irqchip: gic: Introduce plumbing for IPI FIQ Daniel Thompson
2015-01-13 10:26       ` Daniel Thompson
2015-01-13 10:26     ` [PATCH 3.19-rc2 v14 4/7] printk: Simple implementation for NMI backtracing Daniel Thompson
2015-01-13 10:26       ` Daniel Thompson
2015-01-13 10:26     ` [PATCH 3.19-rc2 v14 5/7] x86/nmi: Use common printk functions Daniel Thompson
2015-01-13 10:26       ` Daniel Thompson
2015-01-13 10:26     ` [PATCH 3.19-rc2 v14 6/7] ARM: Add support for on-demand backtrace of other CPUs Daniel Thompson
2015-01-13 10:26       ` Daniel Thompson
2015-01-13 10:26     ` [PATCH 3.19-rc2 v14 7/7] ARM: Fix on-demand backtrace triggered by IRQ Daniel Thompson
2015-01-13 10:26       ` Daniel Thompson
2015-01-20 10:25     ` [PATCH 3.19-rc2 v14 0/7] arm: Implement arch_trigger_all_cpu_backtrace Daniel Thompson
2015-01-20 10:25       ` Daniel Thompson
2015-01-20 20:53       ` Stephen Boyd
2015-01-20 20:53         ` Stephen Boyd
2015-01-21 10:47         ` Daniel Thompson
2015-01-21 10:47           ` Daniel Thompson
2015-01-21 13:06           ` Steven Rostedt
2015-01-21 13:06             ` Steven Rostedt
2015-01-21 13:48             ` Daniel Thompson
2015-01-21 13:48               ` Daniel Thompson
2015-01-22 11:21               ` Daniel Thompson
2015-01-22 11:21                 ` Daniel Thompson

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=54AAC4D2.1030606@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.