Messages in this thread | | | Date | Mon, 05 Apr 2010 13:25:33 -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 01:02 PM, Guenter Roeck wrote: >> >> You didn't answer my question (c). >> >> I want to know how you ended up with >> boot_params.screen_info.orig_video_isVGA == 1 on a system with no VGA, >> which seems like it would have resolved this. >> >> I am *not* inclined to add a compile-time test for what should have been >> handed with a runtime test already. >> > Sorry, I thought I did answer it. >
You didn't. You still haven't!
> The problem is that early_printk() can be called prior to the call to > setup_early_printk(). Since early_console is currently pre-initialized > with early_vga_console, output can be written to VGA memory space even > if there is no VGA controller in the system (and even if > boot_params.screen_info.orig_video_isVGA == 0). This happens for all > early_printk() calls executed prior to the call to setup_early_printk().
If boot_params.screen_info.orig_video_isVGA == 0, at least this bit of your patch has no effect:
> > - if (!strncmp(buf, "vga", 3) && > > + if (have_vga_console && !strncmp(buf, "vga", 3) && > > boot_params.screen_info.orig_video_isVGA == 1) {
Now, we have at least two ways to report a non-VGA console at runtime:
boot_params.screen_info.orig_video_isVGA != 1 boot_params.screen_info.orig_video_lines == 0
The former is zero for CGA/MDA/EGA, but early_vga_write() doesn't work right for MDA at least, so keying on isVGA is probably right.
early_printk() being called before setup_early_printk() is a problem, and it's not immediately obvious to me how to fix it. We can of course make early_vga_write() simply return if boot_params.screen_info.isVGA == 0, of course, but it really is a bigger problem than that in many ways.
-hpa
| |