public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
To: Steven Rostedt <rostedt@goodmis.org>
Cc: Daniel Walker <dwalker@mvista.com>,
	LKML <linux-kernel@vger.kernel.org>, Ingo Molnar <mingo@elte.hu>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	Peter Zijlstra <a.p.zijlstra@chello.nl>,
	Christoph Hellwig <hch@infradead.org>,
	Gregory Haskins <ghaskins@novell.com>,
	Arnaldo Carvalho de Melo <acme@ghostprotocols.net>,
	Thomas Gleixner <tglx@linutronix.de>,
	Tim Bird <tim.bird@am.sony.com>, Sam Ravnborg <sam@ravnborg.org>,
	"Frank Ch. Eigler" <fche@redhat.com>,
	Jan Kiszka <jan.kiszka@siemens.com>,
	John Stultz <johnstul@us.ibm.com>,
	Arjan van de Ven <arjan@infradead.org>,
	Steven Rostedt <srostedt@redhat.com>
Subject: Re: [PATCH 01/20 -v5] printk - dont wakeup klogd with interrupts disabled
Date: Wed, 23 Jan 2008 12:32:49 -0500	[thread overview]
Message-ID: <20080123173249.GA23503@Krystal> (raw)
In-Reply-To: <Pine.LNX.4.58.0801231213430.12932@gandalf.stny.rr.com>

* Steven Rostedt (rostedt@goodmis.org) wrote:
> 
> On Wed, 23 Jan 2008, Daniel Walker wrote:
> 
> >
> > On Wed, 2008-01-23 at 11:02 -0500, Steven Rostedt wrote:
> >
> > > +	if (!irqs_disabled() && wake_klogd)
> > >  		wake_up_klogd();
> >
> > This causes a regression .. When printk is called during an OOPS in
> > kernels without this change then the OOPS will get logged, since the
> > logging process (klogd) is woken to handle the messages.. If you apply
> > this change klogd doesn't wakeup, and hence doesn't log the oops.. So if
> > you remove the wakeup here you have to add it someplace else to maintain
> > the logging ..
> >
> > (I'm not theorizing here, I have defects logged against this specific
> > piece of code..)
> 
> It wont get woken up anyway. Did you look at wake_up_klogd?
> 
> void wake_up_klogd(void)
> {
> 	if (!oops_in_progress && waitqueue_active(&log_wait))
> 		wake_up_interruptible(&log_wait);
> }
> 
> 
> So if oops_in_progress is set, then it still wont get woken. Perhaps it
> got woken some other way? Or is oops_in_progress not set in these oops?
> 
> One other solution is to make the runqueue locks visible externally. Like:
> 
> in sched.c:
> 
> int runqueue_is_locked(void)
> {
> 	int cpu = get_cpu();
> 	struct rq *rq = cpu_rq(cpu);
> 	int ret;
> 
> 	ret = spin_is_locked(&rq->lock);
> 	put_cpu();
> 	return ret;
> }
> 
> And in printk we could do:
> 
> 	if (wake_klogd && !runqueue_is_locked())
> 		wake_up_klogd();
> 
> This probably is the cleanest solution since it simply prevents the
> deadlock from occurring.
> 


FYI :

kernel/panic.c

NORET_TYPE void panic(const char * fmt, ...)
{
....
bust_spinlocks(1);
...
bust_spinlocks(0);
...

In bust_spinlocks :


void __attribute__((weak)) bust_spinlocks(int yes)
{
        if (yes) {
                ++oops_in_progress;
        } else {
#ifdef CONFIG_VT
                unblank_screen();
#endif
                if (--oops_in_progress == 0)
                        wake_up_klogd();
        }
}

Where the final wake_up happens while oops_in_progress is 0, but
interrupts are still disabled.

So about my previous email, proposing testing oops_in_progress, it just
won't work.

Mathieu

> -- Steve
> 

-- 
Mathieu Desnoyers
Computer Engineering Ph.D. Student, Ecole Polytechnique de Montreal
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F  BA06 3F25 A8FE 3BAE 9A68

  reply	other threads:[~2008-01-23 17:35 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-01-23 16:02 [PATCH 00/20 -v5] mcount and latency tracing utility -v5 Steven Rostedt
2008-01-23 16:02 ` [PATCH 01/20 -v5] printk - dont wakeup klogd with interrupts disabled Steven Rostedt
2008-01-23 17:06   ` Daniel Walker
2008-01-23 17:25     ` Mathieu Desnoyers
2008-01-23 17:49       ` Tim Bird
2008-01-24 10:35       ` Pavel Machek
2008-01-23 17:27     ` Steven Rostedt
2008-01-23 17:32       ` Mathieu Desnoyers [this message]
2008-01-23 17:43       ` Daniel Walker
2008-01-23 18:18         ` Steven Rostedt
2008-01-23 18:28           ` Daniel Walker
2008-01-23 18:43             ` Steven Rostedt
2008-01-23 18:50               ` Daniel Walker
2008-01-23 19:59                 ` Daniel Walker
2008-01-24 22:42           ` [PATCH] defer printks in irqs Tim Bird
2008-01-24 22:48             ` Peter Zijlstra
2008-01-24 23:23               ` Tim Bird
2008-01-27  6:01                 ` Andrew Morton
2008-01-28 21:14                   ` Tim Bird
2008-01-24 10:36       ` [PATCH 01/20 -v5] printk - dont wakeup klogd with interrupts disabled Pavel Machek
2008-01-23 16:02 ` [PATCH 02/20 -v5] Add basic support for gcc profiler instrumentation Steven Rostedt
2008-01-23 16:02 ` [PATCH 03/20 -v5] Annotate core code that should not be traced Steven Rostedt
2008-01-23 16:02 ` [PATCH 04/20 -v5] x86_64: notrace annotations Steven Rostedt
2008-01-23 16:02 ` [PATCH 05/20 -v5] add notrace annotations to vsyscall Steven Rostedt
2008-01-23 16:02 ` [PATCH 06/20 -v5] add notrace annotations for NMI routines Steven Rostedt
2008-01-23 21:31   ` Mathieu Desnoyers
2008-01-23 21:58     ` Steven Rostedt
2008-01-26  5:25     ` Steven Rostedt
2008-01-28 11:51       ` Jan Kiszka
2008-01-28 12:15         ` Steven Rostedt
2008-01-23 16:02 ` [PATCH 07/20 -v5] handle accurate time keeping over long delays Steven Rostedt
2008-01-23 16:02 ` [PATCH 08/20 -v5] initialize the clock source to jiffies clock Steven Rostedt
2008-01-23 16:40   ` Tim Bird
2008-01-23 16:02 ` [PATCH 09/20 -v5] add get_monotonic_cycles Steven Rostedt
2008-01-23 16:02 ` [PATCH 10/20 -v5] add notrace annotations to timing events Steven Rostedt
2008-01-23 16:02 ` [PATCH 11/20 -v5] mcount based trace in the form of a header file library Steven Rostedt
2008-01-23 16:02 ` [PATCH 12/20 -v5] Add context switch marker to sched.c Steven Rostedt
2008-01-23 16:02 ` [PATCH 13/20 -v5] Make the task State char-string visible to all Steven Rostedt
2008-01-23 16:02 ` [PATCH 14/20 -v5] Add tracing of context switches Steven Rostedt
2008-01-23 16:02 ` [PATCH 15/20 -v5] Generic command line storage Steven Rostedt
2008-01-23 16:02 ` [PATCH 16/20 -v5] trace generic call to schedule switch Steven Rostedt
2008-01-23 16:02 ` [PATCH 17/20 -v5] Add marker in try_to_wake_up Steven Rostedt
2008-01-23 16:02 ` [PATCH 18/20 -v5] mcount tracer for wakeup latency timings Steven Rostedt
2008-01-23 16:02 ` [PATCH 19/20 -v5] Trace irq disabled critical timings Steven Rostedt
2008-01-23 16:53   ` Steven Rostedt
2008-01-23 17:11     ` Steven Rostedt
2008-01-23 17:27       ` Frank Ch. Eigler
2008-01-23 17:45         ` Steven Rostedt
2008-01-23 17:54           ` Mathieu Desnoyers
2008-01-23 17:58         ` Peter Zijlstra
2008-01-23 18:25           ` Frank Ch. Eigler
2008-01-23 18:48             ` Steven Rostedt
2008-01-23 21:29           ` Mathieu Desnoyers
2008-01-23 16:02 ` [PATCH 20/20 -v5] trace preempt off " Steven Rostedt

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=20080123173249.GA23503@Krystal \
    --to=mathieu.desnoyers@polymtl.ca \
    --cc=a.p.zijlstra@chello.nl \
    --cc=acme@ghostprotocols.net \
    --cc=akpm@linux-foundation.org \
    --cc=arjan@infradead.org \
    --cc=dwalker@mvista.com \
    --cc=fche@redhat.com \
    --cc=ghaskins@novell.com \
    --cc=hch@infradead.org \
    --cc=jan.kiszka@siemens.com \
    --cc=johnstul@us.ibm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=rostedt@goodmis.org \
    --cc=sam@ravnborg.org \
    --cc=srostedt@redhat.com \
    --cc=tglx@linutronix.de \
    --cc=tim.bird@am.sony.com \
    --cc=torvalds@linux-foundation.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox