• Aleksey Makarov's avatar
    printk: fix double printing with earlycon · cf39bf58
    Aleksey Makarov authored
    If a console was specified by ACPI SPCR table _and_ command line
    parameters like "console=ttyAMA0" _and_ "earlycon" were specified,
    then log messages appear twice.
    
    The root cause is that the code traverses the list of specified
    consoles (the `console_cmdline` array) and stops at the first match.
    But it may happen that the same console is referred by the elements
    of this array twice:
    
    	pl011,mmio,0x87e024000000,115200 -- from SPCR
    	ttyAMA0 -- from command line
    
    but in this case `preferred_console` points to the second entry and
    the flag CON_CONSDEV is not set, so bootconsole is not deregistered.
    
    To fix that, introduce an invariant "The last non-braille console
    is always the preferred one" on the entries of the console_cmdline
    array.  Then traverse it in reverse order to be sure that if
    the console is preferred then it will be the first matching entry.
    Introduce variable console_cmdline_cnt that keeps the number
    of elements of the console_cmdline array (Petr Mladek).  It helps
    to get rid of the loop that searches for the end of this array.
    
    Link: http://lkml.kernel.org/r/20170405202006.18234-1-aleksey.makarov@linaro.org
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: Peter Hurley <peter@hurleysoftware.com>
    Cc: Jiri Slaby <jslaby@suse.com>
    Cc: Robin Murphy <robin.murphy@arm.com>
    Cc: "Nair, Jayachandran" <Jayachandran.Nair@cavium.com>
    Cc: linux-serial@vger.kernel.org
    Cc: linux-kernel@vger.kernel.org
    Signed-off-by: default avatarAleksey Makarov <aleksey.makarov@linaro.org>
    Reported-by: default avatarSudeep Holla <sudeep.holla@arm.com>
    Acked-by: default avatarSergey Senozhatsky <sergey.senozhatsky@gmail.com>
    Signed-off-by: default avatarPetr Mladek <pmladek@suse.com>
    cf39bf58
printk.c 79.4 KB