IB/mlx4: Synchronize cleanup of MCGs in MCG paravirtualization
authorEli Cohen <eli@mellanox.com>
Wed, 17 Oct 2012 16:42:59 +0000 (16:42 +0000)
committerRoland Dreier <roland@purestorage.com>
Thu, 18 Oct 2012 17:29:02 +0000 (10:29 -0700)
commitbef83ed92caca45a394344a14b0234aea977da6e
tree8a9e4ffe42d5cd520b5d8df7bb5129a3645939c0
parent2c75d2ccb6e5ffb96ce8624ef4c1f7ba5bd96499
IB/mlx4: Synchronize cleanup of MCGs in MCG paravirtualization

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: Eli Cohen <eli@mellanox.com>
Reviewed-by: Jack Morgenstein <jackm@dev.mellanox.co.il>
Signed-off-by: Roland Dreier <roland@purestorage.com>
drivers/infiniband/hw/mlx4/mcg.c