Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0345584e authored by Yevgeny Petrilin's avatar Yevgeny Petrilin Committed by David S. Miller
Browse files

mlx4: generalization of multicast steering.



The same packet steering mechanism would be used both for IB and Ethernet,
Both multicasts and unicasts.
This commit prepares the general infrastructure for this.

Signed-off-by: default avatarYevgeny Petrilin <yevgenyp@mellanox.co.il>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 725c8999
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -625,7 +625,7 @@ static int mlx4_ib_mcg_attach(struct ib_qp *ibqp, union ib_gid *gid, u16 lid)

	err = mlx4_multicast_attach(mdev->dev, &mqp->mqp, gid->raw,
				    !!(mqp->flags & MLX4_IB_QP_BLOCK_MULTICAST_LOOPBACK),
				    MLX4_PROTOCOL_IB);
				    MLX4_PROT_IB_IPV6);
	if (err)
		return err;

@@ -636,7 +636,7 @@ static int mlx4_ib_mcg_attach(struct ib_qp *ibqp, union ib_gid *gid, u16 lid)
	return 0;

err_add:
	mlx4_multicast_detach(mdev->dev, &mqp->mqp, gid->raw, MLX4_PROTOCOL_IB);
	mlx4_multicast_detach(mdev->dev, &mqp->mqp, gid->raw, MLX4_PROT_IB_IPV6);
	return err;
}

@@ -666,7 +666,7 @@ static int mlx4_ib_mcg_detach(struct ib_qp *ibqp, union ib_gid *gid, u16 lid)
	struct mlx4_ib_gid_entry *ge;

	err = mlx4_multicast_detach(mdev->dev,
				    &mqp->mqp, gid->raw, MLX4_PROTOCOL_IB);
				    &mqp->mqp, gid->raw, MLX4_PROT_IB_IPV6);
	if (err)
		return err;

@@ -953,7 +953,7 @@ static int mlx4_ib_netdev_event(struct notifier_block *this, unsigned long event
	mlx4_foreach_ib_transport_port(port, ibdev->dev) {
		oldnd = iboe->netdevs[port - 1];
		iboe->netdevs[port - 1] =
			mlx4_get_protocol_dev(ibdev->dev, MLX4_PROTOCOL_EN, port);
			mlx4_get_protocol_dev(ibdev->dev, MLX4_PROT_ETH, port);
		if (oldnd != iboe->netdevs[port - 1]) {
			if (iboe->netdevs[port - 1])
				netdev_added(ibdev, port);
@@ -1206,7 +1206,7 @@ static struct mlx4_interface mlx4_ib_interface = {
	.add		= mlx4_ib_add,
	.remove		= mlx4_ib_remove,
	.event		= mlx4_ib_event,
	.protocol	= MLX4_PROTOCOL_IB
	.protocol	= MLX4_PROT_IB_IPV6
};

static int __init mlx4_ib_init(void)
+1 −1
Original line number Diff line number Diff line
@@ -296,7 +296,7 @@ static struct mlx4_interface mlx4_en_interface = {
	.remove		= mlx4_en_remove,
	.event		= mlx4_en_event,
	.get_dev	= mlx4_en_get_netdev,
	.protocol	= MLX4_PROTOCOL_EN,
	.protocol	= MLX4_PROT_ETH,
};

static int __init mlx4_en_init(void)
+2 −0
Original line number Diff line number Diff line
@@ -274,6 +274,8 @@ int mlx4_QUERY_DEV_CAP(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap)
	dev_cap->stat_rate_support = stat_rate;
	MLX4_GET(field, outbox, QUERY_DEV_CAP_UDP_RSS_OFFSET);
	dev_cap->udp_rss = field & 0x1;
	dev_cap->vep_uc_steering = field & 0x2;
	dev_cap->vep_mc_steering = field & 0x4;
	MLX4_GET(field, outbox, QUERY_DEV_CAP_ETH_UC_LOOPBACK_OFFSET);
	dev_cap->loopback_support = field & 0x1;
	dev_cap->wol = field & 0x40;
+2 −0
Original line number Diff line number Diff line
@@ -80,6 +80,8 @@ struct mlx4_dev_cap {
	u16 stat_rate_support;
	int udp_rss;
	int loopback_support;
	int vep_uc_steering;
	int vep_mc_steering;
	int wol;
	u32 flags;
	int reserved_uars;
+2 −0
Original line number Diff line number Diff line
@@ -227,6 +227,8 @@ static int mlx4_dev_cap(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap)
	dev->caps.stat_rate_support  = dev_cap->stat_rate_support;
	dev->caps.udp_rss	     = dev_cap->udp_rss;
	dev->caps.loopback_support   = dev_cap->loopback_support;
	dev->caps.vep_uc_steering    = dev_cap->vep_uc_steering;
	dev->caps.vep_mc_steering    = dev_cap->vep_mc_steering;
	dev->caps.wol		     = dev_cap->wol;
	dev->caps.max_gso_sz	     = dev_cap->max_gso_sz;

Loading