• Shinya Kuribayashi's avatar
    serial: sh-sci: fix possible race cases on SCSCR register accesses · 33b48e16
    Shinya Kuribayashi authored
    In the previous commit, console write function (serial_console_write)
    is changed to disable SCI interrupts while printing console strings.
    This introduces possible race cases in the serial startup / shutdown
    functions on SMP systems.
    
    This patch fixes the sh-sci in the same way as commit 9ec1882d
    (tty: serial: imx: console write routing is unsafe on SMP, from
    Xinyu Chen <xinyu.chen@freescale.com>, 2012-08-27) did.
    
    There could be several consumers of the console,
    * the kernel printk
    * the init process using /dev/kmsg to call printk to show log
    * shell, which opens /dev/console and writes with sys_write()
    
    The shell goes into the normal UART open() and write() system calls,
    while the other two go into the console operations.  The open() call
    invokes serial startup function (sci_startup), which will write to
    the SCSCR register (to enable or disable SCI interrupts) without any
    locking.  This will conflict with the console serial function.
    
    Add spinlock protections in sci_startup() and sci_shutdown() properly.
    Signed-off-by: default avatarShinya Kuribayashi <shinya.kuribayashi.px@renesas.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    33b48e16
sh-sci.c 57.4 KB