• Maxim Mikityanskiy's avatar
    net/mlx5e: Use RCU to protect rq->xdp_prog · fe45386a
    Maxim Mikityanskiy authored
    Currently, the RQs are temporarily deactivated while hot-replacing the
    XDP program, and napi_synchronize is used to make sure rq->xdp_prog is
    not in use. However, napi_synchronize is not ideal: instead of waiting
    till the end of a NAPI cycle, it polls and waits until NAPI is not
    running, sleeping for 1ms between the periodic checks. Under heavy
    workloads, this loop will never end, which may even lead to a kernel
    panic if the kernel detects the hangup. Such workloads include XSK TX
    and possibly also heavy RX (XSK or normal).
    
    The fix is inspired by commit 326fe02d ("net/mlx4_en: protect
    ring->xdp_prog with rcu_read_lock"). As mlx5e_xdp_handle is already
    protected by rcu_read_lock, and bpf_prog_put uses call_rcu to free the
    program, there is no need for additional synchronization if proper RCU
    functions are used to access the pointer. This patch converts all
    accesses to rq->xdp_prog to use RCU functions.
    
    Fixes: 86994156 ("net/mlx5e: XDP fast RX drop bpf programs support")
    Fixes: db05815b ("net/mlx5e: Add XSK zero-copy support")
    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>
    fe45386a
en.h 34.9 KB