Re: [PATCH v3] printk: Have printk() never buffer its data

From: Kay Sievers
Date: Thu Jul 05 2012 - 08:50:40 EST


On Thu, 2012-07-05 at 13:47 +0200, Kay Sievers wrote:
> On Thu, Jul 5, 2012 at 12:20 PM, Michael Neuling <mikey@xxxxxxxxxxx> wrote:
>
> > I can only make 2) happen on SMP. It's when the second CPU is coming up
> > and it's printing something. The first CPU isn't printing anything at
> > this stage (there is no garbled console here) so I don't think it's a
> > race. I see it consistently in show_regs(). Every printk without a
> > newline. ie I get this:
> > ---
> > NIP: c000000000048164 LR: c000000000048160 CTR: 0000000000000000
> > REGS: c00000007e59fb50 TRAP: 0700 Tainted: G W (3.5.0-rc5-mikey)
> > MSR: 9000000000021032
> > <
> > SF
> > ,HV
> > ,ME
> > ,IR
> > ,DR
> > ,RI
> >>
> > CR: 28000042 XER: 22000000
> > SOFTE: 0
> > CFAR: c0000000007402f8
> > TASK = c00000007e56bb40[0] 'swapper/1' THREAD: c00000007e59c000
> > CPU: 1
> > ---
> >
> > It's consistent for printks without newlines in show_regs(). MSR
> > through to XER should all be on the same line.
>
> I see. Something to fix then, I'll have a look.
>
> Does this happen only very early during bootup, or also later when the
> box fully initialized?
>
> The output of 'dmesg' later looks always correct, right?

If it's an early printk issue like it looks like, where stuff got
printed before we had any console registered, this might fix the issue
you are seeing.

Could you possibly try this patch?

Thanks,
Kay


--- a/kernel/printk.c
+++ b/kernel/printk.c
@@ -1957,6 +1951,12 @@ skip:
*/
console_idx = log_next(console_idx);
console_seq++;
+ /*
+ * We will get here again when we register a new
+ * CON_PRINTBUFFER console. Clear the flag so we
+ * will properly dump everything later.
+ */
+ msg->flags &= ~LOG_NOCONS;
goto skip;
}


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/