aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorEugenia Emantayev <eugenia@mellanox.co.il>2012-02-14 01:38:33 -0500
committerDavid S. Miller <davem@davemloft.net>2012-02-14 14:11:58 -0500
commitf1f75f0e2bb94674da540be9c488fe596dd55881 (patch)
treeb232de8d392c05f6cbab1b201dd74bc3b81249b1 /drivers
parentde9b43dbb8a81fb58ed092351aa8e35e52368199 (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.c16
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,
870int mlx4_multicast_attach(struct mlx4_dev *dev, struct mlx4_qp *qp, u8 gid[16], 870int 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}
891EXPORT_SYMBOL_GPL(mlx4_multicast_attach); 887EXPORT_SYMBOL_GPL(mlx4_multicast_attach);
892 888
893int mlx4_multicast_detach(struct mlx4_dev *dev, struct mlx4_qp *qp, u8 gid[16], 889int 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}
912EXPORT_SYMBOL_GPL(mlx4_multicast_detach); 904EXPORT_SYMBOL_GPL(mlx4_multicast_detach);
913 905