All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ingo Molnar <mingo@elte.hu>
To: Simon Kagstrom <simon.kagstrom@netinsight.net>
Cc: Artem Bityutskiy <dedekind1@gmail.com>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	LKML <linux-kernel@vger.kernel.org>,
	"Koskinen Aaro \(Nokia-D/Helsinki\)" <aaro.koskinen@nokia.com>,
	linux-mtd <linux-mtd@lists.infradead.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	David Woodhouse <dwmw2@infradead.org>,
	Alan Cox <alan@lxorguk.ukuu.org.uk>
Subject: Re: [PATCH] panic.c: export panic_on_oops
Date: Mon, 12 Oct 2009 16:30:17 +0200	[thread overview]
Message-ID: <20091012143017.GC4565@elte.hu> (raw)
In-Reply-To: <20091012153937.0dcd73e5@marrow.netinsight.se>


* Simon Kagstrom <simon.kagstrom@netinsight.net> wrote:

> OK, I don't think we understand each other. Sorry if I'm being slow 
> here, please tell me if I'm misunderstanding something fundamental 
> below.

[ it could easily be me being confused - i dont know the mtdoops code 
  that well - i just raised an eyebrow at the export request, which 
  yelled 'layering violation' at me ;-) ]

> On Mon, 12 Oct 2009 15:15:29 +0200
> Ingo Molnar <mingo@elte.hu> wrote:
> 
> > > I'm afraid I don't really see this issue. The workqueue is used to 
> > > write the buffer to the mtd device if we are not in a panic or 
> > > interrupt context - in which case we do it directly.
> > > 
> > > So it's only used when an oops is ongoing.
> > 
> > This fixation on 'panic' is so wrong!
> > 
> > 90% of the bugs users care about dont involve any panic. And even if 
> > there is a panic down the line, most of the interesting messages are in 
> > the stream leading up to the panic - now tucked away in that async 
> > workqueue mechanism and not visible.
> 
> Well, this is what my patch [1] aims to fix. What it does is to put 
> all messages in a circular buffer, and when an oops or panic occurs it 
> writes them out. The current version only collects messages _during_ 
> an oops. I'll rework it with using kfifo as per Alans suggestion 
> though.
> 
> Neither the current code nor the new patch has them stored in the work 
> queue during a panic though. If this happens, they will call 
> panic_write (if it's available) to write it out directly.
> 
> > There's two clean solutions i think:
> > 
> > 1) add some new "ok, there's trouble!" callback to struct console and 
> >    the console driver could via that mechanism send out the _last_ 2KB 
> >    (or more) of kernel log messages. Basically we can go back in time by 
> >    looking at the dmesg buffer. The low level console driver does not 
> >    need to 'follow' the high level console state - it only wants to 
> >    print in case of trouble anyway.
> >
> > 2) or add buffered (flash-friendly) writes for all printk output - panic
> >    and non-panic alike. This would be useful to debug suspend/resume
> >    bugs for example. This would also optimize the packets of netconsole
> >    output. (last i checked we sent a packet per line.)
> 
> Well, suspend/resume hangs is one of the cases which mtdoops won't 
> catch. [...]

( Sidenote: i see no reason why that wouldnt be possible if it's 
  implemented properly. )

> [...] But at least on NAND flash, I'd be a bit weary about logging all 
> printk output for fear of wearing out the flash.

Clearly should be optional - like the s2ram debug hack to RTC registers 
is optional on x86.

> > The workqueue looks wrong in both variants. If we are panic-ing (or 
> > hanging, or ...) then we are halting the machine - the workqueue has 
> > no chance to actually execute.
> 
> but then we are using mtd->panic_write to write it out directly, not 
> via the work queue.

... i might be confused, but in which case _is_ the workqueue used?

It clearly shows up in the codepaths i've read, but maybe i've 
misinterpreted what it does.

	Ingo

WARNING: multiple messages have this Message-ID (diff)
From: Ingo Molnar <mingo@elte.hu>
To: Simon Kagstrom <simon.kagstrom@netinsight.net>
Cc: Artem Bityutskiy <dedekind1@gmail.com>,
	David Woodhouse <dwmw2@infradead.org>,
	LKML <linux-kernel@vger.kernel.org>,
	"Koskinen Aaro (Nokia-D/Helsinki)" <aaro.koskinen@nokia.com>,
	linux-mtd <linux-mtd@lists.infradead.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Alan Cox <alan@lxorguk.ukuu.org.uk>
Subject: Re: [PATCH] panic.c: export panic_on_oops
Date: Mon, 12 Oct 2009 16:30:17 +0200	[thread overview]
Message-ID: <20091012143017.GC4565@elte.hu> (raw)
In-Reply-To: <20091012153937.0dcd73e5@marrow.netinsight.se>


* Simon Kagstrom <simon.kagstrom@netinsight.net> wrote:

> OK, I don't think we understand each other. Sorry if I'm being slow 
> here, please tell me if I'm misunderstanding something fundamental 
> below.

[ it could easily be me being confused - i dont know the mtdoops code 
  that well - i just raised an eyebrow at the export request, which 
  yelled 'layering violation' at me ;-) ]

> On Mon, 12 Oct 2009 15:15:29 +0200
> Ingo Molnar <mingo@elte.hu> wrote:
> 
> > > I'm afraid I don't really see this issue. The workqueue is used to 
> > > write the buffer to the mtd device if we are not in a panic or 
> > > interrupt context - in which case we do it directly.
> > > 
> > > So it's only used when an oops is ongoing.
> > 
> > This fixation on 'panic' is so wrong!
> > 
> > 90% of the bugs users care about dont involve any panic. And even if 
> > there is a panic down the line, most of the interesting messages are in 
> > the stream leading up to the panic - now tucked away in that async 
> > workqueue mechanism and not visible.
> 
> Well, this is what my patch [1] aims to fix. What it does is to put 
> all messages in a circular buffer, and when an oops or panic occurs it 
> writes them out. The current version only collects messages _during_ 
> an oops. I'll rework it with using kfifo as per Alans suggestion 
> though.
> 
> Neither the current code nor the new patch has them stored in the work 
> queue during a panic though. If this happens, they will call 
> panic_write (if it's available) to write it out directly.
> 
> > There's two clean solutions i think:
> > 
> > 1) add some new "ok, there's trouble!" callback to struct console and 
> >    the console driver could via that mechanism send out the _last_ 2KB 
> >    (or more) of kernel log messages. Basically we can go back in time by 
> >    looking at the dmesg buffer. The low level console driver does not 
> >    need to 'follow' the high level console state - it only wants to 
> >    print in case of trouble anyway.
> >
> > 2) or add buffered (flash-friendly) writes for all printk output - panic
> >    and non-panic alike. This would be useful to debug suspend/resume
> >    bugs for example. This would also optimize the packets of netconsole
> >    output. (last i checked we sent a packet per line.)
> 
> Well, suspend/resume hangs is one of the cases which mtdoops won't 
> catch. [...]

( Sidenote: i see no reason why that wouldnt be possible if it's 
  implemented properly. )

> [...] But at least on NAND flash, I'd be a bit weary about logging all 
> printk output for fear of wearing out the flash.

Clearly should be optional - like the s2ram debug hack to RTC registers 
is optional on x86.

> > The workqueue looks wrong in both variants. If we are panic-ing (or 
> > hanging, or ...) then we are halting the machine - the workqueue has 
> > no chance to actually execute.
> 
> but then we are using mtd->panic_write to write it out directly, not 
> via the work queue.

... i might be confused, but in which case _is_ the workqueue used?

It clearly shows up in the codepaths i've read, but maybe i've 
misinterpreted what it does.

	Ingo

  reply	other threads:[~2009-10-12 14:30 UTC|newest]

Thread overview: 141+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-10-11  6:10 [PATCH] panic.c: export panic_on_oops Artem Bityutskiy
2009-10-11  6:10 ` Artem Bityutskiy
2009-10-12 11:15 ` Ingo Molnar
2009-10-12 11:15   ` Ingo Molnar
2009-10-12 11:23   ` Simon Kagstrom
2009-10-12 11:23     ` Simon Kagstrom
2009-10-12 11:25   ` Artem Bityutskiy
2009-10-12 11:25     ` Artem Bityutskiy
2009-10-12 11:37     ` Ingo Molnar
2009-10-12 11:37       ` Ingo Molnar
2009-10-12 12:01       ` Simon Kagstrom
2009-10-12 12:01         ` Simon Kagstrom
2009-10-12 12:09         ` Ingo Molnar
2009-10-12 12:09           ` Ingo Molnar
2009-10-12 12:15           ` David Woodhouse
2009-10-12 12:15             ` David Woodhouse
2009-10-12 12:20             ` Ingo Molnar
2009-10-12 12:20               ` Ingo Molnar
2009-10-12 12:33               ` David Woodhouse
2009-10-12 12:33                 ` David Woodhouse
2009-10-12 12:36                 ` Ingo Molnar
2009-10-12 12:36                   ` Ingo Molnar
2009-10-12 12:48                   ` David Woodhouse
2009-10-12 12:48                     ` David Woodhouse
2009-10-12 13:06               ` Simon Kagstrom
2009-10-12 13:06                 ` Simon Kagstrom
2009-10-12 13:15                 ` Ingo Molnar
2009-10-12 13:15                   ` Ingo Molnar
2009-10-12 13:39                   ` Simon Kagstrom
2009-10-12 13:39                     ` Simon Kagstrom
2009-10-12 14:30                     ` Ingo Molnar [this message]
2009-10-12 14:30                       ` Ingo Molnar
2009-10-12 15:01                       ` Simon Kagstrom
2009-10-12 15:01                         ` Simon Kagstrom
2009-10-12 15:23                         ` Ingo Molnar
2009-10-12 15:23                           ` Ingo Molnar
2009-10-12 15:36                     ` Linus Torvalds
2009-10-12 15:36                       ` Linus Torvalds
2009-10-12 15:44                       ` Linus Torvalds
2009-10-12 15:44                         ` Linus Torvalds
2009-10-12 17:29                         ` Artem Bityutskiy
2009-10-12 17:29                           ` Artem Bityutskiy
2009-10-12 17:43                           ` Linus Torvalds
2009-10-12 17:43                             ` Linus Torvalds
2009-10-12 17:46                             ` Linus Torvalds
2009-10-12 17:46                               ` Linus Torvalds
2009-10-12 18:09                       ` Andrew Morton
2009-10-12 18:09                         ` Andrew Morton
2009-10-12 18:23                         ` Ingo Molnar
2009-10-12 18:23                           ` Ingo Molnar
2009-10-12 18:36                           ` Andrew Morton
2009-10-12 18:36                             ` Andrew Morton
2009-10-12 18:45                           ` Linus Torvalds
2009-10-12 18:45                             ` Linus Torvalds
2009-10-12 19:14                             ` Ingo Molnar
2009-10-12 19:14                               ` Ingo Molnar
2009-10-12 19:18                             ` Dirk Hohndel
2009-10-12 19:18                               ` Dirk Hohndel
2009-10-13  7:58                             ` Simon Kagstrom
2009-10-13  7:58                               ` Simon Kagstrom
2009-10-13  8:57                               ` Artem Bityutskiy
2009-10-13  8:57                                 ` Artem Bityutskiy
2009-10-13 13:17                             ` [PATCH/RFC v5 0/5]: mtdoops: fixes and improvements Simon Kagstrom
2009-10-13 13:17                               ` Simon Kagstrom
2009-10-13 13:21                               ` [PATCH/RFC v5 1/5]: mtdoops: avoid erasing already empty areas Simon Kagstrom
2009-10-13 13:21                                 ` Simon Kagstrom
2009-10-13 13:22                               ` [PATCH/RFC v5 2/5]: mtdoops: Keep track of used/unused mtdoops pages in an array Simon Kagstrom
2009-10-13 13:22                                 ` Simon Kagstrom
2009-10-13 13:22                               ` [PATCH/RFC v5 3/5]: mtdoops: Make page (record) size configurable Simon Kagstrom
2009-10-13 13:22                                 ` Simon Kagstrom
2009-10-13 13:22                               ` [PATCH/RFC v5 4/5]: core: Add dump device to call on oopses and panics Simon Kagstrom
2009-10-13 13:22                                 ` Simon Kagstrom
2009-10-13 15:37                                 ` Linus Torvalds
2009-10-13 15:37                                   ` Linus Torvalds
2009-11-26  9:36                                 ` Jörn Engel
2009-11-26  9:36                                   ` Jörn Engel
2009-11-30  7:27                                   ` Artem Bityutskiy
2009-11-30  7:27                                     ` Artem Bityutskiy
2009-11-30  7:46                                     ` Jörn Engel
2009-11-30  7:46                                       ` Jörn Engel
2009-11-30  8:51                                       ` Artem Bityutskiy
2009-11-30  8:51                                         ` Artem Bityutskiy
2009-11-30  9:35                                         ` Jörn Engel
2009-11-30  9:35                                           ` Jörn Engel
2009-11-30  9:40                                           ` Artem Bityutskiy
2009-11-30  9:40                                             ` Artem Bityutskiy
2009-11-30  9:53                                             ` Simon Kagstrom
2009-11-30  9:53                                               ` Simon Kagstrom
     [not found]                                               ` <1259580207.19465.379.camel@macbook.infradead.org>
     [not found]                                                 ` <20091130123752.39727115@marrow.netinsight.se>
     [not found]                                                   ` <1259582202.19465.388.camel@macbook.infradead.org>
2009-11-30 12:03                                                     ` Simon Kagstrom
2009-11-30  9:54                                             ` Jörn Engel
2009-11-30  9:54                                               ` Jörn Engel
2009-11-30 10:23                                         ` David Woodhouse
2009-11-30 10:23                                           ` David Woodhouse
2009-11-30 10:27                                           ` David Woodhouse
2009-11-30 10:27                                             ` David Woodhouse
2009-11-30  9:09                                   ` Artem Bityutskiy
2009-11-30  9:09                                     ` Artem Bityutskiy
2009-11-30  9:28                                     ` Simon Kagstrom
2009-11-30  9:28                                       ` Simon Kagstrom
2009-10-13 13:22                               ` [PATCH/RFC v5 5/5]: mtdoops: refactor as a dump_device Simon Kagstrom
2009-10-13 13:22                                 ` Simon Kagstrom
2009-10-14 13:34                             ` [PATCH v6 0/5]: mtdoops: fixes and improvements Simon Kagstrom
2009-10-14 13:34                               ` Simon Kagstrom
2009-10-14 13:40                               ` [PATCH v6 1/5]: mtdoops: avoid erasing already empty areas Simon Kagstrom
2009-10-14 13:40                                 ` Simon Kagstrom
2009-10-14 13:41                               ` [PATCH v6 2/5]: mtdoops: Keep track of used/unused mtdoops pages in an array Simon Kagstrom
2009-10-14 13:41                                 ` Simon Kagstrom
2009-10-14 13:41                               ` [PATCH v6 3/5]: mtdoops: Make page (record) size configurable Simon Kagstrom
2009-10-14 13:41                                 ` Simon Kagstrom
2009-10-14 13:41                               ` [PATCH v6 4/5]: core: Add kernel message dumper to call on oopses and panics Simon Kagstrom
2009-10-14 13:41                                 ` Simon Kagstrom
2009-10-14 16:49                                 ` Linus Torvalds
2009-10-14 16:49                                   ` Linus Torvalds
2009-10-14 13:41                               ` [PATCH v6 5/5]: mtdoops: refactor as a kmsg_dumper Simon Kagstrom
2009-10-14 13:41                                 ` Simon Kagstrom
2009-10-14 15:12                                 ` Simon Kagstrom
2009-10-14 15:12                                   ` Simon Kagstrom
2009-10-15  5:11                                   ` vimal singh
2009-10-15  5:11                                     ` vimal singh
2009-10-12 12:27           ` [PATCH] panic.c: export panic_on_oops Simon Kagstrom
2009-10-12 12:27             ` Simon Kagstrom
2009-10-12 12:32             ` Ingo Molnar
2009-10-12 12:32               ` Ingo Molnar
2009-10-12 13:08               ` Alan Cox
2009-10-12 13:08                 ` Alan Cox
2009-10-12 13:25                 ` Ingo Molnar
2009-10-12 13:25                   ` Ingo Molnar
2009-10-12 13:32                   ` David Woodhouse
2009-10-12 13:32                     ` David Woodhouse
2009-10-12 14:26                     ` Ingo Molnar
2009-10-12 14:26                       ` Ingo Molnar
2009-10-12 14:36                       ` David Woodhouse
2009-10-12 14:36                         ` David Woodhouse
2009-10-12 15:14                         ` Ingo Molnar
2009-10-12 15:14                           ` Ingo Molnar
2009-10-12 18:32                           ` Carl-Daniel Hailfinger
2009-10-12 18:32                             ` Carl-Daniel Hailfinger
2009-10-12 19:18                             ` Ingo Molnar
2009-10-12 19:18                               ` Ingo Molnar
2009-10-12 14:12       ` Arjan van de Ven
2009-10-12 14:12         ` Arjan van de Ven

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=20091012143017.GC4565@elte.hu \
    --to=mingo@elte.hu \
    --cc=aaro.koskinen@nokia.com \
    --cc=akpm@linux-foundation.org \
    --cc=alan@lxorguk.ukuu.org.uk \
    --cc=dedekind1@gmail.com \
    --cc=dwmw2@infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mtd@lists.infradead.org \
    --cc=simon.kagstrom@netinsight.net \
    --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 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.