Messages in this thread | | | Date | Tue, 06 Apr 2010 13:17:27 -0700 | From | "H. Peter Anvin" <> | Subject | Re: [PATCH][RESEND] x86: Do not write to VGA memory space if CONFIG_VGA_CONSOLE is undefined |
| |
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
| |