From: Ingo Molnar <mingo@elte.hu>
To: Tilman Schmidt <tilman@imap.cc>
Cc: LKML <linux-kernel@vger.kernel.org>, Andrew Morton <akpm@osdl.org>
Subject: [patch] lockdep: fix printk recursion logic
Date: Mon, 9 Oct 2006 10:26:34 +0200 [thread overview]
Message-ID: <20061009082634.GA18103@elte.hu> (raw)
In-Reply-To: <4526E0AC.9070105@imap.cc>
* Tilman Schmidt <tilman@imap.cc> wrote:
> Problem description:
> > While X is running, output from printk() appears in syslog (eg.
> > /var/log/messages) only after a key is pressed on the system keyboard,
> > even though it is visible with dmesg immediately.
> (from lkml message <450BF1CC.2070309@imap.cc> - see that message
> for further details)
>
> The problem did not exist in 2.6.17, so I think it qualifies as a
> regression.
>
> The following naive patch fixes the problem for me, without any
> apparent ill effects (ie. the menace of lockup never manifested
> itself):
>
> --- a/kernel/printk.c 2006-10-07 00:51:09.000000000 +0200
> +++ b/kernel/printk.c 2006-10-07 00:51:41.000000000 +0200
> @@ -826,8 +826,7 @@ void release_console_sem(void)
> * from within the scheduler code, then do not lock
> * up due to self-recursion:
> */
> - if (!lockdep_internal())
> - wake_up_interruptible(&log_wait);
> + wake_up_interruptible(&log_wait);
the reason is that i initially only had the chunk above to protect
against lockdep recursion within vprintk() - it grew the 'outer'
lockdep_off()/on() protection only later on. But that lockdep_off() made
the release_console_sem() within vprintk() always happen under the
lockdep_internal() condition, causing your bug.
so the right solution is your patch: to remove the inner protection
against recursion here - the outer one is enough.
Andrew, could we use the patch below - it also removes a now stale
comment. Also for -stable review i think.
Ingo
---------------->
Subject: lockdep: fix printk recursion logic
From: Ingo Molnar <mingo@elte.hu>
bug reported and fixed by Tilman Schmidt <tilman@imap.cc>: if
lockdep is enabled then log messages make it to /var/log/messages
belatedly. The reason is a missed wakeup of klogd.
initially there was only a lockdep_internal() protection against
lockdep recursion within vprintk() - it grew the 'outer'
lockdep_off()/on() protection only later on. But that lockdep_off() made
the release_console_sem() within vprintk() always happen under the
lockdep_internal() condition, causing the bug.
the right solution to remove the inner protection against
recursion here - the outer one is enough.
Signed-off-by: Ingo Molnar <mingo@elte.hu>
---
kernel/printk.c | 11 ++---------
1 file changed, 2 insertions(+), 9 deletions(-)
Index: linux/kernel/printk.c
===================================================================
--- linux.orig/kernel/printk.c
+++ linux/kernel/printk.c
@@ -801,15 +801,8 @@ void release_console_sem(void)
console_locked = 0;
up(&console_sem);
spin_unlock_irqrestore(&logbuf_lock, flags);
- if (wake_klogd && !oops_in_progress && waitqueue_active(&log_wait)) {
- /*
- * If we printk from within the lock dependency code,
- * from within the scheduler code, then do not lock
- * up due to self-recursion:
- */
- if (!lockdep_internal())
- wake_up_interruptible(&log_wait);
- }
+ if (wake_klogd && !oops_in_progress && waitqueue_active(&log_wait))
+ wake_up_interruptible(&log_wait);
}
EXPORT_SYMBOL(release_console_sem);
next prev parent reply other threads:[~2006-10-09 8:34 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <72sfz-wa-1@gated-at.bofh.it>
2006-10-06 23:03 ` v2.6.19-rc1 regression: printk missing klogd wakeup Tilman Schmidt
2006-10-09 8:26 ` Ingo Molnar [this message]
2006-10-06 23:28 ` v2.6.19-rc1 build warnings Tilman Schmidt
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=20061009082634.GA18103@elte.hu \
--to=mingo@elte.hu \
--cc=akpm@osdl.org \
--cc=linux-kernel@vger.kernel.org \
--cc=tilman@imap.cc \
/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.