Hi,
this is version 3 of the WARN_CONSOLE_UNLOCKED patch set. The macro prints a warning if the console's critical sections are entered without holding the console lock. This patch set allows to disable the warnings while debugging the console.
In the original approach, WARN_CONSOLE_UNLOCKED was disabled by setting ignore_console_lock_warning of type bool. As suggested by Petr Mladek, the new implementation is based on atomic_t and allows multiple threads to manipulate the warning state concurrently.
With version 3, the patch set now includes the patch for introducing ignore_console_lock_warning. This patch superseds all previous patches of the same purpose.
Best regards Thomas
v3: - implement ignore_console_lock_warning with atomic_t v2: - restore ignore_console_lock_warning if lock_fb_info() fails
Thomas Zimmermann (2): console: Replace #if 0 with atomic var 'ignore_console_lock_warning' fbdev/core: Disable console-lock warnings when fb.lockless_register_fb is set
drivers/video/fbdev/core/fbmem.c | 13 +++++++++---- include/linux/console.h | 14 +++++++++----- kernel/printk/printk.c | 3 +++ 3 files changed, 21 insertions(+), 9 deletions(-)
-- 2.18.0
The macro WARN_CONSOLE_UNLOCKED prints a warning when a thread enters the console's critical section without having acquired the console lock. The console lock can be ignored when debugging the console using printk, but this makes WARN_CONSOLE_UNLOCKED generate unnecessary warnings.
The variable ignore_console_lock_warning temporarily disables WARN_CONSOLE_UNLOCKED. Developers interested in debugging the console's critical sections should increment it before entering the CS and decrement it after leaving the CS. Setting ignore_console_lock_warning is only for debugging. Regular operation should not manipulate it.
Acknoledgements: This patch is based on an earlier version by Steven Rostedt. The use of atomic increment/decrement was suggested by Petr Mladek.
Link: http://lkml.kernel.org/r/717e6337-e7a6-7a92-1c1b-8929a25696b5@suse.de Signed-off-by: Thomas Zimmermann tzimmermann@suse.de --- include/linux/console.h | 14 +++++++++----- kernel/printk/printk.c | 3 +++ 2 files changed, 12 insertions(+), 5 deletions(-)
diff --git a/include/linux/console.h b/include/linux/console.h index f59f3dbca65c..a3307bcab947 100644 --- a/include/linux/console.h +++ b/include/linux/console.h @@ -14,6 +14,7 @@ #ifndef _LINUX_CONSOLE_H_ #define _LINUX_CONSOLE_H_ 1
+#include <asm/atomic.h> #include <linux/types.h>
struct vc_data; @@ -201,11 +202,14 @@ void vcs_make_sysfs(int index); void vcs_remove_sysfs(int index);
/* Some debug stub to catch some of the obvious races in the VT code */ -#if 1 -#define WARN_CONSOLE_UNLOCKED() WARN_ON(!is_console_locked() && !oops_in_progress) -#else -#define WARN_CONSOLE_UNLOCKED() -#endif +#define WARN_CONSOLE_UNLOCKED() \ + WARN_ON(!atomic_read(&ignore_console_lock_warning) && \ + !is_console_locked() && !oops_in_progress) +/* + * Increment ignore_console_lock_warning if you need to quiet + * WARN_CONSOLE_UNLOCKED() for debugging purposes. + */ +extern atomic_t ignore_console_lock_warning;
/* VESA Blanking Levels */ #define VESA_NO_BLANKING 0 diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c index 3f041e7cbfc9..7d32a86758cd 100644 --- a/kernel/printk/printk.c +++ b/kernel/printk/printk.c @@ -66,6 +66,9 @@ int console_printk[4] = { CONSOLE_LOGLEVEL_DEFAULT, /* default_console_loglevel */ };
+atomic_t ignore_console_lock_warning __read_mostly = ATOMIC_INIT(0); +EXPORT_SYMBOL(ignore_console_lock_warning); + /* * Low level drivers may need that to know if they can schedule in * their unblank() callback or not. So let's export it.
On Thu 2018-07-19 12:16:00, Thomas Zimmermann wrote:
The macro WARN_CONSOLE_UNLOCKED prints a warning when a thread enters the console's critical section without having acquired the console lock. The console lock can be ignored when debugging the console using printk, but this makes WARN_CONSOLE_UNLOCKED generate unnecessary warnings.
The variable ignore_console_lock_warning temporarily disables WARN_CONSOLE_UNLOCKED. Developers interested in debugging the console's critical sections should increment it before entering the CS and decrement it after leaving the CS. Setting ignore_console_lock_warning is only for debugging. Regular operation should not manipulate it.
Acknoledgements: This patch is based on an earlier version by Steven Rostedt. The use of atomic increment/decrement was suggested by Petr Mladek.
Link: http://lkml.kernel.org/r/717e6337-e7a6-7a92-1c1b-8929a25696b5@suse.de Signed-off-by: Thomas Zimmermann tzimmermann@suse.de
Acked-by: Petr Mladek pmladek@suse.com
I have vacation the following two weeks. I prefer this version over the previous one but I could live with both.
Best Regards, Petr
On Thursday, July 19, 2018 12:16:00 PM Thomas Zimmermann wrote:
The macro WARN_CONSOLE_UNLOCKED prints a warning when a thread enters the console's critical section without having acquired the console lock. The console lock can be ignored when debugging the console using printk, but this makes WARN_CONSOLE_UNLOCKED generate unnecessary warnings.
The variable ignore_console_lock_warning temporarily disables WARN_CONSOLE_UNLOCKED. Developers interested in debugging the console's critical sections should increment it before entering the CS and decrement it after leaving the CS. Setting ignore_console_lock_warning is only for debugging. Regular operation should not manipulate it.
Acknoledgements: This patch is based on an earlier version by Steven Rostedt. The use of atomic increment/decrement was suggested by Petr Mladek.
Link: http://lkml.kernel.org/r/717e6337-e7a6-7a92-1c1b-8929a25696b5@suse.de Signed-off-by: Thomas Zimmermann tzimmermann@suse.de
Patch queued for 4.19 (w/ <asm/atomic.h> -> <linux/atomic.h> fixup), thanks.
Best regards, -- Bartlomiej Zolnierkiewicz Samsung R&D Institute Poland Samsung Electronics
On Thu, 19 Jul 2018 12:16:00 +0200 Thomas Zimmermann tzimmermann@suse.de wrote:
The macro WARN_CONSOLE_UNLOCKED prints a warning when a thread enters the console's critical section without having acquired the console lock. The console lock can be ignored when debugging the console using printk, but this makes WARN_CONSOLE_UNLOCKED generate unnecessary warnings.
The variable ignore_console_lock_warning temporarily disables WARN_CONSOLE_UNLOCKED. Developers interested in debugging the console's critical sections should increment it before entering the CS and decrement it after leaving the CS. Setting ignore_console_lock_warning is only for debugging. Regular operation should not manipulate it.
Acknoledgements: This patch is based on an earlier version by Steven Rostedt. The use of atomic increment/decrement was suggested by Petr Mladek.
You can also add a reference to that patch as well:
Link: http://lkml.kernel.org/r/20180712092938.22e33641@gandalf.local.home
-- Steve
Link: http://lkml.kernel.org/r/717e6337-e7a6-7a92-1c1b-8929a25696b5@suse.de Signed-off-by: Thomas Zimmermann tzimmermann@suse.de
include/linux/console.h | 14 +++++++++----- kernel/printk/printk.c | 3 +++ 2 files changed, 12 insertions(+), 5 deletions(-)
diff --git a/include/linux/console.h b/include/linux/console.h index f59f3dbca65c..a3307bcab947 100644 --- a/include/linux/console.h +++ b/include/linux/console.h @@ -14,6 +14,7 @@ #ifndef _LINUX_CONSOLE_H_ #define _LINUX_CONSOLE_H_ 1
+#include <asm/atomic.h> #include <linux/types.h>
struct vc_data; @@ -201,11 +202,14 @@ void vcs_make_sysfs(int index); void vcs_remove_sysfs(int index);
/* Some debug stub to catch some of the obvious races in the VT code */ -#if 1 -#define WARN_CONSOLE_UNLOCKED() WARN_ON(!is_console_locked() && !oops_in_progress) -#else -#define WARN_CONSOLE_UNLOCKED() -#endif +#define WARN_CONSOLE_UNLOCKED() \
- WARN_ON(!atomic_read(&ignore_console_lock_warning) && \
!is_console_locked() && !oops_in_progress)
+/*
- Increment ignore_console_lock_warning if you need to quiet
- WARN_CONSOLE_UNLOCKED() for debugging purposes.
- */
+extern atomic_t ignore_console_lock_warning;
/* VESA Blanking Levels */ #define VESA_NO_BLANKING 0 diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c index 3f041e7cbfc9..7d32a86758cd 100644 --- a/kernel/printk/printk.c +++ b/kernel/printk/printk.c @@ -66,6 +66,9 @@ int console_printk[4] = { CONSOLE_LOGLEVEL_DEFAULT, /* default_console_loglevel */ };
+atomic_t ignore_console_lock_warning __read_mostly = ATOMIC_INIT(0); +EXPORT_SYMBOL(ignore_console_lock_warning);
/*
- Low level drivers may need that to know if they can schedule in
- their unblank() callback or not. So let's export it.
If the console is unlocked during registration, the console subsystem generates significant amounts of warnings, which obfuscate actual debugging messages. Setting ignore_console_lock_warning while debugging console registration avoid the noise.
v3: - manipulate ignore_console_lock_warning with atomic_{inc,dec} v2: - restore ignore_console_lock_warning if lock_fb_info() fails
Signed-off-by: Thomas Zimmermann tzimmermann@suse.de --- drivers/video/fbdev/core/fbmem.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/drivers/video/fbdev/core/fbmem.c b/drivers/video/fbdev/core/fbmem.c index 9e2f9d3c760e..cb72cd6c5892 100644 --- a/drivers/video/fbdev/core/fbmem.c +++ b/drivers/video/fbdev/core/fbmem.c @@ -1691,17 +1691,22 @@ static int do_register_framebuffer(struct fb_info *fb_info) event.info = fb_info; if (!lockless_register_fb) console_lock(); + else + atomic_inc(&ignore_console_lock_warning); if (!lock_fb_info(fb_info)) { - if (!lockless_register_fb) - console_unlock(); - return -ENODEV; + ret = -ENODEV; + goto unlock_console; } + ret = 0;
fb_notifier_call_chain(FB_EVENT_FB_REGISTERED, &event); unlock_fb_info(fb_info); +unlock_console: if (!lockless_register_fb) console_unlock(); - return 0; + else + atomic_dec(&ignore_console_lock_warning); + return ret; }
static int do_unregister_framebuffer(struct fb_info *fb_info)
On Thu 2018-07-19 12:16:01, Thomas Zimmermann wrote:
If the console is unlocked during registration, the console subsystem generates significant amounts of warnings, which obfuscate actual debugging messages. Setting ignore_console_lock_warning while debugging console registration avoid the noise.
v3:
- manipulate ignore_console_lock_warning with atomic_{inc,dec}
v2:
- restore ignore_console_lock_warning if lock_fb_info() fails
Signed-off-by: Thomas Zimmermann tzimmermann@suse.de
Reviewed-by: Petr Mladek pmladek@suse.com
I have vacation the following two weeks. Note that I am fine with v2 if anyone see the atomic as an overkill.
Best Regards, Petr
On Thursday, July 19, 2018 12:16:01 PM Thomas Zimmermann wrote:
If the console is unlocked during registration, the console subsystem generates significant amounts of warnings, which obfuscate actual debugging messages. Setting ignore_console_lock_warning while debugging console registration avoid the noise.
v3:
- manipulate ignore_console_lock_warning with atomic_{inc,dec}
v2:
- restore ignore_console_lock_warning if lock_fb_info() fails
Signed-off-by: Thomas Zimmermann tzimmermann@suse.de
Patch queued for 4.19, thanks.
Best regards, -- Bartlomiej Zolnierkiewicz Samsung R&D Institute Poland Samsung Electronics
Hi,
On 19-07-18 12:15, Thomas Zimmermann wrote:
Hi,
this is version 3 of the WARN_CONSOLE_UNLOCKED patch set. The macro prints a warning if the console's critical sections are entered without holding the console lock. This patch set allows to disable the warnings while debugging the console.
In the original approach, WARN_CONSOLE_UNLOCKED was disabled by setting ignore_console_lock_warning of type bool. As suggested by Petr Mladek, the new implementation is based on atomic_t and allows multiple threads to manipulate the warning state concurrently.
With version 3, the patch set now includes the patch for introducing ignore_console_lock_warning. This patch superseds all previous patches of the same purpose.
Best regards Thomas
v3:
- implement ignore_console_lock_warning with atomic_t
v2:
- restore ignore_console_lock_warning if lock_fb_info() fails
Thomas Zimmermann (2): console: Replace #if 0 with atomic var 'ignore_console_lock_warning' fbdev/core: Disable console-lock warnings when fb.lockless_register_fb is set
I just saw this version after my comment on v2 that the race there was not really a problem.
This version is even better though :) :
Acked-by: Hans de Goede hdegoede@redhat.com
Regards,
Hans
On (07/19/18 12:15), Thomas Zimmermann wrote:
this is version 3 of the WARN_CONSOLE_UNLOCKED patch set. The macro prints a warning if the console's critical sections are entered without holding the console lock. This patch set allows to disable the warnings while debugging the console.
In the original approach, WARN_CONSOLE_UNLOCKED was disabled by setting ignore_console_lock_warning of type bool. As suggested by Petr Mladek, the new implementation is based on atomic_t and allows multiple threads to manipulate the warning state concurrently.
With version 3, the patch set now includes the patch for introducing ignore_console_lock_warning. This patch superseds all previous patches of the same purpose.
Best regards Thomas
v3:
- implement ignore_console_lock_warning with atomic_t
v2:
- restore ignore_console_lock_warning if lock_fb_info() fails
Reviewed-by: Sergey Senozhatsky sergey.senozhatsky@gmail.com
-ss
dri-devel@lists.freedesktop.org