mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 10:41:38 -04:00
8250.c: port.lock is irq-safe
serial8250_startup() doesn't disable interrupts while taking the &up->port.lock which might race against the interrupt handler serial8250_interrupt(), which when entered, will deadlock waiting for the lock to be released. Signed-off-by: Borislav Petkov <[email protected]> Tested-by: Ingo Molnar <[email protected]> Cc: Alan Cox <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
This commit is contained in:
parent
5def9a3a22
commit
c389d27b5e
1 changed files with 2 additions and 2 deletions
|
|
@ -1885,7 +1885,7 @@ static int serial8250_startup(struct uart_port *port)
|
|||
* the interrupt is enabled. Delays are necessary to
|
||||
* allow register changes to become visible.
|
||||
*/
|
||||
spin_lock(&up->port.lock);
|
||||
spin_lock_irqsave(&up->port.lock, flags);
|
||||
if (up->port.flags & UPF_SHARE_IRQ)
|
||||
disable_irq_nosync(up->port.irq);
|
||||
|
||||
|
|
@ -1901,7 +1901,7 @@ static int serial8250_startup(struct uart_port *port)
|
|||
|
||||
if (up->port.flags & UPF_SHARE_IRQ)
|
||||
enable_irq(up->port.irq);
|
||||
spin_unlock(&up->port.lock);
|
||||
spin_unlock_irqrestore(&up->port.lock, flags);
|
||||
|
||||
/*
|
||||
* If the interrupt is not reasserted, setup a timer to
|
||||
|
|
|
|||
Loading…
Reference in a new issue