serial/amba-pl011: Disable interrupts around TX softirq
PATCH 1/1 serial/amba-pl011: Disable interrupts around TX softirq
pl011_tx_softirq() currently uses spin_{,un}lock(), which are not sufficient to inhibit pl011_int() from being triggered by a local IRQ and trying to re-take the same lock. This can lead to deadlocks.
This patch uses the _irq() locking variants instead to ensure that pl011_int() handling for a given port is deferred until any pl011_tx_softirq() work for that port is complete.
--- drivers/tty/serial/amba-pl011.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/tty/serial/amba-pl011.c +2 -2
@@ -1360,9 +1360,9 @@ static void pl011_tx_softirq(struct work_struct *work)struct uart_amba_port *uap = container_of(dwork, struct uart_amba_port, tx_softirq_work); -spin_lock (&uap->port.lock); +spin_lock_irq (&uap->port.lock);while (pl011_tx_chars (uap)) ; -spin_unlock (&uap->port.lock); +spin_unlock_irq (&uap->port.lock); }static void pl011_tx_irq_seen (struct uart_amba_port *uap)
Signature · 1 line
1.7.10.4
Greg Kroah-Hartman
maintainerPATCH 1/1 serial/amba-pl011: Disable interrupts around TX softirq
Quoted 9 lines · Dave Martin
pl011_tx_softirq()currently uses spin_{,un}lock(), which are not sufficient to inhibitpl011_int()from being triggered by a local IRQ and trying to re-take the same lock. This can lead to deadlocks.This patch uses the
_irq()locking variants instead to ensure thatpl011_int()handling for a given port is deferred until anypl011_tx_softirq()work for that port is complete.
Quoted 8 lines
Fixes 734745caeb9f serial/amba-pl011: Activate TX IRQ passivelySigned-off-by Dave Martin <[email protected]>Tested-by Robin Murphy <[email protected]>Tested-by Stefan Wahren <[email protected]>Cc stable <[email protected]> # 4.1--- drivers/tty/serial/amba-pl011.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
This doesn't apply at all to 4.2-rc3, so I can't apply it :(
PATCH 1/1 serial/amba-pl011: Disable interrupts around TX softirq
Quoted 19 lines · Greg Kroah-Hartman
Quoted 9 lines · Dave Martin
pl011_tx_softirq()currently uses spin_{,un}lock(), which are not sufficient to inhibitpl011_int()from being triggered by a local IRQ and trying to re-take the same lock. This can lead to deadlocks.This patch uses the
_irq()locking variants instead to ensure thatpl011_int()handling for a given port is deferred until anypl011_tx_softirq()work for that port is complete.Quoted 8 lines
Fixes 734745caeb9f serial/amba-pl011: Activate TX IRQ passivelySigned-off-by Dave Martin <[email protected]>Tested-by Robin Murphy <[email protected]>Tested-by Stefan Wahren <[email protected]>Cc stable <[email protected]> # 4.1--- drivers/tty/serial/amba-pl011.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
Quoted 1 line
This doesn't apply at all to 4.2-rc3, so I can't apply it :(
This is applicable to 4.1 stable only, since the code this patch fixes was replaced in 4.2-rc1.
Apologies, I didn't make that clear in the text.
Cheers
---Dave
Greg Kroah-Hartman
maintainerPATCH 1/1 serial/amba-pl011: Disable interrupts around TX softirq
Quoted 20 lines · Dave Martin
Quoted 19 lines · Greg Kroah-Hartman
Quoted 17 lines · Dave Martin
pl011_tx_softirq()currently uses spin_{,un}lock(), which are not sufficient to inhibitpl011_int()from being triggered by a local IRQ and trying to re-take the same lock. This can lead to deadlocks.This patch uses the
_irq()locking variants instead to ensure thatpl011_int()handling for a given port is deferred until anypl011_tx_softirq()work for that port is complete.Fixes 734745caeb9f serial/amba-pl011: Activate TX IRQ passivelySigned-off-by Dave Martin <[email protected]>Tested-by Robin Murphy <[email protected]>Tested-by Stefan Wahren <[email protected]>Cc stable <[email protected]> # 4.1--- drivers/tty/serial/amba-pl011.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
Quoted 6 lines
Quoted 1 line
This doesn't apply at all to 4.2-rc3, so I can't apply it :(
This is applicable to 4.1 stable only, since the code this patch fixes was replaced in 4.2-rc1.
Apologies, I didn't make that clear in the text.
I can't do anything with a 4.1-only patch, please read Documentation/stable_kernel_rules.txt for how to get a patch into the stable kernel releases.
thanks,
greg k-h
PATCH 1/1 serial/amba-pl011: Disable interrupts around TX softirq
Quoted 23 lines · Greg Kroah-Hartman
Quoted 22 lines · Dave Martin
Quoted 20 lines · Greg Kroah-Hartman
Quoted 9 lines · Dave Martin
pl011_tx_softirq()currently uses spin_{,un}lock(), which are not sufficient to inhibitpl011_int()from being triggered by a local IRQ and trying to re-take the same lock. This can lead to deadlocks.This patch uses the
_irq()locking variants instead to ensure thatpl011_int()handling for a given port is deferred until anypl011_tx_softirq()work for that port is complete.Quoted 8 lines
Fixes 734745caeb9f serial/amba-pl011: Activate TX IRQ passivelySigned-off-by Dave Martin <[email protected]>Tested-by Robin Murphy <[email protected]>Tested-by Stefan Wahren <[email protected]>Cc stable <[email protected]> # 4.1--- drivers/tty/serial/amba-pl011.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)This doesn't apply at all to 4.2-rc3, so I can't apply it :(
Quoted 8 lines
Quoted 4 lines
This is applicable to 4.1 stable only, since the code this patch fixes was replaced in 4.2-rc1.
Apologies, I didn't make that clear in the text.
I can't do anything with a 4.1-only patch, please read
Documentation/stable_kernel_rules.txtfor how to get a patch into the stable kernel releases.
OK, reposted[1] with a clear reference to the equivalent upstream commit, and explanation of why this patch is different, which I'm guessing is what was missing.
Is that sufficient?
Cheers
---Dave