• Dave Martin's avatar
    serial/amba-pl011: Disable interrupts around TX softirq · 66196fff
    Dave Martin authored
    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.
    
    
    Notes for stable:
    
    This patch fixes an issue that is fixed by the following upstream
    commit, which is a more substantial rewrite of the affected code,
    fixing multiple, mostly more minor issues:
    
            1e84d223
            serial/amba-pl011: Refactor and simplify TX FIFO handling
    
    The upstream patch was rejected for stable on the reasonable grounds
    that it was too big and complex a patch.  The original buggy code was
    merged in v4.1, and the rewrite was merged in v4.2, leaving only v4.1
    affected.
    
    
    This patch replaces the 1e84d223, for 4.1.x only.
    
    Fixes: 734745ca serial/amba-pl011: Activate TX IRQ passively
    Signed-off-by: default avatarDave Martin <Dave.Martin@arm.com>
    Tested-by: default avatarRobin Murphy <robin.murphy@arm.com>
    Tested-by: default avatarStefan Wahren <stefan.wahren@i2se.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    66196fff
amba-pl011.c 60.3 KB