diff options
author | Aleksey Senin <alex@senin.name> | 2010-12-02 06:44:49 -0500 |
---|---|---|
committer | Roland Dreier <rolandd@cisco.com> | 2011-01-12 17:49:17 -0500 |
commit | da995a8aee044bc5d0847e19e351cd48a2cb8bcc (patch) | |
tree | 000cb11c5e49e1bc91a2212ed5a2299f279c990b /drivers/infiniband | |
parent | 4979d18fe105297f8f065743f31f8f735da8df2d (diff) |
IB/mlx4: Handle protocol field in multicast table
The newest device firmware stores IB vs. Ethernet protocol in two bits
in members_count field of multicast group table (0: Infiniband, 1:
Ethernet). When changing the QP members count for a multicast group,
it important not to reset this information. When calling multicast
attach first time, the protocol type should be specified. In this
patch we always set it IB, but in the future we will handle Ethernet
too. When looking for a QP, the protocol type shoud be checked too.
Signed-off-by: Aleksey Senin <alekseys@voltaire.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
Diffstat (limited to 'drivers/infiniband')
-rw-r--r-- | drivers/infiniband/hw/mlx4/main.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/drivers/infiniband/hw/mlx4/main.c b/drivers/infiniband/hw/mlx4/main.c index d68d849ab866..c7a6213c6996 100644 --- a/drivers/infiniband/hw/mlx4/main.c +++ b/drivers/infiniband/hw/mlx4/main.c | |||
@@ -623,8 +623,9 @@ static int mlx4_ib_mcg_attach(struct ib_qp *ibqp, union ib_gid *gid, u16 lid) | |||
623 | struct mlx4_ib_dev *mdev = to_mdev(ibqp->device); | 623 | struct mlx4_ib_dev *mdev = to_mdev(ibqp->device); |
624 | struct mlx4_ib_qp *mqp = to_mqp(ibqp); | 624 | struct mlx4_ib_qp *mqp = to_mqp(ibqp); |
625 | 625 | ||
626 | err = mlx4_multicast_attach(mdev->dev, &mqp->mqp, gid->raw, !!(mqp->flags & | 626 | err = mlx4_multicast_attach(mdev->dev, &mqp->mqp, gid->raw, |
627 | MLX4_IB_QP_BLOCK_MULTICAST_LOOPBACK)); | 627 | !!(mqp->flags & MLX4_IB_QP_BLOCK_MULTICAST_LOOPBACK), |
628 | MLX4_PROTOCOL_IB); | ||
628 | if (err) | 629 | if (err) |
629 | return err; | 630 | return err; |
630 | 631 | ||
@@ -635,7 +636,7 @@ static int mlx4_ib_mcg_attach(struct ib_qp *ibqp, union ib_gid *gid, u16 lid) | |||
635 | return 0; | 636 | return 0; |
636 | 637 | ||
637 | err_add: | 638 | err_add: |
638 | mlx4_multicast_detach(mdev->dev, &mqp->mqp, gid->raw); | 639 | mlx4_multicast_detach(mdev->dev, &mqp->mqp, gid->raw, MLX4_PROTOCOL_IB); |
639 | return err; | 640 | return err; |
640 | } | 641 | } |
641 | 642 | ||
@@ -665,7 +666,7 @@ static int mlx4_ib_mcg_detach(struct ib_qp *ibqp, union ib_gid *gid, u16 lid) | |||
665 | struct mlx4_ib_gid_entry *ge; | 666 | struct mlx4_ib_gid_entry *ge; |
666 | 667 | ||
667 | err = mlx4_multicast_detach(mdev->dev, | 668 | err = mlx4_multicast_detach(mdev->dev, |
668 | &mqp->mqp, gid->raw); | 669 | &mqp->mqp, gid->raw, MLX4_PROTOCOL_IB); |
669 | if (err) | 670 | if (err) |
670 | return err; | 671 | return err; |
671 | 672 | ||