提交 4dc51b32 编写于 作者: E Eli Cohen 提交者: Roland Dreier

IB/mlx4: Fix race when detaching a QP from a multicast group

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: NEli Cohen <eli@mellanox.co.il>
Signed-off-by: NRoland Dreier <rolandd@cisco.com>
上级 c83b5b1c
......@@ -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);
}
......@@ -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 */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册