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

Commit 2f69e591 authored by Bodong Wang's avatar Bodong Wang Committed by Saeed Mahameed
Browse files

{IB, net}/mlx5: E-Switch, Use index of rep for vport to IB port mapping



In the single IB device mode, the mapping between vport number and
rep relies on a counter. However for dynamic vport allocation, it is
desired to keep consistent map of eswitch vport and IB port.

Hence, simplify code to remove the free running counter and instead
use the available vport index during load/unload sequence from the
eswitch.

Signed-off-by: default avatarBodong Wang <bodong@mellanox.com>
Suggested-by: default avatarParav Pandit <parav@mellanox.com>
Reviewed-by: default avatarParav Pandit <parav@mellanox.com>
Reviewed-by: default avatarMark Bloch <markb@mellanox.com>
Signed-off-by: default avatarSaeed Mahameed <saeedm@mellanox.com>
parent d6518db2
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -14,7 +14,7 @@ mlx5_ib_set_vport_rep(struct mlx5_core_dev *dev, struct mlx5_eswitch_rep *rep)
	int vport_index;

	ibdev = mlx5_ib_get_uplink_ibdev(dev->priv.eswitch);
	vport_index = ibdev->free_port++;
	vport_index = rep->vport_index;

	ibdev->port[vport_index].rep = rep;
	write_lock(&ibdev->port[vport_index].roce.netdev_lock);
@@ -50,7 +50,7 @@ mlx5_ib_vport_rep_load(struct mlx5_core_dev *dev, struct mlx5_eswitch_rep *rep)
	}

	ibdev->is_rep = true;
	vport_index = ibdev->free_port++;
	vport_index = rep->vport_index;
	ibdev->port[vport_index].rep = rep;
	ibdev->port[vport_index].roce.netdev =
		mlx5_ib_get_rep_netdev(dev->priv.eswitch, rep->vport);
+0 −1
Original line number Diff line number Diff line
@@ -978,7 +978,6 @@ struct mlx5_ib_dev {
	u16			devx_whitelist_uid;
	struct mlx5_srq_table   srq_table;
	struct mlx5_async_ctx   async_ctx;
	int			free_port;
};

static inline struct mlx5_ib_cq *to_mibcq(struct mlx5_core_cq *mcq)
+1 −0
Original line number Diff line number Diff line
@@ -1411,6 +1411,7 @@ int esw_offloads_init_reps(struct mlx5_eswitch *esw)

	mlx5_esw_for_all_reps(esw, vport_index, rep) {
		rep->vport = mlx5_eswitch_index_to_vport_num(esw, vport_index);
		rep->vport_index = vport_index;
		ether_addr_copy(rep->hw_id, hw_id);

		for (rep_type = 0; rep_type < NUM_REP_TYPES; rep_type++)
+2 −0
Original line number Diff line number Diff line
@@ -46,6 +46,8 @@ struct mlx5_eswitch_rep {
	u16		       vport;
	u8		       hw_id[ETH_ALEN];
	u16		       vlan;
	/* Only IB rep is using vport_index */
	u16		       vport_index;
	u32		       vlan_refcount;
};