• Mark Zhang's avatar
    net/mlx5: Use a separate work queue for fib event handling · 6838a35a
    Mark Zhang authored
    In VF lag mode when remove the bonding module without bring down the
    bond device first, we could potentially have circular dependency when we
    unload IB devices and also handle fib events:
    1. The bond work starts first;
    2. The "modprobe -rv bonding" process tries to release the bond device,
       with the "pernet_ops_rwsem" lock hold;
    3. The bond work blocks in unregister_netdevice_notifier() and waits for
    the lock because fib event came right before;
    4. The kernel fib module tries to free all the fib entries by broadcasting
       the "FIB_EVENT_NH_DEL" event;
    5. Upon the fib event this lag_mp module holds the fib lock and queue a
       fib work.
    So:
       bond work -> modprobe task -> kernel fib module -> lag_mp -> bond work
    
    Today we either reload IB devices in roce lag in nic mode or either handle
    fib events in switchdev mode, but a new feature could change that we'll
    need to reload IB devices also in switchdev mode so this is a future proof
    fix as one may not notice this later.
    Signed-off-by: default avatarMark Zhang <markz@mellanox.com>
    Reviewed-by: default avatarRoi Dayan <roid@mellanox.com>
    Signed-off-by: default avatarSaeed Mahameed <saeedm@mellanox.com>
    6838a35a
lag_mp.h 817 Bytes