Skip to content

Commit

Permalink
IB/mlx4: Fix race when detaching a QP from a multicast group
Browse files Browse the repository at this point in the history
When detaching the last QP from an MCG entry, we need to make
sure that at any time, there will be no entry with zero number of
QPs which is linked to the list of the MCGs of the corresponding
hash index.  So don't write back the MCG entry if we are removing the
last QP; just unlink the entry.

Also, remove an unnecessary MCG read when attaching a QP requires
allocation of a new entry in the AMGM.

Signed-off-by: Eli Cohen <eli@mellanox.co.il>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
  • Loading branch information
Eli Cohen authored and Roland Dreier committed Apr 17, 2008
1 parent c83b5b1 commit 4dc51b3
Showing 1 changed file with 3 additions and 9 deletions.
12 changes: 3 additions & 9 deletions drivers/net/mlx4/mcg.c
Original file line number Diff line number Diff line change
Expand Up @@ -190,10 +190,6 @@ int mlx4_multicast_attach(struct mlx4_dev *dev, struct mlx4_qp *qp, u8 gid[16])
}
index += dev->caps.num_mgms;

err = mlx4_READ_MCG(dev, index, mailbox);
if (err)
goto out;

memset(mgm, 0, sizeof *mgm);
memcpy(mgm->gid, gid, 16);
}
Expand Down Expand Up @@ -301,12 +297,10 @@ int mlx4_multicast_detach(struct mlx4_dev *dev, struct mlx4_qp *qp, u8 gid[16])
mgm->qp[loc] = mgm->qp[i - 1];
mgm->qp[i - 1] = 0;

err = mlx4_WRITE_MCG(dev, index, mailbox);
if (err)
goto out;

if (i != 1)
if (i != 1) {
err = mlx4_WRITE_MCG(dev, index, mailbox);
goto out;
}

if (prev == -1) {
/* Remove entry from MGM */
Expand Down

0 comments on commit 4dc51b3

Please sign in to comment.