Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1290011 > unrolled thread
| Started by | Russell King - ARM Linux <linux@arm.linux.org.uk> |
|---|---|
| First post | 2015-12-12 00:30 +0100 |
| Last post | 2015-12-14 11:30 +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.
Re: [PATCH v3 4/4] printk/nmi: Increase the size of NMI buffer and make it configurable Russell King - ARM Linux <linux@arm.linux.org.uk> - 2015-12-12 00:30 +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:40 +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-15 15:30 +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-17 23:40 +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-18 17:20 +0100
Re: [PATCH v3 4/4] printk/nmi: Increase the size of NMI buffer and make it configurable Daniel Thompson <daniel.thompson@linaro.org> - 2015-12-14 11:30 +0100
| From | Russell King - ARM Linux <linux@arm.linux.org.uk> |
|---|---|
| Date | 2015-12-12 00:30 +0100 |
| Subject | Re: [PATCH v3 4/4] printk/nmi: Increase the size of NMI buffer and make it configurable |
| Message-ID | <qEFiq-2CJ-11@gated-at.bofh.it> |
On Fri, Dec 11, 2015 at 02:57:25PM -0800, Andrew Morton wrote: > 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? I think this comes purely from this attempt to apply another round of cleanups to the nmi backtrace work I did. As I explained when I did that work, the vast majority of ARM platforms are unable to trigger anything like a NMI - the FIQ is something that's generally a property of the secure monitor, and is not accessible to Linux. However, there are platforms where it is accessible. The work to add the FIQ-based variant never happened (I've no idea what happened to that part, Daniel seems to have lost interest in working on it.) So, what we have is the IRQ-based variant merged in mainline, which would be the fallback for the "FIQ not available" cases, and I carry a local hack in my tree which provides the FIQ-based version - but if it were to trigger, it takes out all interrupts (hence why I've not merged my hack.) I think the reason that the FIQ-based variant has never really happened is that hooking into the interrupt controller code to clear down the FIQ creates such a horrid layering violation, and also a locking mess that I suspect it's just been given up with. However, I've found my "hack" useful - it's turned a number of totally undebuggable hangs (where one CPU silently hangs leaving the others running with no way to find out where the hung CPU is) into something that can be debugged. Now, when we end up triggering the IRQ-based variant, we could already be in a situation where IRQs are off for the local CPU, so the IRQ is never delivered. Others decided that it wasn't acceptable to wait 10sec for the local CPU to time out, and (iirc) we'd also loose the local CPUs backtrace in certain situations. I'm personally happy with the existing code, and I've been wondering why there's this effort to apply further cleanups - to me, the changelogs don't seem to make that much sense, unless we want to start using printk() extensively in NMI functions - using the generic nmi backtrace code surely gets us something that works across all architectures... I've been assuming that I've missed something, which is why I've not said anything on that point until now. -- FTTC broadband for 0.8mile line: currently at 9.6Mbps down 400kbps up according to speedtest.net. -- 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 | Andrew Morton <akpm@linux-foundation.org> |
|---|---|
| Date | 2015-12-12 00:40 +0100 |
| Message-ID | <qEFs5-2HI-9@gated-at.bofh.it> |
| In reply to | #1290011 |
On Fri, 11 Dec 2015 23:21:13 +0000 Russell King - ARM Linux <linux@arm.linux.org.uk> wrote: > On Fri, Dec 11, 2015 at 02:57:25PM -0800, Andrew Morton wrote: > > 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? > > I think this comes purely from this attempt to apply another round of > cleanups to the nmi backtrace work I did. > > As I explained when I did that work, the vast majority of ARM platforms > are unable to trigger anything like a NMI - the FIQ is something that's > generally a property of the secure monitor, and is not accessible to > Linux. However, there are platforms where it is accessible. OK, thanks. So "not needed at present, might be needed in the future, useful for out-of-tree debug code"? > I'm personally happy with the existing code, and I've been wondering why > there's this effort to apply further cleanups - to me, the changelogs > don't seem to make that much sense, unless we want to start using > printk() extensively in NMI functions - using the generic nmi backtrace > code surely gets us something that works across all architectures... Yes, I was scratching my head over that. The patchset takes an nmi-safe all-cpu-backtrace and generalises that into an nmi-safe printk. That *sounds* like a good thing to do but yes, some additional justification would be helpful. What real-world value does this patchset really bring to real-world users? -- 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-15 15:30 +0100 |
| Message-ID | <qFYM2-5hd-25@gated-at.bofh.it> |
| In reply to | #1290016 |
On Fri 2015-12-11 15:30:54, Andrew Morton wrote: > On Fri, 11 Dec 2015 23:21:13 +0000 Russell King - ARM Linux <linux@arm.linux.org.uk> wrote: > > > On Fri, Dec 11, 2015 at 02:57:25PM -0800, Andrew Morton wrote: > > > 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? > > > > I think this comes purely from this attempt to apply another round of > > cleanups to the nmi backtrace work I did. > > > > As I explained when I did that work, the vast majority of ARM platforms > > are unable to trigger anything like a NMI - the FIQ is something that's > > generally a property of the secure monitor, and is not accessible to > > Linux. However, there are platforms where it is accessible. > > OK, thanks. So "not needed at present, might be needed in the future, > useful for out-of-tree debug code"? It is possible that I got it a wrong way on arm. The NMI buffer is usable there on two locations. First, the temporary is currently used to handle IPI_CPU_BACKTRACE. It seems that it is not a real NMI. But it seems to be available (compiled) on all arm system. This is why I introduced NEED_PRINTK_NMI Kconfig flag to avoid confusion with a real NMI. Second, there is the FIQ "NMI" handler that is called from /arch/arm/kernel/entry-armv.S. It is compiled only if _not_ defined $(CONFIG_CPU_V7M). It calls nmi_enter() and nmi_stop(). It looks like a real NMI handler. This is why I defined HAVE_NMI if (!CPU_V7M). A solution would be to define HAVE_NMI on all Arm systems and get rid of NEED_PRINTK_NMI. If you think that it would cause less confusion... > > there's this effort to apply further cleanups - to me, the changelogs > > don't seem to make that much sense, unless we want to start using > > printk() extensively in NMI functions - using the generic nmi backtrace > > code surely gets us something that works across all architectures... > > Yes, I was scratching my head over that. The patchset takes an nmi-safe > all-cpu-backtrace and generalises that into an nmi-safe printk. That > *sounds* like a good thing to do but yes, some additional justification > would be helpful. What real-world value does this patchset really > bring to real-world users? The patchset brings two big advantages. First, it makes the NMI backtraces safe on all architectures for free. Second, it makes all NMI messages almost[*] safe on all architectures. Note that there already are several messages printed in NMI context. See the mail from Jiri Kosina. They are not easy to avoid. [*] The temporary buffer is limited. We still should keep the number of messages in NMI context at minimum. Best Regards, 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 | Andrew Morton <akpm@linux-foundation.org> |
|---|---|
| Date | 2015-12-17 23:40 +0100 |
| Message-ID | <qGPnk-5CQ-5@gated-at.bofh.it> |
| In reply to | #1292222 |
On Tue, 15 Dec 2015 15:26:21 +0100 Petr Mladek <pmladek@suse.com> wrote: > > OK, thanks. So "not needed at present, might be needed in the future, > > useful for out-of-tree debug code"? > > It is possible that I got it a wrong way on arm. The NMI buffer is > usable there on two locations. > > First, the temporary is currently used to handle IPI_CPU_BACKTRACE. > It seems that it is not a real NMI. But it seems to be available > (compiled) on all arm system. This is why I introduced NEED_PRINTK_NMI > Kconfig flag to avoid confusion with a real NMI. > > Second, there is the FIQ "NMI" handler that is called from > /arch/arm/kernel/entry-armv.S. It is compiled only if _not_ > defined $(CONFIG_CPU_V7M). It calls nmi_enter() and nmi_stop(). > It looks like a real NMI handler. This is why I defined HAVE_NMI > if (!CPU_V7M). > > A solution would be to define HAVE_NMI on all Arm systems and get rid > of NEED_PRINTK_NMI. If you think that it would cause less confusion... So does this mean that the patch will be updated? > > > > there's this effort to apply further cleanups - to me, the changelogs > > > don't seem to make that much sense, unless we want to start using > > > printk() extensively in NMI functions - using the generic nmi backtrace > > > code surely gets us something that works across all architectures... > > > > Yes, I was scratching my head over that. The patchset takes an nmi-safe > > all-cpu-backtrace and generalises that into an nmi-safe printk. That > > *sounds* like a good thing to do but yes, some additional justification > > would be helpful. What real-world value does this patchset really > > bring to real-world users? > > The patchset brings two big advantages. First, it makes the NMI > backtraces safe on all architectures for free. Second, it makes > all NMI messages almost[*] safe on all architectures. > > Note that there already are several messages printed in NMI context. > See the mail from Jiri Kosina. They are not easy to avoid. > > [*] The temporary buffer is limited. We still should keep > the number of messages in NMI context at minimum. This is important info - in fact a paragraph which starts with "The patchset brings two big advantages" is *the most* important info. I added the below text to the [1/n] changelog: : The patchset brings two big advantages. First, it makes the NMI : backtraces safe on all architectures for free. Second, it makes all NMI : messages almost safe on all architectures (the temporary buffer is : limited. We still should keep the number of messages in NMI context at : minimum). : : Note that there already are several messages printed in NMI context: : WARN_ON(in_nmi()), BUG_ON(in_nmi()), anything being printed out from MCE : handlers. These are not easy to avoid. -- 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-18 17:20 +0100 |
| Message-ID | <qH5V8-7UF-13@gated-at.bofh.it> |
| In reply to | #1294308 |
On Thu 2015-12-17 14:38:58, Andrew Morton wrote: > On Tue, 15 Dec 2015 15:26:21 +0100 Petr Mladek <pmladek@suse.com> wrote: > > > > OK, thanks. So "not needed at present, might be needed in the future, > > > useful for out-of-tree debug code"? > > > > It is possible that I got it a wrong way on arm. The NMI buffer is > > usable there on two locations. > > > > First, the temporary is currently used to handle IPI_CPU_BACKTRACE. > > It seems that it is not a real NMI. But it seems to be available > > (compiled) on all arm system. This is why I introduced NEED_PRINTK_NMI > > Kconfig flag to avoid confusion with a real NMI. > > > > Second, there is the FIQ "NMI" handler that is called from > > /arch/arm/kernel/entry-armv.S. It is compiled only if _not_ > > defined $(CONFIG_CPU_V7M). It calls nmi_enter() and nmi_stop(). > > It looks like a real NMI handler. This is why I defined HAVE_NMI > > if (!CPU_V7M). > > > > A solution would be to define HAVE_NMI on all Arm systems and get rid > > of NEED_PRINTK_NMI. If you think that it would cause less confusion... > > So does this mean that the patch will be updated? Please, find the follow up patch below. I guess that you will want to squash it into the [1/n] one. From 144d90ada2e34b8807efcc01922c48d7c09797e7 Mon Sep 17 00:00:00 2001 From: Petr Mladek <pmladek@suse.com> Date: Fri, 18 Dec 2015 16:04:35 +0100 Subject: [PATCH] printk/nmi: Remove the questionable CONFIG_NEED_PRINTK_NMI The flag NEED_PRINTK_NMI was added because of Arm. It used the NMI safe backtrace implementation on all Arm systems. But it did not have a real NMI handling on CPU_V7M. It seems that it causes more confusion than good. Let's use HAVE_NMI on all arm systems and get rid of the problematic flag. Signed-off-by: Petr Mladek <pmladek@suse.com> --- arch/Kconfig | 3 --- arch/arm/Kconfig | 3 +-- init/Kconfig | 2 +- 3 files changed, 2 insertions(+), 6 deletions(-) diff --git a/arch/Kconfig b/arch/Kconfig index 7ce5101c2472..d1a18b313624 100644 --- a/arch/Kconfig +++ b/arch/Kconfig @@ -190,9 +190,6 @@ config HAVE_KPROBES_ON_FTRACE config HAVE_NMI bool -config NEED_PRINTK_NMI - bool - config HAVE_NMI_WATCHDOG depends on HAVE_NMI bool diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 96d2c275f0f7..01dc56d8f31b 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -63,8 +63,7 @@ config ARM select HAVE_KRETPROBES if (HAVE_KPROBES) select HAVE_MEMBLOCK select HAVE_MOD_ARCH_SPECIFIC - select HAVE_NMI if (!CPU_V7M) - select NEED_PRINTK_NMI if (CPU_V7M) + select HAVE_NMI select HAVE_OPROFILE if (HAVE_PERF_EVENTS) select HAVE_OPTPROBES if !THUMB2_KERNEL select HAVE_PERF_EVENTS diff --git a/init/Kconfig b/init/Kconfig index 61cfd96a3c96..abf79f3b1a55 100644 --- a/init/Kconfig +++ b/init/Kconfig @@ -1481,7 +1481,7 @@ config PRINTK config PRINTK_NMI def_bool y depends on PRINTK - depends on HAVE_NMI || NEED_PRINTK_NMI + depends on HAVE_NMI config BUG bool "BUG() support" if EXPERT -- 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] | [prev] | [next] | [standalone]
| From | Daniel Thompson <daniel.thompson@linaro.org> |
|---|---|
| Date | 2015-12-14 11:30 +0100 |
| Message-ID | <qFyyf-4PE-27@gated-at.bofh.it> |
| In reply to | #1290011 |
On 11/12/15 23:21, Russell King - ARM Linux wrote: > As I explained when I did that work, the vast majority of ARM platforms > are unable to trigger anything like a NMI - the FIQ is something that's > generally a property of the secure monitor, and is not accessible to > Linux. However, there are platforms where it is accessible. > > The work to add the FIQ-based variant never happened (I've no idea what > happened to that part, Daniel seems to have lost interest in working on > it.) So, what we have is the IRQ-based variant merged in mainline, which > would be the fallback for the "FIQ not available" cases, and I carry a > local hack in my tree which provides the FIQ-based version - but if it > were to trigger, it takes out all interrupts (hence why I've not merged > my hack.) > > I think the reason that the FIQ-based variant has never really happened > is that hooking into the interrupt controller code to clear down the FIQ > creates such a horrid layering violation, and also a locking mess that > I suspect it's just been given up with. I haven't quite given up; I'm still looking into this stuff. However you're certainly right that connecting the FIQ handler to the GIC code in an elegant way is tough. I've been working in parallel on an arm64 implementation with the result that I'm now two lumps of code that are almost, but not quite, ready. Right now I hope to share latest arm code fairly late in the this devcycle (for review rather than merge) followed up with a new version very early in v4.6. Even now I think the code needs a long soak in -next just in case there are any lurking regressions on particular platforms. I don't expect anyone to base decisions on my aspirations above but would like to reassure Russell that I haven't given up on it. Daniel. -- 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