Messages in this thread | | | Subject | Re: [PATCH][RESEND] x86: Do not write to VGA memory space if CONFIG_VGA_CONSOLE is undefined | From | Guenter Roeck <> | Date | Mon, 5 Apr 2010 15:12:59 -0700 |
| |
On Mon, 2010-04-05 at 17:11 -0400, H. Peter Anvin wrote: > On 04/05/2010 02:04 PM, Guenter Roeck wrote: > > > > Would you accept a minimized patch like this ? > > > > /* Direct interface for emergencies */ > > +#ifdef CONFIG_VGA_CONSOLE > > static struct console *early_console = &early_vga_console; > > +#else > > +static struct console *early_console = &early_serial_console; > > +#endif > > static int __initdata early_console_initialized; > > > > This would prevent the problem while minimizing changes, and at the same > > time permit early messages to be written to the serial console. > > > > 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.
Guenter
| |