diff options
author | Eugenia Emantayev <eugenia@mellanox.co.il> | 2012-02-14 01:38:33 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-02-14 14:11:58 -0500 |
commit | f1f75f0e2bb94674da540be9c488fe596dd55881 (patch) | |
tree | b232de8d392c05f6cbab1b201dd74bc3b81249b1 /drivers | |
parent | de9b43dbb8a81fb58ed092351aa8e35e52368199 (diff) |
mlx4: attach multicast with correct flag
mlx4_multicast_attach/detach() should use always MLX4_MC_STEER flag
Signed-off-by: Eugenia Emantayev <eugenia@mellanox.co.il>
Reviewed-by: Yevgeny Petrilin <yevgenyp@mellanox.co.il>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/mcg.c | 16 |
1 files changed, 4 insertions, 12 deletions
diff --git a/drivers/net/ethernet/mellanox/mlx4/mcg.c b/drivers/net/ethernet/mellanox/mlx4/mcg.c index da63874a5005..4799e824052f 100644 --- a/drivers/net/ethernet/mellanox/mlx4/mcg.c +++ b/drivers/net/ethernet/mellanox/mlx4/mcg.c | |||
@@ -870,44 +870,36 @@ static int mlx4_QP_ATTACH(struct mlx4_dev *dev, struct mlx4_qp *qp, | |||
870 | int mlx4_multicast_attach(struct mlx4_dev *dev, struct mlx4_qp *qp, u8 gid[16], | 870 | int mlx4_multicast_attach(struct mlx4_dev *dev, struct mlx4_qp *qp, u8 gid[16], |
871 | int block_mcast_loopback, enum mlx4_protocol prot) | 871 | int block_mcast_loopback, enum mlx4_protocol prot) |
872 | { | 872 | { |
873 | enum mlx4_steer_type steer; | ||
874 | |||
875 | steer = (is_valid_ether_addr(&gid[10])) ? MLX4_UC_STEER : MLX4_MC_STEER; | ||
876 | |||
877 | if (prot == MLX4_PROT_ETH && | 873 | if (prot == MLX4_PROT_ETH && |
878 | !(dev->caps.flags & MLX4_DEV_CAP_FLAG_VEP_MC_STEER)) | 874 | !(dev->caps.flags & MLX4_DEV_CAP_FLAG_VEP_MC_STEER)) |
879 | return 0; | 875 | return 0; |
880 | 876 | ||
881 | if (prot == MLX4_PROT_ETH) | 877 | if (prot == MLX4_PROT_ETH) |
882 | gid[7] |= (steer << 1); | 878 | gid[7] |= (MLX4_MC_STEER << 1); |
883 | 879 | ||
884 | if (mlx4_is_mfunc(dev)) | 880 | if (mlx4_is_mfunc(dev)) |
885 | return mlx4_QP_ATTACH(dev, qp, gid, 1, | 881 | return mlx4_QP_ATTACH(dev, qp, gid, 1, |
886 | block_mcast_loopback, prot); | 882 | block_mcast_loopback, prot); |
887 | 883 | ||
888 | return mlx4_qp_attach_common(dev, qp, gid, block_mcast_loopback, | 884 | return mlx4_qp_attach_common(dev, qp, gid, block_mcast_loopback, |
889 | prot, steer); | 885 | prot, MLX4_MC_STEER); |
890 | } | 886 | } |
891 | EXPORT_SYMBOL_GPL(mlx4_multicast_attach); | 887 | EXPORT_SYMBOL_GPL(mlx4_multicast_attach); |
892 | 888 | ||
893 | int mlx4_multicast_detach(struct mlx4_dev *dev, struct mlx4_qp *qp, u8 gid[16], | 889 | int mlx4_multicast_detach(struct mlx4_dev *dev, struct mlx4_qp *qp, u8 gid[16], |
894 | enum mlx4_protocol prot) | 890 | enum mlx4_protocol prot) |
895 | { | 891 | { |
896 | enum mlx4_steer_type steer; | ||
897 | |||
898 | steer = (is_valid_ether_addr(&gid[10])) ? MLX4_UC_STEER : MLX4_MC_STEER; | ||
899 | |||
900 | if (prot == MLX4_PROT_ETH && | 892 | if (prot == MLX4_PROT_ETH && |
901 | !(dev->caps.flags & MLX4_DEV_CAP_FLAG_VEP_MC_STEER)) | 893 | !(dev->caps.flags & MLX4_DEV_CAP_FLAG_VEP_MC_STEER)) |
902 | return 0; | 894 | return 0; |
903 | 895 | ||
904 | if (prot == MLX4_PROT_ETH) | 896 | if (prot == MLX4_PROT_ETH) |
905 | gid[7] |= (steer << 1); | 897 | gid[7] |= (MLX4_MC_STEER << 1); |
906 | 898 | ||
907 | if (mlx4_is_mfunc(dev)) | 899 | if (mlx4_is_mfunc(dev)) |
908 | return mlx4_QP_ATTACH(dev, qp, gid, 0, 0, prot); | 900 | return mlx4_QP_ATTACH(dev, qp, gid, 0, 0, prot); |
909 | 901 | ||
910 | return mlx4_qp_detach_common(dev, qp, gid, prot, steer); | 902 | return mlx4_qp_detach_common(dev, qp, gid, prot, MLX4_MC_STEER); |
911 | } | 903 | } |
912 | EXPORT_SYMBOL_GPL(mlx4_multicast_detach); | 904 | EXPORT_SYMBOL_GPL(mlx4_multicast_detach); |
913 | 905 | ||