diff options
40 files changed, 192 insertions, 1320 deletions
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/Makefile b/drivers/net/ethernet/mellanox/mlx5/core/Makefile index f36232dead1a..c44870b175f9 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/Makefile +++ b/drivers/net/ethernet/mellanox/mlx5/core/Makefile @@ -29,7 +29,7 @@ mlx5_core-$(CONFIG_MLX5_CORE_EN) += en/rqt.o en/tir.o en/rss.o en/rx_res.o \ en/reporter_tx.o en/reporter_rx.o en/params.o en/xsk/pool.o \ en/xsk/setup.o en/xsk/rx.o en/xsk/tx.o en/devlink.o en/ptp.o \ en/qos.o en/htb.o en/trap.o en/fs_tt_redirect.o en/selq.o \ - en/mgmt_pf.o lib/crypto.o lib/sd.o + lib/crypto.o # # Netdev extra diff --git a/drivers/net/ethernet/mellanox/mlx5/core/dev.c b/drivers/net/ethernet/mellanox/mlx5/core/dev.c index aa1b471e13fa..cf0477f53dc4 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/dev.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/dev.c @@ -190,9 +190,6 @@ bool mlx5_rdma_supported(struct mlx5_core_dev *dev) if (is_mp_supported(dev)) return false; - if (mlx5_core_is_mgmt_pf(dev)) - return false; - return true; } diff --git a/drivers/net/ethernet/mellanox/mlx5/core/ecpf.c b/drivers/net/ethernet/mellanox/mlx5/core/ecpf.c index aa397e3ebe6d..d000236ddbac 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/ecpf.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/ecpf.c @@ -75,9 +75,6 @@ int mlx5_ec_init(struct mlx5_core_dev *dev) if (!mlx5_core_is_ecpf(dev)) return 0; - if (mlx5_core_is_mgmt_pf(dev)) - return 0; - return mlx5_host_pf_init(dev); } @@ -88,9 +85,6 @@ void mlx5_ec_cleanup(struct mlx5_core_dev *dev) if (!mlx5_core_is_ecpf(dev)) return; - if (mlx5_core_is_mgmt_pf(dev)) - return; - mlx5_host_pf_cleanup(dev); err = mlx5_wait_for_pages(dev, &dev->priv.page_counters[MLX5_HOST_PF]); diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en.h b/drivers/net/ethernet/mellanox/mlx5/core/en.h index 922b63c25154..0bfe1ca8a364 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en.h +++ b/drivers/net/ethernet/mellanox/mlx5/core/en.h @@ -60,10 +60,8 @@ #include "lib/clock.h" #include "en/rx_res.h" #include "en/selq.h" -#include "lib/sd.h" extern const struct net_device_ops mlx5e_netdev_ops; -extern const struct net_device_ops mlx5e_mgmt_netdev_ops; struct page_pool; #define MLX5E_METADATA_ETHER_TYPE (0x8CE4) @@ -793,8 +791,6 @@ struct mlx5e_channel { struct hwtstamp_config *tstamp; DECLARE_BITMAP(state, MLX5E_CHANNEL_NUM_STATES); int ix; - int vec_ix; - int sd_ix; int cpu; /* Sync between icosq recovery and XSK enable/disable. */ struct mutex icosq_recovery_lock; @@ -918,7 +914,7 @@ struct mlx5e_priv { bool tx_ptp_opened; bool rx_ptp_opened; struct hwtstamp_config tstamp; - u16 q_counter[MLX5_SD_MAX_GROUP_SZ]; + u16 q_counter; u16 drop_rq_q_counter; struct notifier_block events_nb; struct notifier_block blocking_events_nb; @@ -1033,12 +1029,12 @@ struct mlx5e_xsk_param; struct mlx5e_rq_param; int mlx5e_open_rq(struct mlx5e_params *params, struct mlx5e_rq_param *param, - struct mlx5e_xsk_param *xsk, int node, u16 q_counter, + struct mlx5e_xsk_param *xsk, int node, struct mlx5e_rq *rq); #define MLX5E_RQ_WQES_TIMEOUT 20000 /* msecs */ int mlx5e_wait_for_min_rx_wqes(struct mlx5e_rq *rq, int wait_time); void mlx5e_close_rq(struct mlx5e_rq *rq); -int mlx5e_create_rq(struct mlx5e_rq *rq, struct mlx5e_rq_param *param, u16 q_counter); +int mlx5e_create_rq(struct mlx5e_rq *rq, struct mlx5e_rq_param *param); void mlx5e_destroy_rq(struct mlx5e_rq *rq); struct mlx5e_sq_param; @@ -1126,10 +1122,9 @@ static inline bool mlx5_tx_swp_supported(struct mlx5_core_dev *mdev) } extern const struct ethtool_ops mlx5e_ethtool_ops; -extern const struct mlx5e_profile mlx5e_mgmt_pf_nic_profile; int mlx5e_create_mkey(struct mlx5_core_dev *mdev, u32 pdn, u32 *mkey); -int mlx5e_create_mdev_resources(struct mlx5_core_dev *mdev, bool create_tises); +int mlx5e_create_mdev_resources(struct mlx5_core_dev *mdev); void mlx5e_destroy_mdev_resources(struct mlx5_core_dev *mdev); int mlx5e_refresh_tirs(struct mlx5e_priv *priv, bool enable_uc_lb, bool enable_mc_lb); @@ -1232,8 +1227,6 @@ netdev_features_t mlx5e_features_check(struct sk_buff *skb, struct net_device *netdev, netdev_features_t features); int mlx5e_set_features(struct net_device *netdev, netdev_features_t features); -void mlx5e_nic_set_rx_mode(struct mlx5e_priv *priv); - #ifdef CONFIG_MLX5_ESWITCH int mlx5e_set_vf_mac(struct net_device *dev, int vf, u8 *mac); int mlx5e_set_vf_rate(struct net_device *dev, int vf, int min_tx_rate, int max_tx_rate); diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/channels.c b/drivers/net/ethernet/mellanox/mlx5/core/en/channels.c index 874a1016623c..48581ea3adcb 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en/channels.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en/channels.c @@ -23,26 +23,20 @@ bool mlx5e_channels_is_xsk(struct mlx5e_channels *chs, unsigned int ix) return test_bit(MLX5E_CHANNEL_STATE_XSK, c->state); } -void mlx5e_channels_get_regular_rqn(struct mlx5e_channels *chs, unsigned int ix, u32 *rqn, - u32 *vhca_id) +void mlx5e_channels_get_regular_rqn(struct mlx5e_channels *chs, unsigned int ix, u32 *rqn) { struct mlx5e_channel *c = mlx5e_channels_get(chs, ix); *rqn = c->rq.rqn; - if (vhca_id) - *vhca_id = MLX5_CAP_GEN(c->mdev, vhca_id); } -void mlx5e_channels_get_xsk_rqn(struct mlx5e_channels *chs, unsigned int ix, u32 *rqn, - u32 *vhca_id) +void mlx5e_channels_get_xsk_rqn(struct mlx5e_channels *chs, unsigned int ix, u32 *rqn) { struct mlx5e_channel *c = mlx5e_channels_get(chs, ix); WARN_ON_ONCE(!test_bit(MLX5E_CHANNEL_STATE_XSK, c->state)); *rqn = c->xskrq.rqn; - if (vhca_id) - *vhca_id = MLX5_CAP_GEN(c->mdev, vhca_id); } bool mlx5e_channels_get_ptp_rqn(struct mlx5e_channels *chs, u32 *rqn) diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/channels.h b/drivers/net/ethernet/mellanox/mlx5/core/en/channels.h index 6715aa9383b9..637ca90daaa8 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en/channels.h +++ b/drivers/net/ethernet/mellanox/mlx5/core/en/channels.h @@ -10,10 +10,8 @@ struct mlx5e_channels; unsigned int mlx5e_channels_get_num(struct mlx5e_channels *chs); bool mlx5e_channels_is_xsk(struct mlx5e_channels *chs, unsigned int ix); -void mlx5e_channels_get_regular_rqn(struct mlx5e_channels *chs, unsigned int ix, u32 *rqn, - u32 *vhca_id); -void mlx5e_channels_get_xsk_rqn(struct mlx5e_channels *chs, unsigned int ix, u32 *rqn, - u32 *vhca_id); +void mlx5e_channels_get_regular_rqn(struct mlx5e_channels *chs, unsigned int ix, u32 *rqn); +void mlx5e_channels_get_xsk_rqn(struct mlx5e_channels *chs, unsigned int ix, u32 *rqn); bool mlx5e_channels_get_ptp_rqn(struct mlx5e_channels *chs, u32 *rqn); #endif /* __MLX5_EN_CHANNELS_H__ */ diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/mgmt_pf.c b/drivers/net/ethernet/mellanox/mlx5/core/en/mgmt_pf.c deleted file mode 100644 index 77b5805895b9..000000000000 --- a/drivers/net/ethernet/mellanox/mlx5/core/en/mgmt_pf.c +++ /dev/null @@ -1,268 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB -// Copyright (c) 2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved. - -#include <linux/kernel.h> -#include "en/params.h" -#include "en/health.h" -#include "lib/eq.h" -#include "en/dcbnl.h" -#include "en_accel/ipsec.h" -#include "en_accel/en_accel.h" -#include "en/trap.h" -#include "en/monitor_stats.h" -#include "en/hv_vhca_stats.h" -#include "en_rep.h" -#include "en.h" - -static int mgmt_pf_async_event(struct notifier_block *nb, unsigned long event, void *data) -{ - struct mlx5e_priv *priv = container_of(nb, struct mlx5e_priv, events_nb); - struct mlx5_eqe *eqe = data; - - if (event != MLX5_EVENT_TYPE_PORT_CHANGE) - return NOTIFY_DONE; - - switch (eqe->sub_type) { - case MLX5_PORT_CHANGE_SUBTYPE_DOWN: - case MLX5_PORT_CHANGE_SUBTYPE_ACTIVE: - queue_work(priv->wq, &priv->update_carrier_work); - break; - default: - return NOTIFY_DONE; - } - - return NOTIFY_OK; -} - -static void mlx5e_mgmt_pf_enable_async_events(struct mlx5e_priv *priv) -{ - priv->events_nb.notifier_call = mgmt_pf_async_event; - mlx5_notifier_register(priv->mdev, &priv->events_nb); -} - -static void mlx5e_disable_mgmt_pf_async_events(struct mlx5e_priv *priv) -{ - mlx5_notifier_unregister(priv->mdev, &priv->events_nb); -} - -static void mlx5e_modify_mgmt_pf_admin_state(struct mlx5_core_dev *mdev, - enum mlx5_port_status state) -{ - struct mlx5_eswitch *esw = mdev->priv.eswitch; - int vport_admin_state; - - mlx5_set_port_admin_status(mdev, state); - - if (state == MLX5_PORT_UP) - vport_admin_state = MLX5_VPORT_ADMIN_STATE_AUTO; - else - vport_admin_state = MLX5_VPORT_ADMIN_STATE_DOWN; - - mlx5_eswitch_set_vport_state(esw, MLX5_VPORT_UPLINK, vport_admin_state); -} - -static void mlx5e_build_mgmt_pf_nic_params(struct mlx5e_priv *priv, u16 mtu) -{ - struct mlx5e_params *params = &priv->channels.params; - struct mlx5_core_dev *mdev = priv->mdev; - u8 rx_cq_period_mode; - - params->sw_mtu = mtu; - params->hard_mtu = MLX5E_ETH_HARD_MTU; - params->num_channels = 1; - - /* SQ */ - params->log_sq_size = is_kdump_kernel() ? - MLX5E_PARAMS_MINIMUM_LOG_SQ_SIZE : - MLX5E_PARAMS_DEFAULT_LOG_SQ_SIZE; - MLX5E_SET_PFLAG(params, MLX5E_PFLAG_SKB_TX_MPWQE, mlx5e_tx_mpwqe_supported(mdev)); - - MLX5E_SET_PFLAG(params, MLX5E_PFLAG_RX_NO_CSUM_COMPLETE, false); - - /* RQ */ - mlx5e_build_rq_params(mdev, params); - - /* CQ moderation params */ - rx_cq_period_mode = MLX5_CAP_GEN(mdev, cq_period_start_from_cqe) ? - MLX5_CQ_PERIOD_MODE_START_FROM_CQE : - MLX5_CQ_PERIOD_MODE_START_FROM_EQE; - params->rx_dim_enabled = MLX5_CAP_GEN(mdev, cq_moderation); - params->tx_dim_enabled = MLX5_CAP_GEN(mdev, cq_moderation); - mlx5e_set_rx_cq_mode_params(params, rx_cq_period_mode); - mlx5e_set_tx_cq_mode_params(params, MLX5_CQ_PERIOD_MODE_START_FROM_EQE); - - /* TX inline */ - mlx5_query_min_inline(mdev, ¶ms->tx_min_inline_mode); -} - -static int mlx5e_mgmt_pf_init(struct mlx5_core_dev *mdev, - struct net_device *netdev) -{ - struct mlx5e_priv *priv = netdev_priv(netdev); - struct mlx5e_flow_steering *fs; - int err; - - mlx5e_build_mgmt_pf_nic_params(priv, netdev->mtu); - - mlx5e_timestamp_init(priv); - - fs = mlx5e_fs_init(priv->profile, mdev, - !test_bit(MLX5E_STATE_DESTROYING, &priv->state), - priv->dfs_root); - if (!fs) { - err = -ENOMEM; - mlx5_core_err(mdev, "FS initialization failed, %d\n", err); - return err; - } - priv->fs = fs; - - mlx5e_health_create_reporters(priv); - - return 0; -} - -static void mlx5e_mgmt_pf_cleanup(struct mlx5e_priv *priv) -{ - mlx5e_health_destroy_reporters(priv); - mlx5e_fs_cleanup(priv->fs); - priv->fs = NULL; -} - -static int mlx5e_mgmt_pf_init_rx(struct mlx5e_priv *priv) -{ - struct mlx5_core_dev *mdev = priv->mdev; - int err; - - priv->rx_res = mlx5e_rx_res_create(mdev, 0, priv->max_nch, priv->drop_rq.rqn, - &priv->channels.params.packet_merge, - priv->channels.params.num_channels); - if (!priv->rx_res) - return -ENOMEM; - - mlx5e_create_q_counters(priv); - - err = mlx5e_open_drop_rq(priv, &priv->drop_rq); - if (err) { - mlx5_core_err(mdev, "open drop rq failed, %d\n", err); - goto err_destroy_q_counters; - } - - err = mlx5e_create_flow_steering(priv->fs, priv->rx_res, priv->profile, - priv->netdev); - if (err) { - mlx5_core_warn(mdev, "create flow steering failed, %d\n", err); - goto err_destroy_rx_res; - } - - return 0; - -err_destroy_rx_res: - mlx5e_rx_res_destroy(priv->rx_res); - priv->rx_res = NULL; - mlx5e_close_drop_rq(&priv->drop_rq); -err_destroy_q_counters: - mlx5e_destroy_q_counters(priv); - return err; -} - -static void mlx5e_mgmt_pf_cleanup_rx(struct mlx5e_priv *priv) -{ - mlx5e_destroy_flow_steering(priv->fs, !!(priv->netdev->hw_features & NETIF_F_NTUPLE), - priv->profile); - mlx5e_rx_res_destroy(priv->rx_res); - priv->rx_res = NULL; - mlx5e_close_drop_rq(&priv->drop_rq); - mlx5e_destroy_q_counters(priv); -} - -static int mlx5e_mgmt_pf_init_tx(struct mlx5e_priv *priv) -{ - return 0; -} - -static void mlx5e_mgmt_pf_cleanup_tx(struct mlx5e_priv *priv) -{ -} - -static void mlx5e_mgmt_pf_enable(struct mlx5e_priv *priv) -{ - struct net_device *netdev = priv->netdev; - struct mlx5_core_dev *mdev = priv->mdev; - - mlx5e_fs_init_l2_addr(priv->fs, netdev); - - /* Marking the link as currently not needed by the Driver */ - if (!netif_running(netdev)) - mlx5e_modify_mgmt_pf_admin_state(mdev, MLX5_PORT_DOWN); - - mlx5e_set_netdev_mtu_boundaries(priv); - mlx5e_set_dev_port_mtu(priv); - - mlx5e_mgmt_pf_enable_async_events(priv); - if (mlx5e_monitor_counter_supported(priv)) - mlx5e_monitor_counter_init(priv); - - mlx5e_hv_vhca_stats_create(priv); - if (netdev->reg_state != NETREG_REGISTERED) - return; - mlx5e_dcbnl_init_app(priv); - - mlx5e_nic_set_rx_mode(priv); - - rtnl_lock(); - if (netif_running(netdev)) - mlx5e_open(netdev); - udp_tunnel_nic_reset_ntf(priv->netdev); - netif_device_attach(netdev); - rtnl_unlock(); -} - -static void mlx5e_mgmt_pf_disable(struct mlx5e_priv *priv) -{ - if (priv->netdev->reg_state == NETREG_REGISTERED) - mlx5e_dcbnl_delete_app(priv); - - rtnl_lock(); - if (netif_running(priv->netdev)) - mlx5e_close(priv->netdev); - netif_device_detach(priv->netdev); - rtnl_unlock(); - - mlx5e_nic_set_rx_mode(priv); - - mlx5e_hv_vhca_stats_destroy(priv); - if (mlx5e_monitor_counter_supported(priv)) - mlx5e_monitor_counter_cleanup(priv); - - mlx5e_disable_mgmt_pf_async_events(priv); - mlx5e_ipsec_cleanup(priv); -} - -static int mlx5e_mgmt_pf_update_rx(struct mlx5e_priv *priv) -{ - return mlx5e_refresh_tirs(priv, false, false); -} - -static int mlx5e_mgmt_pf_max_nch_limit(struct mlx5_core_dev *mdev) -{ - return 1; -} - -const struct mlx5e_profile mlx5e_mgmt_pf_nic_profile = { - .init = mlx5e_mgmt_pf_init, - .cleanup = mlx5e_mgmt_pf_cleanup, - .init_rx = mlx5e_mgmt_pf_init_rx, - .cleanup_rx = mlx5e_mgmt_pf_cleanup_rx, - .init_tx = mlx5e_mgmt_pf_init_tx, - .cleanup_tx = mlx5e_mgmt_pf_cleanup_tx, - .enable = mlx5e_mgmt_pf_enable, - .disable = mlx5e_mgmt_pf_disable, - .update_rx = mlx5e_mgmt_pf_update_rx, - .update_stats = mlx5e_stats_update_ndo_stats, - .update_carrier = mlx5e_update_carrier, - .rx_handlers = &mlx5e_rx_handlers_nic, - .max_tc = 1, - .max_nch_limit = mlx5e_mgmt_pf_max_nch_limit, - .stats_grps = mlx5e_nic_stats_grps, - .stats_grps_num = mlx5e_nic_stats_grps_num -}; diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/monitor_stats.c b/drivers/net/ethernet/mellanox/mlx5/core/en/monitor_stats.c index e2d8d2754be0..40c8df111754 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en/monitor_stats.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en/monitor_stats.c @@ -20,8 +20,10 @@ #define NUM_REQ_PPCNT_COUNTER_S1 MLX5_CMD_SET_MONITOR_NUM_PPCNT_COUNTER_SET1 #define NUM_REQ_Q_COUNTERS_S1 MLX5_CMD_SET_MONITOR_NUM_Q_COUNTERS_SET1 -static int mlx5e_monitor_counter_cap(struct mlx5_core_dev *mdev) +int mlx5e_monitor_counter_supported(struct mlx5e_priv *priv) { + struct mlx5_core_dev *mdev = priv->mdev; + if (!MLX5_CAP_GEN(mdev, max_num_of_monitor_counters)) return false; if (MLX5_CAP_PCAM_REG(mdev, ppcnt) && @@ -34,38 +36,24 @@ static int mlx5e_monitor_counter_cap(struct mlx5_core_dev *mdev) return true; } -int mlx5e_monitor_counter_supported(struct mlx5e_priv *priv) -{ - struct mlx5_core_dev *pos; - int i; - - mlx5_sd_for_each_dev(i, priv->mdev, pos) - if (!mlx5e_monitor_counter_cap(pos)) - return false; - return true; -} - -static void mlx5e_monitor_counter_arm(struct mlx5_core_dev *mdev) +static void mlx5e_monitor_counter_arm(struct mlx5e_priv *priv) { u32 in[MLX5_ST_SZ_DW(arm_monitor_counter_in)] = {}; MLX5_SET(arm_monitor_counter_in, in, opcode, MLX5_CMD_OP_ARM_MONITOR_COUNTER); - mlx5_cmd_exec_in(mdev, arm_monitor_counter, in); + mlx5_cmd_exec_in(priv->mdev, arm_monitor_counter, in); } static void mlx5e_monitor_counters_work(struct work_struct *work) { struct mlx5e_priv *priv = container_of(work, struct mlx5e_priv, monitor_counters_work); - struct mlx5_core_dev *pos; - int i; mutex_lock(&priv->state_lock); mlx5e_stats_update_ndo_stats(priv); mutex_unlock(&priv->state_lock); - mlx5_sd_for_each_dev(i, priv->mdev, pos) - mlx5e_monitor_counter_arm(pos); + mlx5e_monitor_counter_arm(priv); } static int mlx5e_monitor_event_handler(struct notifier_block *nb, @@ -109,13 +97,15 @@ static int fill_monitor_counter_q_counter_set1(int cnt, int q_counter, u32 *in) } /* check if mlx5e_monitor_counter_supported before calling this function*/ -static void mlx5e_set_monitor_counter(struct mlx5_core_dev *mdev, int q_counter) +static void mlx5e_set_monitor_counter(struct mlx5e_priv *priv) { + struct mlx5_core_dev *mdev = priv->mdev; int max_num_of_counters = MLX5_CAP_GEN(mdev, max_num_of_monitor_counters); int num_q_counters = MLX5_CAP_GEN(mdev, num_q_monitor_counters); int num_ppcnt_counters = !MLX5_CAP_PCAM_REG(mdev, ppcnt) ? 0 : MLX5_CAP_GEN(mdev, num_ppcnt_monitor_counters); u32 in[MLX5_ST_SZ_DW(set_monitor_counter_in)] = {}; + int q_counter = priv->q_counter; int cnt = 0; if (num_ppcnt_counters >= NUM_REQ_PPCNT_COUNTER_S1 && @@ -137,17 +127,13 @@ static void mlx5e_set_monitor_counter(struct mlx5_core_dev *mdev, int q_counter) /* check if mlx5e_monitor_counter_supported before calling this function*/ void mlx5e_monitor_counter_init(struct mlx5e_priv *priv) { - struct mlx5_core_dev *pos; - int i; - INIT_WORK(&priv->monitor_counters_work, mlx5e_monitor_counters_work); MLX5_NB_INIT(&priv->monitor_counters_nb, mlx5e_monitor_event_handler, MONITOR_COUNTER); - mlx5_sd_for_each_dev(i, priv->mdev, pos) { - mlx5_eq_notifier_register(pos, &priv->monitor_counters_nb); - mlx5e_set_monitor_counter(pos, priv->q_counter[i]); - mlx5e_monitor_counter_arm(pos); - } + mlx5_eq_notifier_register(priv->mdev, &priv->monitor_counters_nb); + + mlx5e_set_monitor_counter(priv); + mlx5e_monitor_counter_arm(priv); queue_work(priv->wq, &priv->update_stats_work); } @@ -155,15 +141,11 @@ void mlx5e_monitor_counter_init(struct mlx5e_priv *priv) void mlx5e_monitor_counter_cleanup(struct mlx5e_priv *priv) { u32 in[MLX5_ST_SZ_DW(set_monitor_counter_in)] = {}; - struct mlx5_core_dev *pos; - int i; MLX5_SET(set_monitor_counter_in, in, opcode, MLX5_CMD_OP_SET_MONITOR_COUNTER); - mlx5_sd_for_each_dev(i, priv->mdev, pos) { - mlx5_cmd_exec_in(pos, set_monitor_counter, in); - mlx5_eq_notifier_unregister(pos, &priv->monitor_counters_nb); - } + mlx5_cmd_exec_in(priv->mdev, set_monitor_counter, in); + mlx5_eq_notifier_unregister(priv->mdev, &priv->monitor_counters_nb); cancel_work_sync(&priv->monitor_counters_work); } diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/params.c b/drivers/net/ethernet/mellanox/mlx5/core/en/params.c index fb10bb166fbb..284253b79266 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en/params.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en/params.c @@ -674,7 +674,7 @@ void mlx5e_build_create_cq_param(struct mlx5e_create_cq_param *ccp, struct mlx5e .napi = &c->napi, .ch_stats = c->stats, .node = cpu_to_node(c->cpu), - .ix = c->vec_ix, + .ix = c->ix, }; } @@ -945,6 +945,7 @@ static u8 rq_end_pad_mode(struct mlx5_core_dev *mdev, struct mlx5e_params *param int mlx5e_build_rq_param(struct mlx5_core_dev *mdev, struct mlx5e_params *params, struct mlx5e_xsk_param *xsk, + u16 q_counter, struct mlx5e_rq_param *param) { void *rqc = param->rqc; @@ -1006,6 +1007,7 @@ int mlx5e_build_rq_param(struct mlx5_core_dev *mdev, MLX5_SET(wq, wq, log_wq_stride, mlx5e_get_rqwq_log_stride(params->rq_wq_type, ndsegs)); MLX5_SET(wq, wq, pd, mdev->mlx5e_res.hw_objs.pdn); + MLX5_SET(rqc, rqc, counter_set_id, q_counter); MLX5_SET(rqc, rqc, vsd, params->vlan_strip_disable); MLX5_SET(rqc, rqc, scatter_fcs, params->scatter_fcs_en); @@ -1016,6 +1018,7 @@ int mlx5e_build_rq_param(struct mlx5_core_dev *mdev, } void mlx5e_build_drop_rq_param(struct mlx5_core_dev *mdev, + u16 q_counter, struct mlx5e_rq_param *param) { void *rqc = param->rqc; @@ -1024,6 +1027,7 @@ void mlx5e_build_drop_rq_param(struct mlx5_core_dev *mdev, MLX5_SET(wq, wq, wq_type, MLX5_WQ_TYPE_CYCLIC); MLX5_SET(wq, wq, log_wq_stride, mlx5e_get_rqwq_log_stride(MLX5_WQ_TYPE_CYCLIC, 1)); + MLX5_SET(rqc, rqc, counter_set_id, q_counter); param->wq.buf_numa_node = dev_to_node(mlx5_core_dma_dev(mdev)); } @@ -1288,12 +1292,13 @@ void mlx5e_build_xdpsq_param(struct mlx5_core_dev *mdev, int mlx5e_build_channel_param(struct mlx5_core_dev *mdev, struct mlx5e_params *params, + u16 q_counter, struct mlx5e_channel_param *cparam) { u8 icosq_log_wq_sz, async_icosq_log_wq_sz; int err; - err = mlx5e_build_rq_param(mdev, params, NULL, &cparam->rq); + err = mlx5e_build_rq_param(mdev, params, NULL, q_counter, &cparam->rq); if (err) return err; diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/params.h b/drivers/net/ethernet/mellanox/mlx5/core/en/params.h index 9a781f18b57f..6800949dafbc 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en/params.h +++ b/drivers/net/ethernet/mellanox/mlx5/core/en/params.h @@ -130,8 +130,10 @@ void mlx5e_build_create_cq_param(struct mlx5e_create_cq_param *ccp, struct mlx5e int mlx5e_build_rq_param(struct mlx5_core_dev *mdev, struct mlx5e_params *params, struct mlx5e_xsk_param *xsk, + u16 q_counter, struct mlx5e_rq_param *param); void mlx5e_build_drop_rq_param(struct mlx5_core_dev *mdev, + u16 q_counter, struct mlx5e_rq_param *param); void mlx5e_build_sq_param_common(struct mlx5_core_dev *mdev, struct mlx5e_sq_param *param); @@ -147,6 +149,7 @@ void mlx5e_build_xdpsq_param(struct mlx5_core_dev *mdev, struct mlx5e_sq_param *param); int mlx5e_build_channel_param(struct mlx5_core_dev *mdev, struct mlx5e_params *params, + u16 q_counter, struct mlx5e_channel_param *cparam); u16 mlx5e_calc_sq_stop_room(struct mlx5_core_dev *mdev, struct mlx5e_params *params); diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/ptp.c b/drivers/net/ethernet/mellanox/mlx5/core/en/ptp.c index cafb41895f94..c206cc0a8483 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en/ptp.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en/ptp.c @@ -646,6 +646,7 @@ static void mlx5e_ptp_build_sq_param(struct mlx5_core_dev *mdev, static void mlx5e_ptp_build_rq_param(struct mlx5_core_dev *mdev, struct net_device *netdev, + u16 q_counter, struct mlx5e_ptp_params *ptp_params) { struct mlx5e_rq_param *rq_params = &ptp_params->rq_param; @@ -654,7 +655,7 @@ static void mlx5e_ptp_build_rq_param(struct mlx5_core_dev *mdev, params->rq_wq_type = MLX5_WQ_TYPE_CYCLIC; mlx5e_init_rq_type_params(mdev, params); params->sw_mtu = netdev->max_mtu; - mlx5e_build_rq_param(mdev, params, NULL, rq_params); + mlx5e_build_rq_param(mdev, params, NULL, q_counter, rq_params); } static void mlx5e_ptp_build_params(struct mlx5e_ptp *c, @@ -680,7 +681,7 @@ static void mlx5e_ptp_build_params(struct mlx5e_ptp *c, /* RQ */ if (test_bit(MLX5E_PTP_STATE_RX, c->state)) { params->vlan_strip_disable = orig->vlan_strip_disable; - mlx5e_ptp_build_rq_param(c->mdev, c->netdev, cparams); + mlx5e_ptp_build_rq_param(c->mdev, c->netdev, c->priv->q_counter, cparams); } } @@ -713,16 +714,13 @@ static int mlx5e_ptp_open_rq(struct mlx5e_ptp *c, struct mlx5e_params *params, struct mlx5e_rq_param *rq_param) { int node = dev_to_node(c->mdev->device); - int err, sd_ix; - u16 q_counter; + int err; err = mlx5e_init_ptp_rq(c, params, &c->rq); |
