Commit b545a13c authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files

Merge tag 'mlx5-updates-2023-06-21' of git://git.kernel.org/pub/scm/linux/kernel/git/saeed/linux

Saeed Mahameed says:

====================
mlx5-updates-2023-06-21

mlx5 driver minor cleanup and fixes to net-next

* tag 'mlx5-updates-2023-06-21' of git://git.kernel.org/pub/scm/linux/kernel/git/saeed/linux:
  net/mlx5: Remove pointless vport lookup from mlx5_esw_check_port_type()
  net/mlx5: Remove redundant check from mlx5_esw_query_vport_vhca_id()
  net/mlx5: Remove redundant is_mdev_switchdev_mode() check from is_ib_rep_supported()
  net/mlx5: Remove redundant MLX5_ESWITCH_MANAGER() check from is_ib_rep_supported()
  net/mlx5e: E-Switch, Fix shared fdb error flow
  net/mlx5e: Remove redundant comment
  net/mlx5e: E-Switch, Pass other_vport flag if vport is not 0
  net/mlx5e: E-Switch, Use xarray for devcom paired device index
  net/mlx5e: E-Switch, Add peer fdb miss rules for vport manager or ecpf
  net/mlx5e: Use vhca_id for device index in vport rx rules
  net/mlx5: Lag, Remove duplicate code checking lag is supported
  net/mlx5: Fix error code in mlx5_is_reset_now_capable()
  net/mlx5: Fix reserved at offset in hca_cap register
  net/mlx5: Fix SFs kernel documentation error
  net/mlx5: Fix UAF in mlx5_eswitch_cleanup()
====================

Link: https://lore.kernel.org/r/20230623192907.39033-1-saeed@kernel.org


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parents 35bf34b0 29e4c95f
Loading
Loading
Loading
Loading
+12 −10
Original line number Diff line number Diff line
@@ -51,19 +51,21 @@ This will allow user to configure the SF before the SF have been fully probed,
which will save time.

Usage example:
Create SF:

- Create SF::

    $ devlink port add pci/0000:08:00.0 flavour pcisf pfnum 0 sfnum 11
$ devlink port function set pci/0000:08:00.0/32768 \
               hw_addr 00:00:00:00:00:11 state active
    $ devlink port function set pci/0000:08:00.0/32768 hw_addr 00:00:00:00:00:11 state active

- Enable ETH auxiliary device::

    $ devlink dev param set auxiliary/mlx5_core.sf.1 name enable_eth value true cmode driverinit

Enable ETH auxiliary device:
$ devlink dev param set auxiliary/mlx5_core.sf.1 \
              name enable_eth value true cmode driverinit
- Now, in order to fully probe the SF, use devlink reload::

Now, in order to fully probe the SF, use devlink reload:
    $ devlink dev reload auxiliary/mlx5_core.sf.1

mlx5 supports ETH,rdma and vdpa (vnet) auxiliary devices devlink params (see :ref:`Documentation/networking/devlink/devlink-params.rst`)
mlx5 supports ETH,rdma and vdpa (vnet) auxiliary devices devlink params (see :ref:`Documentation/networking/devlink/devlink-params.rst <devlink_params_generic>`).

mlx5 supports subfunction management using devlink port (see :ref:`Documentation/networking/devlink/devlink-port.rst <devlink_port>`) interface.

+0 −6
Original line number Diff line number Diff line
@@ -151,12 +151,6 @@ static bool is_ib_rep_supported(struct mlx5_core_dev *dev)
	if (!is_eth_rep_supported(dev))
		return false;

	if (!MLX5_ESWITCH_MANAGER(dev))
		return false;

	if (!is_mdev_switchdev_mode(dev))
		return false;

	if (mlx5_core_mp_enabled(dev))
		return false;

+3 −3
Original line number Diff line number Diff line
@@ -408,7 +408,7 @@ static int mlx5e_sqs2vport_add_peers_rules(struct mlx5_eswitch *esw, struct mlx5

	mlx5_devcom_for_each_peer_entry(devcom, MLX5_DEVCOM_ESW_OFFLOADS,
					peer_esw, tmp) {
		int peer_rule_idx = mlx5_get_dev_index(peer_esw->dev);
		u16 peer_rule_idx = MLX5_CAP_GEN(peer_esw->dev, vhca_id);
		struct mlx5e_rep_sq_peer *sq_peer;
		int err;

@@ -1581,7 +1581,7 @@ static void *mlx5e_vport_rep_get_proto_dev(struct mlx5_eswitch_rep *rep)
static void mlx5e_vport_rep_event_unpair(struct mlx5_eswitch_rep *rep,
					 struct mlx5_eswitch *peer_esw)
{
	int i = mlx5_get_dev_index(peer_esw->dev);
	u16 i = MLX5_CAP_GEN(peer_esw->dev, vhca_id);
	struct mlx5e_rep_priv *rpriv;
	struct mlx5e_rep_sq *rep_sq;

@@ -1603,7 +1603,7 @@ static int mlx5e_vport_rep_event_pair(struct mlx5_eswitch *esw,
				      struct mlx5_eswitch_rep *rep,
				      struct mlx5_eswitch *peer_esw)
{
	int i = mlx5_get_dev_index(peer_esw->dev);
	u16 i = MLX5_CAP_GEN(peer_esw->dev, vhca_id);
	struct mlx5_flow_handle *flow_rule;
	struct mlx5e_rep_sq_peer *sq_peer;
	struct mlx5e_rep_priv *rpriv;
+8 −16
Original line number Diff line number Diff line
@@ -1751,16 +1751,14 @@ int mlx5_eswitch_init(struct mlx5_core_dev *dev)
	if (!MLX5_VPORT_MANAGER(dev) && !MLX5_ESWITCH_MANAGER(dev))
		return 0;

	esw = kzalloc(sizeof(*esw), GFP_KERNEL);
	if (!esw)
		return -ENOMEM;

	err = devl_params_register(priv_to_devlink(dev), mlx5_eswitch_params,
				   ARRAY_SIZE(mlx5_eswitch_params));
	if (err)
		return err;

	esw = kzalloc(sizeof(*esw), GFP_KERNEL);
	if (!esw) {
		err = -ENOMEM;
		goto unregister_param;
	}
		goto free_esw;

	esw->dev = dev;
	esw->manager_vport = mlx5_eswitch_manager_vport(dev);
@@ -1821,10 +1819,10 @@ int mlx5_eswitch_init(struct mlx5_core_dev *dev)
	if (esw->work_queue)
		destroy_workqueue(esw->work_queue);
	debugfs_remove_recursive(esw->debugfs_root);
	kfree(esw);
unregister_param:
	devl_params_unregister(priv_to_devlink(dev), mlx5_eswitch_params,
			       ARRAY_SIZE(mlx5_eswitch_params));
free_esw:
	kfree(esw);
	return err;
}

@@ -1848,9 +1846,9 @@ void mlx5_eswitch_cleanup(struct mlx5_eswitch *esw)
	esw_offloads_cleanup(esw);
	mlx5_esw_vports_cleanup(esw);
	debugfs_remove_recursive(esw->debugfs_root);
	kfree(esw);
	devl_params_unregister(priv_to_devlink(esw->dev), mlx5_eswitch_params,
			       ARRAY_SIZE(mlx5_eswitch_params));
	kfree(esw);
}

/* Vport Administration */
@@ -1910,12 +1908,6 @@ int mlx5_eswitch_set_vport_mac(struct mlx5_eswitch *esw,

static bool mlx5_esw_check_port_type(struct mlx5_eswitch *esw, u16 vport_num, xa_mark_t mark)
{
	struct mlx5_vport *vport;

	vport = mlx5_eswitch_get_vport(esw, vport_num);
	if (IS_ERR(vport))
		return false;

	return xa_get_mark(&esw->vports, vport_num, mark);
}

+1 −1
Original line number Diff line number Diff line
@@ -353,7 +353,7 @@ struct mlx5_eswitch {
		u32             large_group_num;
	}  params;
	struct blocking_notifier_head n_head;
	bool paired[MLX5_MAX_PORTS];
	struct xarray paired;
};

void esw_offloads_disable(struct mlx5_eswitch *esw);
Loading