Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1287485 > unrolled thread
| Started by | Petr Mladek <pmladek@suse.com> |
|---|---|
| First post | 2015-12-09 14:30 +0100 |
| Last post | 2015-12-12 00:00 +0100 |
| Articles | 6 — 4 participants |
Back to article view | Back to linux.kernel
This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by
below is the oldest one visible, not the original post.
[PATCH v3 4/4] printk/nmi: Increase the size of NMI buffer and make it configurable Petr Mladek <pmladek@suse.com> - 2015-12-09 14:30 +0100
Re: [PATCH v3 4/4] printk/nmi: Increase the size of NMI buffer and make it configurable Geert Uytterhoeven <geert@linux-m68k.org> - 2015-12-11 12:20 +0100
Re: [PATCH v3 4/4] printk/nmi: Increase the size of NMI buffer and make it configurable Arnd Bergmann <arnd@arndb.de> - 2015-12-11 13:50 +0100
Re: [PATCH v3 4/4] printk/nmi: Increase the size of NMI buffer and make it configurable Petr Mladek <pmladek@suse.com> - 2015-12-11 13:50 +0100
Re: [PATCH v3 4/4] printk/nmi: Increase the size of NMI buffer and make it configurable Geert Uytterhoeven <geert@linux-m68k.org> - 2015-12-11 14:00 +0100
Re: [PATCH v3 4/4] printk/nmi: Increase the size of NMI buffer and make it configurable Andrew Morton <akpm@linux-foundation.org> - 2015-12-12 00:00 +0100
| From | Petr Mladek <pmladek@suse.com> |
|---|---|
| Date | 2015-12-09 14:30 +0100 |
| Subject | [PATCH v3 4/4] printk/nmi: Increase the size of NMI buffer and make it configurable |
| Message-ID | <qDMYG-u3-11@gated-at.bofh.it> |
Testing has shown that the backtrace sometimes does not fit
into the 4kB temporary buffer that is used in NMI context.
The warnings are gone when I double the temporary buffer size.
This patch doubles the buffer size and makes it configurable.
Note that this problem existed even in the x86-specific
implementation that was added by the commit a9edc8809328
("x86/nmi: Perform a safe NMI stack trace on all CPUs").
Nobody noticed it because it did not print any warnings.
Signed-off-by: Petr Mladek <pmladek@suse.com>
---
init/Kconfig | 22 ++++++++++++++++++++++
kernel/printk/nmi.c | 3 ++-
2 files changed, 24 insertions(+), 1 deletion(-)
diff --git a/init/Kconfig b/init/Kconfig
index c1c0b6a2d712..efcff25a112d 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -866,6 +866,28 @@ config LOG_CPU_MAX_BUF_SHIFT
13 => 8 KB for each CPU
12 => 4 KB for each CPU
+config NMI_LOG_BUF_SHIFT
+ int "Temporary per-CPU NMI log buffer size (12 => 4KB, 13 => 8KB)"
+ range 10 21
+ default 13
+ depends on PRINTK && HAVE_NMI
+ help
+ Select the size of a per-CPU buffer where NMI messages are temporary
+ stored. They are copied to the main log buffer in a safe context
+ to avoid a deadlock. The value defines the size as a power of 2.
+
+ NMI messages are rare and limited. The largest one is when
+ a backtrace is printed. It usually fits into 4KB. Select
+ 8KB if you want to be on the safe side.
+
+ Examples:
+ 17 => 128 KB for each CPU
+ 16 => 64 KB for each CPU
+ 15 => 32 KB for each CPU
+ 14 => 16 KB for each CPU
+ 13 => 8 KB for each CPU
+ 12 => 4 KB for each CPU
+
#
# Architectures with an unreliable sched_clock() should select this:
#
diff --git a/kernel/printk/nmi.c b/kernel/printk/nmi.c
index 5465230b75ec..78c07d441b4e 100644
--- a/kernel/printk/nmi.c
+++ b/kernel/printk/nmi.c
@@ -41,7 +41,8 @@ DEFINE_PER_CPU(printk_func_t, printk_func) = vprintk_default;
static int printk_nmi_irq_ready;
atomic_t nmi_message_lost;
-#define NMI_LOG_BUF_LEN (4096 - sizeof(atomic_t) - sizeof(struct irq_work))
+#define NMI_LOG_BUF_LEN ((1 << CONFIG_NMI_LOG_BUF_SHIFT) - \
+ sizeof(atomic_t) - sizeof(struct irq_work))
struct nmi_seq_buf {
atomic_t len; /* length of written data */
--
1.8.5.6
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [next] | [standalone]
| From | Geert Uytterhoeven <geert@linux-m68k.org> |
|---|---|
| Date | 2015-12-11 12:20 +0100 |
| Subject | Re: [PATCH v3 4/4] printk/nmi: Increase the size of NMI buffer and make it configurable |
| Message-ID | <qEtTY-3va-19@gated-at.bofh.it> |
| In reply to | #1287485 |
On Wed, Dec 9, 2015 at 2:21 PM, Petr Mladek <pmladek@suse.com> wrote:
> --- a/init/Kconfig
> +++ b/init/Kconfig
> @@ -866,6 +866,28 @@ config LOG_CPU_MAX_BUF_SHIFT
> 13 => 8 KB for each CPU
> 12 => 4 KB for each CPU
>
> +config NMI_LOG_BUF_SHIFT
> + int "Temporary per-CPU NMI log buffer size (12 => 4KB, 13 => 8KB)"
> + range 10 21
> + default 13
> + depends on PRINTK && HAVE_NMI
Symbol NMI_LOG_BUF_SHIFT does not exist if its dependencies are not met.
> + help
> + Select the size of a per-CPU buffer where NMI messages are temporary
> + stored. They are copied to the main log buffer in a safe context
> + to avoid a deadlock. The value defines the size as a power of 2.
> +
> + NMI messages are rare and limited. The largest one is when
> + a backtrace is printed. It usually fits into 4KB. Select
> + 8KB if you want to be on the safe side.
> +
> + Examples:
> + 17 => 128 KB for each CPU
> + 16 => 64 KB for each CPU
> + 15 => 32 KB for each CPU
> + 14 => 16 KB for each CPU
> + 13 => 8 KB for each CPU
> + 12 => 4 KB for each CPU
> +
> #
> # Architectures with an unreliable sched_clock() should select this:
> #
> diff --git a/kernel/printk/nmi.c b/kernel/printk/nmi.c
> index 5465230b75ec..78c07d441b4e 100644
> --- a/kernel/printk/nmi.c
> +++ b/kernel/printk/nmi.c
> @@ -41,7 +41,8 @@ DEFINE_PER_CPU(printk_func_t, printk_func) = vprintk_default;
> static int printk_nmi_irq_ready;
> atomic_t nmi_message_lost;
>
> -#define NMI_LOG_BUF_LEN (4096 - sizeof(atomic_t) - sizeof(struct irq_work))
> +#define NMI_LOG_BUF_LEN ((1 << CONFIG_NMI_LOG_BUF_SHIFT) - \
> + sizeof(atomic_t) - sizeof(struct irq_work))
kernel/printk/nmi.c:50:24: error: 'CONFIG_NMI_LOG_BUF_SHIFT'
undeclared here (not in a function)
E.g. efm32_defconfig
http://kisskb.ellerman.id.au/kisskb/buildresult/12565754/
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | Arnd Bergmann <arnd@arndb.de> |
|---|---|
| Date | 2015-12-11 13:50 +0100 |
| Message-ID | <qEvj4-4o4-1@gated-at.bofh.it> |
| In reply to | #1289433 |
On Friday 11 December 2015 13:41:59 Petr Mladek wrote: > diff --git a/init/Kconfig b/init/Kconfig > index efcff25a112d..61cfd96a3c96 100644 > --- a/init/Kconfig > +++ b/init/Kconfig > @@ -870,7 +870,7 @@ config NMI_LOG_BUF_SHIFT > int "Temporary per-CPU NMI log buffer size (12 => 4KB, 13 => 8KB)" > range 10 21 > default 13 > - depends on PRINTK && HAVE_NMI > + depends on PRINTK_NMI > help > Select the size of a per-CPU buffer where NMI messages are temporary > stored. They are copied to the main log buffer in a safe context > > Acked-by: Arnd Bergmann <arnd@arndb.de> I found this on linux-next as well today and came to the same conclusion. Arnd -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | Petr Mladek <pmladek@suse.com> |
|---|---|
| Date | 2015-12-11 13:50 +0100 |
| Subject | Re: [PATCH v3 4/4] printk/nmi: Increase the size of NMI buffer and make it configurable |
| Message-ID | <qEvj4-4o4-3@gated-at.bofh.it> |
| In reply to | #1289433 |
On Fri 2015-12-11 12:10:02, Geert Uytterhoeven wrote: > On Wed, Dec 9, 2015 at 2:21 PM, Petr Mladek <pmladek@suse.com> wrote: > > --- a/init/Kconfig > > +++ b/init/Kconfig > > @@ -866,6 +866,28 @@ config LOG_CPU_MAX_BUF_SHIFT > > 13 => 8 KB for each CPU > > 12 => 4 KB for each CPU > > > > +config NMI_LOG_BUF_SHIFT > > + int "Temporary per-CPU NMI log buffer size (12 => 4KB, 13 => 8KB)" > > + range 10 21 > > + default 13 > > + depends on PRINTK && HAVE_NMI > > Symbol NMI_LOG_BUF_SHIFT does not exist if its dependencies are not met. Åh, the NMI buffer is enabled on arm via NEED_PRINTK_NMI. The buffer is compiled when CONFIG_PRINTK_NMI is defined. I am going to fix it the following way: diff --git a/init/Kconfig b/init/Kconfig index efcff25a112d..61cfd96a3c96 100644 --- a/init/Kconfig +++ b/init/Kconfig @@ -870,7 +870,7 @@ config NMI_LOG_BUF_SHIFT int "Temporary per-CPU NMI log buffer size (12 => 4KB, 13 => 8KB)" range 10 21 default 13 - depends on PRINTK && HAVE_NMI + depends on PRINTK_NMI help Select the size of a per-CPU buffer where NMI messages are temporary stored. They are copied to the main log buffer in a safe context Thanks a lot for report, Petr -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | Geert Uytterhoeven <geert@linux-m68k.org> |
|---|---|
| Date | 2015-12-11 14:00 +0100 |
| Subject | Re: [PATCH v3 4/4] printk/nmi: Increase the size of NMI buffer and make it configurable |
| Message-ID | <qEvsK-4sJ-21@gated-at.bofh.it> |
| In reply to | #1289529 |
On Fri, Dec 11, 2015 at 1:41 PM, Petr Mladek <pmladek@suse.com> wrote:
> On Fri 2015-12-11 12:10:02, Geert Uytterhoeven wrote:
>> On Wed, Dec 9, 2015 at 2:21 PM, Petr Mladek <pmladek@suse.com> wrote:
>> > --- a/init/Kconfig
>> > +++ b/init/Kconfig
>> > @@ -866,6 +866,28 @@ config LOG_CPU_MAX_BUF_SHIFT
>> > 13 => 8 KB for each CPU
>> > 12 => 4 KB for each CPU
>> >
>> > +config NMI_LOG_BUF_SHIFT
>> > + int "Temporary per-CPU NMI log buffer size (12 => 4KB, 13 => 8KB)"
>> > + range 10 21
>> > + default 13
>> > + depends on PRINTK && HAVE_NMI
>>
>> Symbol NMI_LOG_BUF_SHIFT does not exist if its dependencies are not met.
>
> Åh, the NMI buffer is enabled on arm via NEED_PRINTK_NMI.
>
> The buffer is compiled when CONFIG_PRINTK_NMI is defined. I am going
> to fix it the following way:
>
>
> diff --git a/init/Kconfig b/init/Kconfig
> index efcff25a112d..61cfd96a3c96 100644
> --- a/init/Kconfig
> +++ b/init/Kconfig
> @@ -870,7 +870,7 @@ config NMI_LOG_BUF_SHIFT
> int "Temporary per-CPU NMI log buffer size (12 => 4KB, 13 => 8KB)"
> range 10 21
> default 13
> - depends on PRINTK && HAVE_NMI
> + depends on PRINTK_NMI
> help
> Select the size of a per-CPU buffer where NMI messages are temporary
> stored. They are copied to the main log buffer in a safe context
Makes sense, as kernel/printk/nmi.c is compiled if PRINTK_NMI is set.
Acked-by: Geert Uytterhoeven <geert+renesas@glider.be>
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | Andrew Morton <akpm@linux-foundation.org> |
|---|---|
| Date | 2015-12-12 00:00 +0100 |
| Subject | Re: [PATCH v3 4/4] printk/nmi: Increase the size of NMI buffer and make it configurable |
| Message-ID | <qEEPp-2db-29@gated-at.bofh.it> |
| In reply to | #1289529 |
On Fri, 11 Dec 2015 13:41:59 +0100 Petr Mladek <pmladek@suse.com> wrote:
> On Fri 2015-12-11 12:10:02, Geert Uytterhoeven wrote:
> > On Wed, Dec 9, 2015 at 2:21 PM, Petr Mladek <pmladek@suse.com> wrote:
> > > --- a/init/Kconfig
> > > +++ b/init/Kconfig
> > > @@ -866,6 +866,28 @@ config LOG_CPU_MAX_BUF_SHIFT
> > > 13 => 8 KB for each CPU
> > > 12 => 4 KB for each CPU
> > >
> > > +config NMI_LOG_BUF_SHIFT
> > > + int "Temporary per-CPU NMI log buffer size (12 => 4KB, 13 => 8KB)"
> > > + range 10 21
> > > + default 13
> > > + depends on PRINTK && HAVE_NMI
> >
> > Symbol NMI_LOG_BUF_SHIFT does not exist if its dependencies are not met.
>
> __h, the NMI buffer is enabled on arm via NEED_PRINTK_NMI.
>
> The buffer is compiled when CONFIG_PRINTK_NMI is defined. I am going
> to fix it the following way:
>
>
> diff --git a/init/Kconfig b/init/Kconfig
> index efcff25a112d..61cfd96a3c96 100644
> --- a/init/Kconfig
> +++ b/init/Kconfig
> @@ -870,7 +870,7 @@ config NMI_LOG_BUF_SHIFT
> int "Temporary per-CPU NMI log buffer size (12 => 4KB, 13 => 8KB)"
> range 10 21
> default 13
> - depends on PRINTK && HAVE_NMI
> + depends on PRINTK_NMI
> help
> Select the size of a per-CPU buffer where NMI messages are temporary
> stored. They are copied to the main log buffer in a safe context
I'm wondering why we're building kernel/printk/nmi.o if HAVE_NMI is not
set.
obj-$(CONFIG_PRINTK_NMI) += nmi.o
and
config PRINTK_NMI
def_bool y
depends on PRINTK
depends on HAVE_NMI || NEED_PRINTK_NMI
This is a bit messy. NEED_PRINTK_NMI is an added-on hack for one
particular arm variant. From the changelog:
"One exception is arm where the deferred printing is used for
printing backtraces even without NMI. For this purpose, we define
NEED_PRINTK_NMI Kconfig flag. The alternative printk_func is
explicitly set when IPI_CPU_BACKTRACE is handled."
- why does arm needs deferred printing for backtraces?
- why is this specific to CONFIG_CPU_V7M?
- can this Kconfig logic be cleaned up a bit?
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web