• G
    [PATCH] CON_CONSDEV bit not set correctly on last console · ab4af03a
    Greg Edwards 提交于
    According to include/linux/console.h, CON_CONSDEV flag should be set on
    the last console specified on the boot command line:
    
         86 #define CON_PRINTBUFFER (1)
         87 #define CON_CONSDEV     (2) /* Last on the command line */
         88 #define CON_ENABLED     (4)
         89 #define CON_BOOT        (8)
    
    This does not currently happen if there is more than one console specified
    on the boot commandline.  Instead, it gets set on the first console on the
    command line.  This can cause problems for things like kdb that look for
    the CON_CONSDEV flag to see if the console is valid.
    
    Additionaly, it doesn't look like CON_CONSDEV is reassigned to the next
    preferred console at unregister time if the console being unregistered
    currently has that bit set.
    
    Example (from sn2 ia64):
    
    elilo vmlinuz root=<dev> console=ttyS0 console=ttySG0
    
    in this case, the flags on ttySG console struct will be 0x4 (should be
    0x6).
    
    Attached patch against bk fixes both issues for the cases I looked at.  It
    uses selected_console (which gets incremented for each console specified on
    the command line) as the indicator of which console to set CON_CONSDEV on.
    When adding the console to the list, if the previous one had CON_CONSDEV
    set, it masks it out.  Tested on ia64 and x86.
    
    The problem with the current behavior is it breaks overriding the default from
    the boot line.  In the ia64 case, there may be a global append line defining
    console=a in elilo.conf.  Then you want to boot your kernel, and want to
    override the default by passing console=b on the boot line.  elilo constructs
    the kernel cmdline by starting with the value of the global append line, then
    tacks on whatever else you specify, which puts console=b last.
    Signed-off-by: NGreg Edwards <edwardsg@sgi.com>
    Signed-off-by: NAndrew Morton <akpm@osdl.org>
    Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
    ab4af03a
printk.c 25.5 KB