• Eli Cohen's avatar
    IB/mlx4: Synchronize cleanup of MCGs in MCG paravirtualization · bef83ed9
    Eli Cohen authored
    A client re-register event invokes cleanup of all MCGs.  This is
    required to protect against misbehaved guests leading to corruption of
    join/leave database.  However, since cleaning up the MCGs is a heavy
    operation, it is pushed to a work queue for further processing.
    Client re-register is also propagated to ULPs (e.g IPoIB).
    
    However, since the cleanup is performed in a workqueue, the ULP could
    leave and re-join groups before the cleanup occurs.  In this case,
    when the cleanup takes place, it prunes the (newly-joined) MCGs and
    the ULP is left without actual MCGs while believing it joined them.
    
    Fix this by setting the flushing flag before invoking the cleanup task
    and clearing it after flushing is complete.
    Signed-off-by: default avatarEli Cohen <eli@mellanox.com>
    Reviewed-by: default avatarJack Morgenstein <jackm@dev.mellanox.co.il>
    Signed-off-by: default avatarRoland Dreier <roland@purestorage.com>
    bef83ed9
mcg.c 35 KB