Thanks for the report. I'll go ahead and open a Hardy nomination. I'm also including the git commit id's whose final patch result is what you have attached:
commit 768aec0b5bccbd460bcf6e9131f19b5a26f3862d
Author: Anton Vorontsov <email address hidden>
serial: 8250: fix shared interrupts issues with SMP and RT kernels
diff --git a/drivers/serial/8250.c b/drivers/serial/8250.c
index ce948b6..27f34a9 100644
--- a/drivers/serial/8250.c
+++ b/drivers/serial/8250.c
@@ -1874,7 +1874,9 @@ static int serial8250_startup(struct uart_port *port)
* the interrupt is enabled. Delays are necessary to
* allow register changes to become visible.
*/
- spin_lock_irqsave(&up->port.lock, flags);
+ spin_lock(&up->port.lock);
+ if (up->port.flags & UPF_SHARE_IRQ)
+ disable_irq_nosync(up->port.irq);
Hi pbeeson,
Thanks for the report. I'll go ahead and open a Hardy nomination. I'm also including the git commit id's whose final patch result is what you have attached:
commit 768aec0b5bccbd4 60bcf6e9131f19b 5a26f3862d
Author: Anton Vorontsov <email address hidden>
serial: 8250: fix shared interrupts issues with SMP and RT kernels
diff --git a/drivers/ serial/ 8250.c b/drivers/ serial/ 8250.c serial/ 8250.c serial/ 8250.c startup( struct uart_port *port) irqsave( &up->port. lock, flags); &up->port. lock); irq_nosync( up->port. irq);
index ce948b6..27f34a9 100644
--- a/drivers/
+++ b/drivers/
@@ -1874,7 +1874,9 @@ static int serial8250_
* the interrupt is enabled. Delays are necessary to
* allow register changes to become visible.
*/
- spin_lock_
+ spin_lock(
+ if (up->port.flags & UPF_SHARE_IRQ)
+ disable_
@@ -1886,7 +1888,9 @@ static int serial8250_
iir = serial_in(up, UART_IIR);
- spin_unlock_ irqrestore( &up->port. lock, flags); irq(up- >port.irq) ; &up->port. lock);
+ if (up->port.flags & UPF_SHARE_IRQ)
+ enable_
+ spin_unlock(
/*
* If the interrupt is not reasserted, setup a timer to
commit c389d27b5e643d7 45f55ffb939b142 6060ba63d4
Author: Borislav Petkov <email address hidden>
8250.c: port.lock is irq-safe
diff --git a/drivers/ serial/ 8250.c b/drivers/ serial/ 8250.c serial/ 8250.c serial/ 8250.c startup( struct uart_port *port) &up->port. lock); irqsave( &up->port. lock, flags);
disable_ irq_nosync( up->port. irq);
index a97f1ae..342e12f 100644
--- a/drivers/
+++ b/drivers/
@@ -1885,7 +1885,7 @@ static int serial8250_
* the interrupt is enabled. Delays are necessary to
* allow register changes to become visible.
*/
- spin_lock(
+ spin_lock_
if (up->port.flags & UPF_SHARE_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) ; &up->port. lock); irqrestore( &up->port. lock, flags);
- spin_unlock(
+ spin_unlock_
/*
* If the interrupt is not reasserted, setup a timer to