• Maxim Mikityanskiy's avatar
    net/mlx5e: Use synchronize_rcu to sync with NAPI · 9c25a22d
    Maxim Mikityanskiy authored
    As described in the previous commit, napi_synchronize doesn't quite fit
    the purpose when we just need to wait until the currently running NAPI
    quits. Its implementation waits until NAPI is not running by polling and
    waiting for 1ms in between. In cases where we need to deactivate one
    queue (e.g., recovery flows) or where we deactivate them one-by-one
    (deactivate channel flow), we may get stuck in napi_synchronize forever
    if other queues keep NAPI active, causing a soft lockup. Depending on
    kernel configuration (CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC), it may result
    in a kernel panic.
    
    To fix the issue, use synchronize_rcu to wait for NAPI to quit, and wrap
    the whole NAPI in rcu_read_lock.
    
    Fixes: acc6c595 ("net/mlx5e: Split open/close channels to stages")
    Signed-off-by: default avatarMaxim Mikityanskiy <maximmi@mellanox.com>
    Reviewed-by: default avatarTariq Toukan <tariqt@mellanox.com>
    Signed-off-by: default avatarSaeed Mahameed <saeedm@mellanox.com>
    9c25a22d
setup.c 5 KB