From: H. Peter Anvin on
On 04/05/2010 03:12 PM, Guenter Roeck wrote:
>>
>> I'm unhappy about it, because *those early messages shouldn't exist in
>> the first place*. It seems to be an indication that we're invoking
>> setup_early_printk() too late. The whole playing around with max_xpos
>> and max_ypos instead of using boot_params.screen_info directly is
>> particularly bleacherous.
>>
>> I would at least like to see if the improper invocation of
>> early_printk() can be avoided.
>>
> There are several such invocations.
>
> 1) arch/x86/kernel/head_64.S:
> ENTRY(early_idt_handler)
> ...
> leaq early_idt_msg(%rip),%rdi
> call early_printk
>
> This displays "PANIC: early exception %02lx rip %lx:%lx error %lx cr2 %
> lx\n" and subsequently calls dump_stack. The handler is initialized from
> x86_64_start_kernel().
>
> 2) arch/x86/kernel/head64.c:x86_64_start_kernel():
> if (console_loglevel == 10)
> early_printk("Kernel alive\n");
>
> 3) init/main.c: start_kernel()
> printk(KERN_NOTICE "%s", linux_banner);
> and
> printk(KERN_NOTICE "Kernel command line: %s\n", boot_command_line);
>
> 4) arch/x86/kernel/setup.c:setup_arch()
> Several.
>
> After that I gave up looking.
>
> Not sure if or how those can be avoided.
>
> Moving setup_early_printk() into x86_64_start_kernel() might be an
> option, but that would require much more significant changes.
>

Okay... that leaves a few very ugly options.

I think spewing onto a potentially uninitialized (or not even present)
serial port is worse than losing the messages. It seems to be pretty
much a no-brainer to have:

if (boot_params.screen_info.orig_video_isVGA != 1)
return;

.... in early_vga_write(), and is something we should do regardless.

Calling early_serial_write() before early_serial_init() is distinctly
not safe... depending on boot conditions you might end up with a glacial
boot.

Therefore, the only sensible way to get the early messages out is really
to push setup_early_printk() as early as possible.

-hpa


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo(a)vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
From: H. Peter Anvin on
Hi Guenter,

I wanted to check where we are at... at the very least we should drop
messages issued before initialization when isVGA != 1.

Since serial ports require initialization, I really don't want to send
messages to the serial port before the port has been initialized, but
obviously it would be good to initialize earlyprintk as early as at all
possible.

-hpa

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