• Liming Sun's avatar
    platform/mellanox: fix potential deadlock in the tmfifo driver · 638bc4ca
    Liming Sun authored
    This commit fixes the potential deadlock caused by the console Rx
    and Tx processing at the same time. Rx and Tx both take the console
    and tmfifo spinlock but in different order which causes potential
    deadlock. The fix is to use different tmfifo spinlock for Rx and
    Tx since they protect different resources and it's safe to split
    the lock.
    
    Below is the reported call trace when copying/pasting large string
    in the console.
    
    Rx:
        _raw_spin_lock_irqsave (hvc lock)
        __hvc_poll
        hvc_poll
        in_intr
        vring_interrupt
        mlxbf_tmfifo_rxtx_one_desc (tmfifo lock)
        mlxbf_tmfifo_rxtx
        mlxbf_tmfifo_work_rxtx
    Tx:
        _raw_spin_lock_irqsave (tmfifo lock)
        mlxbf_tmfifo_virtio_notify
        virtqueue_notify
        virtqueue_kick
        put_chars
        hvc_push
        hvc_write (hvc lock)
        ...
        do_tty_write
        tty_write
    
    Fixes: 1357dfd7 ("platform/mellanox: Add TmFifo driver for Mellanox BlueField Soc")
    Cc: <stable@vger.kernel.org> # 5.4+
    Reviewed-by: default avatarDavid Woods <dwoods@mellanox.com>
    Signed-off-by: default avatarLiming Sun <lsun@mellanox.com>
    Signed-off-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
    638bc4ca
mlxbf-tmfifo.c 33.2 KB