]> git.itanic.dy.fi Git - linux-stable/commitdiff
Revert "mlx5 updates 2023-12-20"
authorJakub Kicinski <kuba@kernel.org>
Mon, 8 Jan 2024 01:14:51 +0000 (17:14 -0800)
committerJakub Kicinski <kuba@kernel.org>
Mon, 8 Jan 2024 01:16:11 +0000 (17:16 -0800)
Revert "net/mlx5: Implement management PF Ethernet profile"
This reverts commit 22c4640698a1d47606b5a4264a584e8046641784.
Revert "net/mlx5: Enable SD feature"
This reverts commit c88c49ac9c18fb7c3fa431126de1d8f8f555e912.
Revert "net/mlx5e: Block TLS device offload on combined SD netdev"
This reverts commit 83a59ce0057b7753d7fbece194b89622c663b2a6.
Revert "net/mlx5e: Support per-mdev queue counter"
This reverts commit d72baceb92539a178d2610b0e9ceb75706a75b55.
Revert "net/mlx5e: Support cross-vhca RSS"
This reverts commit c73a3ab8fa6e93a783bd563938d7cf00d62d5d34.
Revert "net/mlx5e: Let channels be SD-aware"
This reverts commit e4f9686bdee7b4dd89e0ed63cd03606e4bda4ced.
Revert "net/mlx5e: Create EN core HW resources for all secondary devices"
This reverts commit c4fb94aa822d6c9d05fc3c5aee35c7e339061dc1.
Revert "net/mlx5e: Create single netdev per SD group"
This reverts commit e2578b4f983cfcd47837bbe3bcdbf5920e50b2ad.
Revert "net/mlx5: SD, Add informative prints in kernel log"
This reverts commit c82d360325112ccc512fc11a3b68cdcdf04a1478.
Revert "net/mlx5: SD, Implement steering for primary and secondaries"
This reverts commit 605fcce33b2d1beb0139b6e5913fa0b2062116b2.
Revert "net/mlx5: SD, Implement devcom communication and primary election"
This reverts commit a45af9a96740873db9a4b5bb493ce2ad81ccb4d5.
Revert "net/mlx5: SD, Implement basic query and instantiation"
This reverts commit 63b9ce944c0e26c44c42cdd5095c2e9851c1a8ff.
Revert "net/mlx5: SD, Introduce SD lib"
This reverts commit 4a04a31f49320d078b8078e1da4b0e2faca5dfa3.
Revert "net/mlx5: Fix query of sd_group field"
This reverts commit e04984a37398b3f4f5a79c993b94c6b1224184cc.
Revert "net/mlx5e: Use the correct lag ports number when creating TISes"
This reverts commit a7e7b40c4bc115dbf2a2bb453d7bbb2e0ea99703.

There are some unanswered questions on the list, and we don't
have any docs. Given the lack of replies so far and the fact
that v6.8 merge window has started - let's revert this and
revisit for v6.9.

Link: https://lore.kernel.org/all/20231221005721.186607-1-saeed@kernel.org/
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
40 files changed:
drivers/net/ethernet/mellanox/mlx5/core/Makefile
drivers/net/ethernet/mellanox/mlx5/core/dev.c
drivers/net/ethernet/mellanox/mlx5/core/ecpf.c
drivers/net/ethernet/mellanox/mlx5/core/en.h
drivers/net/ethernet/mellanox/mlx5/core/en/channels.c
drivers/net/ethernet/mellanox/mlx5/core/en/channels.h
drivers/net/ethernet/mellanox/mlx5/core/en/mgmt_pf.c [deleted file]
drivers/net/ethernet/mellanox/mlx5/core/en/monitor_stats.c
drivers/net/ethernet/mellanox/mlx5/core/en/params.c
drivers/net/ethernet/mellanox/mlx5/core/en/params.h
drivers/net/ethernet/mellanox/mlx5/core/en/ptp.c
drivers/net/ethernet/mellanox/mlx5/core/en/qos.c
drivers/net/ethernet/mellanox/mlx5/core/en/reporter_rx.c
drivers/net/ethernet/mellanox/mlx5/core/en/reporter_tx.c
drivers/net/ethernet/mellanox/mlx5/core/en/rqt.c
drivers/net/ethernet/mellanox/mlx5/core/en/rqt.h
drivers/net/ethernet/mellanox/mlx5/core/en/rss.c
drivers/net/ethernet/mellanox/mlx5/core/en/rss.h
drivers/net/ethernet/mellanox/mlx5/core/en/rx_res.c
drivers/net/ethernet/mellanox/mlx5/core/en/rx_res.h
drivers/net/ethernet/mellanox/mlx5/core/en/trap.c
drivers/net/ethernet/mellanox/mlx5/core/en/xsk/pool.c
drivers/net/ethernet/mellanox/mlx5/core/en/xsk/setup.c
drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls.c
drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls.h
drivers/net/ethernet/mellanox/mlx5/core/en_accel/ktls_rx.c
drivers/net/ethernet/mellanox/mlx5/core/en_common.c
drivers/net/ethernet/mellanox/mlx5/core/en_main.c
drivers/net/ethernet/mellanox/mlx5/core/en_stats.c
drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
drivers/net/ethernet/mellanox/mlx5/core/eswitch.c
drivers/net/ethernet/mellanox/mlx5/core/ipoib/ipoib.c
drivers/net/ethernet/mellanox/mlx5/core/lib/devcom.h
drivers/net/ethernet/mellanox/mlx5/core/lib/mlx5.h
drivers/net/ethernet/mellanox/mlx5/core/lib/sd.c [deleted file]
drivers/net/ethernet/mellanox/mlx5/core/lib/sd.h [deleted file]
drivers/net/ethernet/mellanox/mlx5/core/vport.c
include/linux/mlx5/driver.h
include/linux/mlx5/mlx5_ifc.h
include/linux/mlx5/vport.h

index f36232dead1a3ffc702f06dab0c9093bffb6511c..c44870b175f9db28f762d6604cd99441d5f3ce62 100644 (file)
@@ -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
index aa1b471e13fad2cfd584b08028f66e35e02169f2..cf0477f53dc4d582bce94b8b08ca1e59216830aa 100644 (file)
@@ -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;
 }
 
index aa397e3ebe6d2bed118bdb242593d9e4866cb782..d000236ddbac5a0a4384bd4b8b1149db449f1da1 100644 (file)
@@ -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]);
index 922b63c25154db6e6dd5736ca56e887acfcec361..0bfe1ca8a364233a1d6fb92846d5b54d07d2bcdc 100644 (file)
 #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);
index 874a1016623c68ebac357f9305eb605d8db0bb9f..48581ea3adcb8e33430a22323f90551a0e4763a7 100644 (file)
@@ -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)
index 6715aa9383b94743f74b64016afbd07e9fa53f73..637ca90daaa81e5a88fce08741c6cc459b5d8f31 100644 (file)
@@ -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 (file)
index 77b5805..0000000
+++ /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, &params->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
-};
index e2d8d2754be0576b5b10e069773d3eed9569484b..40c8df111754fdf487a6bce1d5cce26f898d015b 100644 (file)
 #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);
 }
index fb10bb166fbbdffbdd1a4536205d2c918c0983df..284253b79266b937f4d654361c7b891278e9fda9 100644 (file)
@@ -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;
 
index 9a781f18b57fc8f0014eeeeeaf2d26d7633657e1..6800949dafbc99b0b530ec9d8dcda89179dd1e1e 100644 (file)
@@ -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);
index cafb41895f9437a9d25b7f0132b749392721061f..c206cc0a84832e6ebf104cc92990c43a81e94d60 100644 (file)
@@ -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);
        if (err)
                return err;
 
-       sd_ix = mlx5_sd_ch_ix_get_dev_ix(c->mdev, MLX5E_PTP_CHANNEL_IX);
-       q_counter = c->priv->q_counter[sd_ix];
-       return mlx5e_open_rq(params, rq_param, NULL, node, q_counter, &c->rq);
+       return mlx5e_open_rq(params, rq_param, NULL, node, &c->rq);
 }
 
 static int mlx5e_ptp_open_queues(struct mlx5e_ptp *c,
index e87e26f2c669c2e39f59a9f656e643fce2b48aae..34adf8c3f81a08d53d4d215aab68a893fd2da354 100644 (file)
@@ -122,8 +122,8 @@ int mlx5e_open_qos_sq(struct mlx5e_priv *priv, struct mlx5e_channels *chs,
 
        memset(&param_sq, 0, sizeof(param_sq));
        memset(&param_cq, 0, sizeof(param_cq));
-       mlx5e_build_sq_param(c->mdev, params, &param_sq);
-       mlx5e_build_tx_cq_param(c->mdev, params, &param_cq);
+       mlx5e_build_sq_param(priv->mdev, params, &param_sq);
+       mlx5e_build_tx_cq_param(priv->mdev, params, &param_cq);
        err = mlx5e_open_cq(c->mdev, params->tx_cq_moderation, &param_cq, &ccp, &sq->cq);
        if (err)
                goto err_free_sq;
@@ -176,7 +176,7 @@ int mlx5e_activate_qos_sq(void *data, u16 node_qid, u32 hw_id)
         */
        smp_wmb();
 
-       qos_dbg(sq->mdev, "Activate QoS SQ qid %u\n", node_qid);
+       qos_dbg(priv->mdev, "Activate QoS SQ qid %u\n", node_qid);
        mlx5e_activate_txqsq(sq);
 
        return 0;
@@ -190,7 +190,7 @@ void mlx5e_deactivate_qos_sq(struct mlx5e_priv *priv, u16 qid)
        if (!sq) /* Handle the case when the SQ failed to open. */
                return;
 
-       qos_dbg(sq->mdev, "Deactivate QoS SQ qid %u\n", qid);
+       qos_dbg(priv->mdev, "Deactivate QoS SQ qid %u\n", qid);
        mlx5e_deactivate_txqsq(sq);
 
        priv->txq2sq[mlx5e_qid_from_qos(&priv->channels, qid)] = NULL;
index 25d751eba99ba207b30c108493e032380fd684b8..4358798d6ce14a1ff41245a8b9ea043cde249fa9 100644 (file)
@@ -294,8 +294,8 @@ static void mlx5e_rx_reporter_diagnose_generic_rq(struct mlx5e_rq *rq,
 
        params = &priv->channels.params;
        rq_sz = mlx5e_rqwq_get_size(rq);
-       real_time =  mlx5_is_real_time_rq(rq->mdev);
-       rq_stride = BIT(mlx5e_mpwqe_get_log_stride_size(rq->mdev, params, NULL));
+       real_time =  mlx5_is_real_time_rq(priv->mdev);
+       rq_stride = BIT(mlx5e_mpwqe_get_log_stride_size(priv->mdev, params, NULL));
 
        mlx5e_health_fmsg_named_obj_nest_start(fmsg, "RQ");
        devlink_fmsg_u8_pair_put(fmsg, "type", params->rq_wq_type);
index 0ab9db319530258fab6c7e6ad5648e13550069f8..6b44ddce14e9840531da0fa3d952e2a298edf302 100644 (file)
@@ -219,6 +219,7 @@ mlx5e_tx_reporter_build_diagnose_output_sq_common(struct devlink_fmsg *fmsg,
                                                  struct mlx5e_txqsq *sq, int tc)
 {
        bool stopped = netif_xmit_stopped(sq->txq);
+       struct mlx5e_priv *priv = sq->priv;
        u8 state;
        int err;
 
@@ -226,7 +227,7 @@ mlx5e_tx_reporter_build_diagnose_output_sq_common(struct devlink_fmsg *fmsg,
        devlink_fmsg_u32_pair_put(fmsg, "txq ix", sq->txq_ix);
        devlink_fmsg_u32_pair_put(fmsg, "sqn", sq->sqn);
 
-       err = mlx5_core_query_sq_state(sq->mdev, sq->sqn, &state);
+       err = mlx5_core_query_sq_state(priv->mdev, sq->sqn, &state);
        if (!err)
                devlink_fmsg_u8_pair_put(fmsg, "HW state", state);
 
index bcafb4bf94154ff01969fc851852d4234f5b0c04..7b8ff7a710033cc352805d047188a2745343b590 100644 (file)
@@ -4,33 +4,6 @@
 #include "rqt.h"
 #include <linux/mlx5/transobj.h>
 
-static bool verify_num_vhca_ids(struct mlx5_core_dev *mdev, u32 *vhca_ids,
-                               unsigned int size)
-{
-       unsigned int max_num_vhca_id = MLX5_CAP_GEN_2(mdev, max_rqt_vhca_id);
-       int i;
-
-       /* Verify that all vhca_ids are in range [0, max_num_vhca_ids - 1] */
-       for (i = 0; i < size; i++)
-               if (vhca_ids[i] >= max_num_vhca_id)
-                       return false;
-       return true;
-}
-
-static bool rqt_verify_vhca_ids(struct mlx5_core_dev *mdev, u32 *vhca_ids,
-                               unsigned int size)
-{
-       if (!vhca_ids)
-               return true;
-
-       if (!MLX5_CAP_GEN(mdev, cross_vhca_rqt))
-               return false;
-       if (!verify_num_vhca_ids(mdev, vhca_ids, size))
-               return false;
-
-       return true;
-}
-
 void mlx5e_rss_params_indir_init_uniform(struct mlx5e_rss_params_indir *indir,
                                         unsigned int num_channels)
 {
@@ -40,38 +13,19 @@ void mlx5e_rss_params_indir_init_uniform(struct mlx5e_rss_params_indir *indir,
                indir->table[i] = i % num_channels;
 }
 
-static void fill_rqn_list(void *rqtc, u32 *rqns, u32 *vhca_ids, unsigned int size)
-{
-       unsigned int i;
-
-       if (vhca_ids) {
-               MLX5_SET(rqtc, rqtc, rq_vhca_id_format, 1);
-               for (i = 0; i < size; i++) {
-                       MLX5_SET(rqtc, rqtc, rq_vhca[i].rq_num, rqns[i]);
-                       MLX5_SET(rqtc, rqtc, rq_vhca[i].rq_vhca_id, vhca_ids[i]);
-               }
-       } else {
-               for (i = 0; i < size; i++)
-                       MLX5_SET(rqtc, rqtc, rq_num[i], rqns[i]);
-       }
-}
 static int mlx5e_rqt_init(struct mlx5e_rqt *rqt, struct mlx5_core_dev *mdev,
-                         u16 max_size, u32 *init_rqns, u32 *init_vhca_ids, u16 init_size)
+                         u16 max_size, u32 *init_rqns, u16 init_size)
 {
-       int entry_sz;
        void *rqtc;
        int inlen;
        int err;
        u32 *in;
-
-       if (!rqt_verify_vhca_ids(mdev, init_vhca_ids, init_size))
-               return -EOPNOTSUPP;
+       int i;
 
        rqt->mdev = mdev;
        rqt->size = max_size;
 
-       entry_sz = init_vhca_ids ? MLX5_ST_SZ_BYTES(rq_vhca) : MLX5_ST_SZ_BYTES(rq_num);
-       inlen = MLX5_ST_SZ_BYTES(create_rqt_in) + entry_sz * init_size;
+       inlen = MLX5_ST_SZ_BYTES(create_rqt_in) + sizeof(u32) * init_size;
        in = kvzalloc(inlen, GFP_KERNEL);
        if (!in)
                return -ENOMEM;
@@ -79,9 +33,10 @@ static int mlx5e_rqt_init(struct mlx5e_rqt *rqt, struct mlx5_core_dev *mdev,
        rqtc = MLX5_ADDR_OF(create_rqt_in, in, rqt_context);
 
        MLX5_SET(rqtc, rqtc, rqt_max_size, rqt->size);
-       MLX5_SET(rqtc, rqtc, rqt_actual_size, init_size);
 
-       fill_rqn_list(rqtc, init_rqns, init_vhca_ids, init_size);
+       MLX5_SET(rqtc, rqtc, rqt_actual_size, init_size);
+       for (i = 0; i < init_size; i++)
+               MLX5_SET(rqtc, rqtc, rq_num[i], init_rqns[i]);
 
        err = mlx5_core_create_rqt(rqt->mdev, in, inlen, &rqt->rqtn);
 
@@ -94,7 +49,7 @@ int mlx5e_rqt_init_direct(struct mlx5e_rqt *rqt, struct mlx5_core_dev *mdev,
 {
        u16 max_size = indir_enabled ? indir_table_size : 1;
 
-       return mlx5e_rqt_init(rqt, mdev, max_size, &init_rqn, NULL, 1);
+       return mlx5e_rqt_init(rqt, mdev, max_size, &init_rqn, 1);
 }
 
 static int mlx5e_bits_invert(unsigned long a, int size)
@@ -108,8 +63,7 @@ static int mlx5e_bits_invert(unsigned long a, int size)
        return inv;
 }
 
-static int mlx5e_calc_indir_rqns(u32 *rss_rqns, u32 *rqns, u32 *rss_vhca_ids, u32 *vhca_ids,
-                                unsigned int num_rqns,
+static int mlx5e_calc_indir_rqns(u32 *rss_rqns, u32 *rqns, unsigned int num_rqns,
                                 u8 hfunc, struct mlx5e_rss_params_indir *indir)
 {
        unsigned int i;
@@ -128,42 +82,30 @@ static int mlx5e_calc_indir_rqns(u32 *rss_rqns, u32 *rqns, u32 *rss_vhca_ids, u3
                         */
                        return -EINVAL;
                rss_rqns[i] = rqns[ix];
-               if (vhca_ids)
-                       rss_vhca_ids[i] = vhca_ids[ix];
        }
 
        return 0;
 }
 
 int mlx5e_rqt_init_indir(struct mlx5e_rqt *rqt, struct mlx5_core_dev *mdev,
-                        u32 *rqns, u32 *vhca_ids, unsigned int num_rqns,
+                        u32 *rqns, unsigned int num_rqns,
                         u8 hfunc, struct mlx5e_rss_params_indir *indir)
 {
-       u32 *rss_rqns, *rss_vhca_ids = NULL;
+       u32 *rss_rqns;
        int err;
 
        rss_rqns = kvmalloc_array(indir->actual_table_size, sizeof(*rss_rqns), GFP_KERNEL);
        if (!rss_rqns)
                return -ENOMEM;
 
-       if (vhca_ids) {
-               rss_vhca_ids = kvmalloc_array(indir->actual_table_size, sizeof(*rss_vhca_ids),
-                                             GFP_KERNEL);
-               if (!rss_vhca_ids) {
-                       kvfree(rss_rqns);
-                       return -ENOMEM;
-               }
-       }
-
-       err = mlx5e_calc_indir_rqns(rss_rqns, rqns, rss_vhca_ids, vhca_ids, num_rqns, hfunc, indir);
+       err = mlx5e_calc_indir_rqns(rss_rqns, rqns, num_rqns, hfunc, indir);
        if (err)
                goto out;
 
-       err = mlx5e_rqt_init(rqt, mdev, indir->max_table_size, rss_rqns, rss_vhca_ids,
+       err = mlx5e_rqt_init(rqt, mdev, indir->max_table_size, rss_rqns,
                             indir->actual_table_size);
 
 out:
-       kvfree(rss_vhca_ids);
        kvfree(rss_rqns);
        return err;
 }
@@ -184,20 +126,15 @@ void mlx5e_rqt_destroy(struct mlx5e_rqt *rqt)
        mlx5_core_destroy_rqt(rqt->mdev, rqt->rqtn);
 }
 
-static int mlx5e_rqt_redirect(struct mlx5e_rqt *rqt, u32 *rqns, u32 *vhca_ids,
-                             unsigned int size)
+static int mlx5e_rqt_redirect(struct mlx5e_rqt *rqt, u32 *rqns, unsigned int size)
 {
-       int entry_sz;
+       unsigned int i;
        void *rqtc;
        int inlen;
        u32 *in;
        int err;
 
-       if (!rqt_verify_vhca_ids(rqt->mdev, vhca_ids, size))
-               return -EINVAL;
-
-       entry_sz = vhca_ids ? MLX5_ST_SZ_BYTES(rq_vhca) : MLX5_ST_SZ_BYTES(rq_num);
-       inlen = MLX5_ST_SZ_BYTES(modify_rqt_in) + entry_sz * size;
+       inlen = MLX5_ST_SZ_BYTES(modify_rqt_in) + sizeof(u32) * size;
        in = kvzalloc(inlen, GFP_KERNEL);
        if (!in)
                return -ENOMEM;
@@ -206,8 +143,8 @@ static int mlx5e_rqt_redirect(struct mlx5e_rqt *rqt, u32 *rqns, u32 *vhca_ids,
 
        MLX5_SET(modify_rqt_in, in, bitmask.rqn_list, 1);
        MLX5_SET(rqtc, rqtc, rqt_actual_size, size);
-
-       fill_rqn_list(rqtc, rqns, vhca_ids, size);
+       for (i = 0; i < size; i++)
+               MLX5_SET(rqtc, rqtc, rq_num[i], rqns[i]);
 
        err = mlx5_core_modify_rqt(rqt->mdev, rqt->rqtn, in, inlen);
 
@@ -215,21 +152,17 @@ static int mlx5e_rqt_redirect(struct mlx5e_rqt *rqt, u32 *rqns, u32 *vhca_ids,
        return err;
 }
 
-int mlx5e_rqt_redirect_direct(struct mlx5e_rqt *rqt, u32 rqn, u32 *vhca_id)
+int mlx5e_rqt_redirect_direct(struct mlx5e_rqt *rqt, u32 rqn)
 {
-       return mlx5e_rqt_redirect(rqt, &rqn, vhca_id, 1);
+       return mlx5e_rqt_redirect(rqt, &rqn, 1);
 }
 
-int mlx5e_rqt_redirect_indir(struct mlx5e_rqt *rqt, u32 *rqns, u32 *vhca_ids,
-                            unsigned int num_rqns,
+int mlx5e_rqt_redirect_indir(struct mlx5e_rqt *rqt, u32 *rqns, unsigned int num_rqns,
                             u8 hfunc, struct mlx5e_rss_params_indir *indir)
 {
-       u32 *rss_rqns, *rss_vhca_ids = NULL;
+       u32 *rss_rqns;
        int err;
 
-       if (!rqt_verify_vhca_ids(rqt->mdev, vhca_ids, num_rqns))
-               return -EINVAL;
-
        if (WARN_ON(rqt->size != indir->max_table_size))
                return -EINVAL;
 
@@ -237,23 +170,13 @@ int mlx5e_rqt_redirect_indir(struct mlx5e_rqt *rqt, u32 *rqns, u32 *vhca_ids,
        if (!rss_rqns)
                return -ENOMEM;
 
-       if (vhca_ids) {
-               rss_vhca_ids = kvmalloc_array(indir->actual_table_size, sizeof(*rss_vhca_ids),
-                                             GFP_KERNEL);
-               if (!rss_vhca_ids) {
-                       kvfree(rss_rqns);
-                       return -ENOMEM;
-               }
-       }
-
-       err = mlx5e_calc_indir_rqns(rss_rqns, rqns, rss_vhca_ids, vhca_ids, num_rqns, hfunc, indir);
+       err = mlx5e_calc_indir_rqns(rss_rqns, rqns, num_rqns, hfunc, indir);
        if (err)
                goto out;
 
-       err = mlx5e_rqt_redirect(rqt, rss_rqns, rss_vhca_ids, indir->actual_table_size);
+       err = mlx5e_rqt_redirect(rqt, rss_rqns, indir->actual_table_size);
 
 out:
-       kvfree(rss_vhca_ids);
        kvfree(rss_rqns);
        return err;
 }
index e0bc30308c77000038d151a7caa206c516a6fe9a..77fba3ebd18d826b581ae7e0b16d2ead2be3faf0 100644 (file)
@@ -20,7 +20,7 @@ void mlx5e_rss_params_indir_init_uniform(struct mlx5e_rss_params_indir *indir,
                                         unsigned int num_channels);
 
 struct mlx5e_rqt {
-       struct mlx5_core_dev *mdev; /* primary */
+       struct mlx5_core_dev *mdev;
        u32 rqtn;
        u16 size;
 };
@@ -28,7 +28,7 @@ struct mlx5e_rqt {
 int mlx5e_rqt_init_direct(struct mlx5e_rqt *rqt, struct mlx5_core_dev *mdev,
                          bool indir_enabled, u32 init_rqn, u32 indir_table_size);
 int mlx5e_rqt_init_indir(struct mlx5e_rqt *rqt, struct mlx5_core_dev *mdev,
-                        u32 *rqns, u32 *vhca_ids, unsigned int num_rqns,
+                        u32 *rqns, unsigned int num_rqns,
                         u8 hfunc, struct mlx5e_rss_params_indir *indir);
 void mlx5e_rqt_destroy(struct mlx5e_rqt *rqt);
 
@@ -38,9 +38,8 @@ static inline u32 mlx5e_rqt_get_rqtn(struct mlx5e_rqt *rqt)
 }
 
 u32 mlx5e_rqt_size(struct mlx5_core_dev *mdev, unsigned int num_channels);
-int mlx5e_rqt_redirect_direct(struct mlx5e_rqt *rqt, u32 rqn, u32 *vhca_id);
-int mlx5e_rqt_redirect_indir(struct mlx5e_rqt *rqt, u32 *rqns, u32 *vhca_ids,
-                            unsigned int num_rqns,
+int mlx5e_rqt_redirect_direct(struct mlx5e_rqt *rqt, u32 rqn);
+int mlx5e_rqt_redirect_indir(struct mlx5e_rqt *rqt, u32 *rqns, unsigned int num_rqns,
                             u8 hfunc, struct mlx5e_rss_params_indir *indir);
 
 #endif /* __MLX5_EN_RQT_H__ */
index 5f742f8966004b32b7abf80089728195c2c81e27..c1545a2e8d6dbeaefc0147c877d4131747fcb65e 100644 (file)
@@ -74,7 +74,7 @@ struct mlx5e_rss {
        struct mlx5e_tir *tir[MLX5E_NUM_INDIR_TIRS];
        struct mlx5e_tir *inner_tir[MLX5E_NUM_INDIR_TIRS];
        struct mlx5e_rqt rqt;
-       struct mlx5_core_dev *mdev; /* primary */
+       struct mlx5_core_dev *mdev;
        u32 drop_rqn;
        bool inner_ft_support;
        bool enabled;
@@ -473,22 +473,21 @@ int mlx5e_rss_obtain_tirn(struct mlx5e_rss *rss,
        return 0;
 }
 
-static int mlx5e_rss_apply(struct mlx5e_rss *rss, u32 *rqns, u32 *vhca_ids, unsigned int num_rqns)
+static int mlx5e_rss_apply(struct mlx5e_rss *rss, u32 *rqns, unsigned int num_rqns)
 {
        int err;
 
-       err = mlx5e_rqt_redirect_indir(&rss->rqt, rqns, vhca_ids, num_rqns, rss->hash.hfunc,
-                                      &rss->indir);
+       err = mlx5e_rqt_redirect_indir(&rss->rqt, rqns, num_rqns, rss->hash.hfunc, &rss->indir);
        if (err)
                mlx5e_rss_warn(rss->mdev, "Failed to redirect RQT %#x to channels: err = %d\n",
                               mlx5e_rqt_get_rqtn(&rss->rqt), err);
        return err;
 }
 
-void mlx5e_rss_enable(struct mlx5e_rss *rss, u32 *rqns, u32 *vhca_ids, unsigned int num_rqns)
+void mlx5e_rss_enable(struct mlx5e_rss *rss, u32 *rqns, unsigned int num_rqns)
 {
        rss->enabled = true;
-       mlx5e_rss_apply(rss, rqns, vhca_ids, num_rqns);
+       mlx5e_rss_apply(rss, rqns, num_rqns);
 }
 
 void mlx5e_rss_disable(struct mlx5e_rss *rss)
@@ -496,7 +495,7 @@ void mlx5e_rss_disable(struct mlx5e_rss *rss)
        int err;
 
        rss->enabled = false;
-       err = mlx5e_rqt_redirect_direct(&rss->rqt, rss->drop_rqn, NULL);
+       err = mlx5e_rqt_redirect_direct(&rss->rqt, rss->drop_rqn);
        if (err)
                mlx5e_rss_warn(rss->mdev, "Failed to redirect RQT %#x to drop RQ %#x: err = %d\n",
                               mlx5e_rqt_get_rqtn(&rss->rqt), rss->drop_rqn, err);
@@ -569,7 +568,7 @@ int mlx5e_rss_get_rxfh(struct mlx5e_rss *rss, u32 *indir, u8 *key, u8 *hfunc)
 
 int mlx5e_rss_set_rxfh(struct mlx5e_rss *rss, const u32 *indir,
                       const u8 *key, const u8 *hfunc,
-                      u32 *rqns, u32 *vhca_ids, unsigned int num_rqns)
+                      u32 *rqns, unsigned int num_rqns)
 {
        bool changed_indir = false;
        bool changed_hash = false;
@@ -609,7 +608,7 @@ int mlx5e_rss_set_rxfh(struct mlx5e_rss *rss, const u32 *indir,
        }
 
        if (changed_indir && rss->enabled) {
-               err = mlx5e_rss_apply(rss, rqns, vhca_ids, num_rqns);
+               err = mlx5e_rss_apply(rss, rqns, num_rqns);
                if (err) {
                        mlx5e_rss_copy(rss, old_rss);
                        goto out;
index d0df98963c8ddac190b3ab5346db5c8e7b9c495d..d1d0bc350e928cdb40b4d80e5dac98cdbbc4e1cb 100644 (file)
@@ -39,7 +39,7 @@ int mlx5e_rss_obtain_tirn(struct mlx5e_rss *rss,
                          const struct mlx5e_packet_merge_param *init_pkt_merge_param,
                          bool inner, u32 *tirn);
 
-void mlx5e_rss_enable(struct mlx5e_rss *rss, u32 *rqns, u32 *vhca_ids, unsigned int num_rqns);
+void mlx5e_rss_enable(struct mlx5e_rss *rss, u32 *rqns, unsigned int num_rqns);
 void mlx5e_rss_disable(struct mlx5e_rss *rss);
 
 int mlx5e_rss_packet_merge_set_param(struct mlx5e_rss *rss,
@@ -47,7 +47,7 @@ int mlx5e_rss_packet_merge_set_param(struct mlx5e_rss *rss,
 int mlx5e_rss_get_rxfh(struct mlx5e_rss *rss, u32 *indir, u8 *key, u8 *hfunc);
 int mlx5e_rss_set_rxfh(struct mlx5e_rss *rss, const u32 *indir,
                       const u8 *key, const u8 *hfunc,
-                      u32 *rqns, u32 *vhca_ids, unsigned int num_rqns);
+                      u32 *rqns, unsigned int num_rqns);
 struct mlx5e_rss_params_hash mlx5e_rss_get_hash(struct mlx5e_rss *rss);
 u8 mlx5e_rss_get_hash_fields(struct mlx5e_rss *rss, enum mlx5_traffic_types tt);
 int mlx5e_rss_set_hash_fields(struct mlx5e_rss *rss, enum mlx5_traffic_types tt,
index a86eade9a9e07d1206e3d3ce8178ad90115c2164..b23e224e3763b3f62b391be3b4fa90dd7236faae 100644 (file)
@@ -8,7 +8,7 @@
 #define MLX5E_MAX_NUM_RSS 16
 
 struct mlx5e_rx_res {
-       struct mlx5_core_dev *mdev; /* primary */
+       struct mlx5_core_dev *mdev;
        enum mlx5e_rx_res_features features;
        unsigned int max_nch;
        u32 drop_rqn;
@@ -19,7 +19,6 @@ struct mlx5e_rx_res {
        struct mlx5e_rss *rss[MLX5E_MAX_NUM_RSS];
        bool rss_active;
        u32 *rss_rqns;
-       u32 *rss_vhca_ids;
        unsigned int rss_nch;
 
        struct {
@@ -35,13 +34,6 @@ struct mlx5e_rx_res {
 
 /* API for rx_res_rss_* */
 
-static u32 *get_vhca_ids(struct mlx5e_rx_res *res, int offset)
-{
-       bool multi_vhca = res->features & MLX5E_RX_RES_FEATURE_MULTI_VHCA;
-
-       return multi_vhca ? res->rss_vhca_ids + offset : NULL;
-}
-
 void mlx5e_rx_res_rss_update_num_channels(struct mlx5e_rx_res *res, u32 nch)
 {
        int i;
@@ -93,11 +85,8 @@ int mlx5e_rx_res_rss_init(struct mlx5e_rx_res *res, u32 *rss_idx, unsigned int i
                return PTR_ERR(rss);
 
        mlx5e_rss_set_indir_uniform(rss, init_nch);
-       if (res->rss_active) {
-               u32 *vhca_ids = get_vhca_ids(res, 0);
-
-               mlx5e_rss_enable(rss, res->rss_rqns, vhca_ids, res->rss_nch);
-       }
+       if (res->rss_active)
+               mlx5e_rss_enable(rss, res->rss_rqns, res->rss_nch);
 
        res->rss[i] = rss;
        *rss_idx = i;
@@ -164,12 +153,10 @@ static void mlx5e_rx_res_rss_enable(struct mlx5e_rx_res *res)
 
        for (i = 0; i < MLX5E_MAX_NUM_RSS; i++) {
                struct mlx5e_rss *rss = res->rss[i];
-               u32 *vhca_ids;
 
                if (!rss)
                        continue;
-               vhca_ids = get_vhca_ids(res, 0);
-               mlx5e_rss_enable(rss, res->rss_rqns, vhca_ids, res->rss_nch);
+               mlx5e_rss_enable(rss, res->rss_rqns, res->rss_nch);
        }
 }
 
@@ -213,7 +200,6 @@ int mlx5e_rx_res_rss_get_rxfh(struct mlx5e_rx_res *res, u32 rss_idx,
 int mlx5e_rx_res_rss_set_rxfh(struct mlx5e_rx_res *res, u32 rss_idx,
                              const u32 *indir, const u8 *key, const u8 *hfunc)
 {
-       u32 *vhca_ids = get_vhca_ids(res, 0);
        struct mlx5e_rss *rss;
 
        if (rss_idx >= MLX5E_MAX_NUM_RSS)
@@ -223,8 +209,7 @@ int mlx5e_rx_res_rss_set_rxfh(struct mlx5e_rx_res *res, u32 rss_idx,
        if (!rss)
                return -ENOENT;
 
-       return mlx5e_rss_set_rxfh(rss, indir, key, hfunc, res->rss_rqns, vhca_ids,
-                                 res->rss_nch);
+       return mlx5e_rss_set_rxfh(rss, indir, key, hfunc, res->rss_rqns, res->rss_nch);
 }
 
 int mlx5e_rx_res_rss_get_hash_fields(struct mlx5e_rx_res *res, u32 rss_idx,
@@ -295,13 +280,11 @@ struct mlx5e_rss *mlx5e_rx_res_rss_get(struct mlx5e_rx_res *res, u32 rss_idx)
 
 static void mlx5e_rx_res_free(struct mlx5e_rx_res *res)
 {
-       kvfree(res->rss_vhca_ids);
        kvfree(res->rss_rqns);
        kvfree(res);
 }
 
-static struct mlx5e_rx_res *mlx5e_rx_res_alloc(struct mlx5_core_dev *mdev, unsigned int max_nch,
-                                              bool multi_vhca)
+static struct mlx5e_rx_res *mlx5e_rx_res_alloc(struct mlx5_core_dev *mdev, unsigned int max_nch)
 {
        struct mlx5e_rx_res *rx_res;
 
@@ -315,15 +298,6 @@ static struct mlx5e_rx_res *mlx5e_rx_res_alloc(struct mlx5_core_dev *mdev, unsig
                return NULL;
        }
 
-       if (multi_vhca) {
-               rx_res->rss_vhca_ids = kvcalloc(max_nch, sizeof(*rx_res->rss_vhca_ids), GFP_KERNEL);
-               if (!rx_res->rss_vhca_ids) {
-                       kvfree(rx_res->rss_rqns);
-                       kvfree(rx_res);
-                       return NULL;
-               }
-       }
-
        return rx_res;
 }
 
@@ -450,11 +424,10 @@ mlx5e_rx_res_create(struct mlx5_core_dev *mdev, enum mlx5e_rx_res_features featu
                    const struct mlx5e_packet_merge_param *init_pkt_merge_param,
                    unsigned int init_nch)
 {
-       bool multi_vhca = features & MLX5E_RX_RES_FEATURE_MULTI_VHCA;
        struct mlx5e_rx_res *res;
        int err;
 
-       res = mlx5e_rx_res_alloc(mdev, max_nch, multi_vhca);
+       res = mlx5e_rx_res_alloc(mdev, max_nch);
        if (!res)
                return ERR_PTR(-ENOMEM);
 
@@ -531,11 +504,10 @@ static void mlx5e_rx_res_channel_activate_direct(struct mlx5e_rx_res *res,
                                                 struct mlx5e_channels *chs,
                                                 unsigned int ix)
 {
-       u32 *vhca_id = get_vhca_ids(res, ix);
        u32 rqn = res->rss_rqns[ix];
        int err;
 
-       err = mlx5e_rqt_redirect_direct(&res->channels[ix].direct_rqt, rqn, vhca_id);
+       err = mlx5e_rqt_redirect_direct(&res->channels[ix].direct_rqt, rqn);
        if (err)
                mlx5_core_warn(res->mdev, "Failed to redirect direct RQT %#x to RQ %#x (channel %u): err = %d\n",
                               mlx5e_rqt_get_rqtn(&res->channels[ix].direct_rqt),
@@ -547,7 +519,7 @@ static void mlx5e_rx_res_channel_deactivate_direct(struct mlx5e_rx_res *res,
 {
        int err;
 
-       err = mlx5e_rqt_redirect_direct(&res->channels[ix].direct_rqt, res->drop_rqn, NULL);
+       err = mlx5e_rqt_redirect_direct(&res->channels[ix].direct_rqt, res->drop_rqn);
        if (err)
                mlx5_core_warn(res->mdev, "Failed to redirect direct RQT %#x to drop RQ %#x (channel %u): err = %d\n",
                               mlx5e_rqt_get_rqtn(&res->channels[ix].direct_rqt),
@@ -562,12 +534,10 @@ void mlx5e_rx_res_channels_activate(struct mlx5e_rx_res *res, struct mlx5e_chann
        nch = mlx5e_channels_get_num(chs);
 
        for (ix = 0; ix < chs->num; ix++) {
-               u32 *vhca_id = get_vhca_ids(res, ix);
-
                if (mlx5e_channels_is_xsk(chs, ix))
-                       mlx5e_channels_get_xsk_rqn(chs, ix, &res->rss_rqns[ix], vhca_id);
+                       mlx5e_channels_get_xsk_rqn(chs, ix, &res->rss_rqns[ix]);
                else
-                       mlx5e_channels_get_regular_rqn(chs, ix, &res->rss_rqns[ix], vhca_id);
+                       mlx5e_channels_get_regular_rqn(chs, ix, &res->rss_rqns[ix]);
        }
        res->rss_nch = chs->num;
 
@@ -584,7 +554,7 @@ void mlx5e_rx_res_channels_activate(struct mlx5e_rx_res *res, struct mlx5e_chann
                if (!mlx5e_channels_get_ptp_rqn(chs, &rqn))
                        rqn = res->drop_rqn;
 
-               err = mlx5e_rqt_redirect_direct(&res->ptp.rqt, rqn, NULL);
+               err = mlx5e_rqt_redirect_direct(&res->ptp.rqt, rqn);
                if (err)
                        mlx5_core_warn(res->mdev, "Failed to redirect direct RQT %#x to RQ %#x (PTP): err = %d\n",
                                       mlx5e_rqt_get_rqtn(&res->ptp.rqt),
@@ -603,7 +573,7 @@ void mlx5e_rx_res_channels_deactivate(struct mlx5e_rx_res *res)
                mlx5e_rx_res_channel_deactivate_direct(res, ix);
 
        if (res->features & MLX5E_RX_RES_FEATURE_PTP) {
-               err = mlx5e_rqt_redirect_direct(&res->ptp.rqt, res->drop_rqn, NULL);
+               err = mlx5e_rqt_redirect_direct(&res->ptp.rqt, res->drop_rqn);
                if (err)
                        mlx5_core_warn(res->mdev, "Failed to redirect direct RQT %#x to drop RQ %#x (PTP): err = %d\n",
                                       mlx5e_rqt_get_rqtn(&res->ptp.rqt),
@@ -614,12 +584,10 @@ void mlx5e_rx_res_channels_deactivate(struct mlx5e_rx_res *res)
 void mlx5e_rx_res_xsk_update(struct mlx5e_rx_res *res, struct mlx5e_channels *chs,
                             unsigned int ix, bool xsk)
 {
-       u32 *vhca_id = get_vhca_ids(res, ix);
-
        if (xsk)
-               mlx5e_channels_get_xsk_rqn(chs, ix, &res->rss_rqns[ix], vhca_id);
+               mlx5e_channels_get_xsk_rqn(chs, ix, &res->rss_rqns[ix]);
        else
-               mlx5e_channels_get_regular_rqn(chs, ix, &res->rss_rqns[ix], vhca_id);
+               mlx5e_channels_get_regular_rqn(chs, ix, &res->rss_rqns[ix]);
 
        mlx5e_rx_res_rss_enable(res);
 
index 7b1a9f0f187417363f4e8f6c9358eefcc6a22f0f..82aaba8a82b35b22020bed04dfc2c4fad83ef22a 100644 (file)
@@ -18,7 +18,6 @@ struct mlx5e_rss_params_hash;
 enum mlx5e_rx_res_features {
        MLX5E_RX_RES_FEATURE_INNER_FT = BIT(0),
        MLX5E_RX_RES_FEATURE_PTP = BIT(1),
-       MLX5E_RX_RES_FEATURE_MULTI_VHCA = BIT(2),
 };
 
 /* Setup */
index 53ca16cb9c41a82cba927143794ddb70809d5f24..ac458a8d10e0f127e52cfdfac600912985c4a485 100644 (file)
@@ -63,12 +63,10 @@ static int mlx5e_open_trap_rq(struct mlx5e_priv *priv, struct mlx5e_trap *t)
        struct mlx5e_create_cq_param ccp = {};
        struct dim_cq_moder trap_moder = {};
        struct mlx5e_rq *rq = &t->rq;
-       u16 q_counter;
        int node;
        int err;
 
        node = dev_to_node(mdev->device);
-       q_counter = priv->q_counter[0];
 
        ccp.netdev   = priv->netdev;
        ccp.wq       = priv->wq;
@@ -81,7 +79,7 @@ static int mlx5e_open_trap_rq(struct mlx5e_priv *priv, struct mlx5e_trap *t)
                return err;
 
        mlx5e_init_trap_rq(t, &t->params, rq);
-       err = mlx5e_open_rq(&t->params, rq_param, NULL, node, q_counter, rq);
+       err = mlx5e_open_rq(&t->params, rq_param, NULL, node, rq);
        if (err)
                goto err_destroy_cq;
 
@@ -118,14 +116,15 @@ static int mlx5e_create_trap_direct_rq_tir(struct mlx5_core_dev *mdev, struct ml
 }
 
 static void mlx5e_build_trap_params(struct mlx5_core_dev *mdev,
-                                   int max_mtu, struct mlx5e_trap *t)
+                                   int max_mtu, u16 q_counter,
+                                   struct mlx5e_trap *t)
 {
        struct mlx5e_params *params = &t->params;
 
        params->rq_wq_type = MLX5_WQ_TYPE_CYCLIC;
        mlx5e_init_rq_type_params(mdev, params);
        params->sw_mtu = max_mtu;
-       mlx5e_build_rq_param(mdev, params, NULL, &t->rq_param);
+       mlx5e_build_rq_param(mdev, params, NULL, q_counter, &t->rq_param);
 }
 
 static struct mlx5e_trap *mlx5e_open_trap(struct mlx5e_priv *priv)
@@ -139,7 +138,7 @@ static struct mlx5e_trap *mlx5e_open_trap(struct mlx5e_priv *priv)
        if (!t)
                return ERR_PTR(-ENOMEM);
 
-       mlx5e_build_trap_params(priv->mdev, netdev->max_mtu, t);
+       mlx5e_build_trap_params(priv->mdev, netdev->max_mtu, priv->q_counter, t);
 
        t->priv     = priv;
        t->mdev     = priv->mdev;
index db776e515b6adedd7659ed5afb08691a922a40ef..ebada0c5af3cd42601bc322f57d9381e01e7d899 100644 (file)
@@ -6,10 +6,10 @@
 #include "setup.h"
 #include "en/params.h"
 
-static int mlx5e_xsk_map_pool(struct mlx5_core_dev *mdev,
+static int mlx5e_xsk_map_pool(struct mlx5e_priv *priv,
                              struct xsk_buff_pool *pool)
 {
-       struct device *dev = mlx5_core_dma_dev(mdev);
+       struct device *dev = mlx5_core_dma_dev(priv->mdev);
 
        return xsk_pool_dma_map(pool, dev, DMA_ATTR_SKIP_CPU_SYNC);
 }
@@ -89,7 +89,7 @@ static int mlx5e_xsk_enable_locked(struct mlx5e_priv *priv,
        if (unlikely(!mlx5e_xsk_is_pool_sane(pool)))
                return -EINVAL;
 
-       err = mlx5e_xsk_map_pool(mlx5_sd_ch_ix_get_dev(priv->mdev, ix), pool);
+       err = mlx5e_xsk_map_pool(priv, pool);
        if (unlikely(err))
                return err;
 
index 06592b9f04242c9b940c9b8c29eb3363d74bb57b..82e6abbc173423d436b268bebe168400f14eaeba 100644 (file)
@@ -49,9 +49,10 @@ bool mlx5e_validate_xsk_param(struct mlx5e_params *params,
 static void mlx5e_build_xsk_cparam(struct mlx5_core_dev *mdev,
                                   struct mlx5e_params *params,
                                   struct mlx5e_xsk_param *xsk,
+                                  u16 q_counter,
                                   struct mlx5e_channel_param *cparam)
 {
-       mlx5e_build_rq_param(mdev, params, xsk, &cparam->rq);
+       mlx5e_build_rq_param(mdev, params, xsk, q_counter, &cparam->rq);
        mlx5e_build_xdpsq_param(mdev, params, xsk, &cparam->xdp_sq);
 }
 
@@ -92,7 +93,6 @@ static int mlx5e_open_xsk_rq(struct mlx5e_channel *c, struct mlx5e_params *param
                             struct mlx5e_rq_param *rq_params, struct xsk_buff_pool *pool,
                             struct mlx5e_xsk_param *xsk)
 {
-       u16 q_counter = c->priv->q_counter[c->sd_ix];
        struct mlx5e_rq *xskrq = &c->xskrq;
        int err;
 
@@ -100,7 +100,7 @@ static int mlx5e_open_xsk_rq(struct mlx5e_channel *c, struct mlx5e_params *param
        if (err)
                return err;
 
-       err = mlx5e_open_rq(params, rq_params, xsk, cpu_to_node(c->cpu), q_counter, xskrq);
+       err = mlx5e_open_rq(params, rq_params, xsk, cpu_to_node(c->cpu), xskrq);
        if (err)
                return err;
 
@@ -125,7 +125,7 @@ int mlx5e_open_xsk(struct mlx5e_priv *priv, struct mlx5e_params *params,
        if (!cparam)
                return -ENOMEM;
 
-       mlx5e_build_xsk_cparam(priv->mdev, params, xsk, cparam);
+       mlx5e_build_xsk_cparam(priv->mdev, params, xsk, priv->q_counter, cparam);
 
        err = mlx5e_open_cq(c->mdev, params->rx_cq_moderation, &cparam->rq.cqp, &ccp,
                            &c->xskrq.cq);
index e3e57c849436abd6480b5556fa6cd02c247c13c5..984fa04bd331b8b22b8484f75538326c8ce5849f 100644 (file)
@@ -96,7 +96,7 @@ bool mlx5e_is_ktls_rx(struct mlx5_core_dev *mdev)
 {
        u8 max_sq_wqebbs = mlx5e_get_max_sq_wqebbs(mdev);
 
-       if (is_kdump_kernel() || !MLX5_CAP_GEN(mdev, tls_rx) || mlx5_get_sd(mdev))
+       if (is_kdump_kernel() || !MLX5_CAP_GEN(mdev, tls_rx))
                return false;
 
        /* Check the possibility to post the required ICOSQ WQEs. */
index adc6d8ea096027f836e6f23035d850ab06b6b681..f11075e67658621b9fc52da27c4239ae7d7cd716 100644 (file)
@@ -11,7 +11,6 @@
 
 #ifdef CONFIG_MLX5_EN_TLS
 #include "lib/crypto.h"
-#include "lib/mlx5.h"
 
 struct mlx5_crypto_dek *mlx5_ktls_create_key(struct mlx5_crypto_dek_pool *dek_pool,
                                             struct tls_crypto_info *crypto_info);
@@ -62,8 +61,7 @@ void mlx5e_ktls_rx_resync_destroy_resp_list(struct mlx5e_ktls_resync_resp *resp_
 
 static inline bool mlx5e_is_ktls_tx(struct mlx5_core_dev *mdev)
 {
-       return !is_kdump_kernel() && MLX5_CAP_GEN(mdev, tls_tx) &&
-               !mlx5_get_sd(mdev);
+       return !is_kdump_kernel() && MLX5_CAP_GEN(mdev, tls_tx);
 }
 
 bool mlx5e_is_ktls_rx(struct mlx5_core_dev *mdev);
index 65ccb33edafb74461cd74fded80ef5985940a247..9b597cb2459851aa9a3dd46f4757e94ba87c7f70 100644 (file)
@@ -267,7 +267,7 @@ resync_post_get_progress_params(struct mlx5e_icosq *sq,
                goto err_out;
        }
 
-       pdev = mlx5_core_dma_dev(sq->channel->mdev);
+       pdev = mlx5_core_dma_dev(sq->channel->priv->mdev);
        buf->dma_addr = dma_map_single(pdev, &buf->progress,
                                       PROGRESS_PARAMS_PADDED_SIZE, DMA_FROM_DEVICE);
        if (unlikely(dma_mapping_error(pdev, buf->dma_addr))) {
@@ -425,12 +425,14 @@ void mlx5e_ktls_handle_get_psv_completion(struct mlx5e_icosq_wqe_info *wi,
 {
        struct mlx5e_ktls_rx_resync_buf *buf = wi->tls_get_params.buf;
        struct mlx5e_ktls_offload_context_rx *priv_rx;
+       struct mlx5e_ktls_rx_resync_ctx *resync;
        u8 tracker_state, auth_state, *ctx;
        struct device *dev;
        u32 hw_seq;
 
        priv_rx = buf->priv_rx;
-       dev = mlx5_core_dma_dev(sq->channel->mdev);
+       resync = &priv_rx->resync;
+       dev = mlx5_core_dma_dev(resync->priv->mdev);
        if (unlikely(test_bit(MLX5E_PRIV_RX_FLAG_DELETING, priv_rx->flags)))
                goto out;
 
index 6ed3a32b7e226d497234e4fa7b244bf9629b5710..67f546683e85a3fa0bed05baab33790c66eb9168 100644 (file)
@@ -95,7 +95,7 @@ static void mlx5e_destroy_tises(struct mlx5_core_dev *mdev, u32 tisn[MLX5_MAX_PO
 {
        int tc, i;
 
-       for (i = 0; i < mlx5e_get_num_lag_ports(mdev); i++)
+       for (i = 0; i < MLX5_MAX_PORTS; i++)
                for (tc = 0; tc < MLX5_MAX_NUM_TC; tc++)
                        mlx5e_destroy_tis(mdev, tisn[i][tc]);
 }
@@ -110,7 +110,7 @@ static int mlx5e_create_tises(struct mlx5_core_dev *mdev, u32 tisn[MLX5_MAX_PORT
        int tc, i;
        int err;
 
-       for (i = 0; i < mlx5e_get_num_lag_ports(mdev); i++) {
+       for (i = 0; i < MLX5_MAX_PORTS; i++) {
                for (tc = 0; tc < MLX5_MAX_NUM_TC; tc++) {
                        u32 in[MLX5_ST_SZ_DW(create_tis_in)] = {};
                        void *tisc;
@@ -140,7 +140,7 @@ static int mlx5e_create_tises(struct mlx5_core_dev *mdev, u32 tisn[MLX5_MAX_PORT
        return err;
 }
 
-int mlx5e_create_mdev_resources(struct mlx5_core_dev *mdev, bool create_tises)
+int mlx5e_create_mdev_resources(struct mlx5_core_dev *mdev)
 {
        struct mlx5e_hw_objs *res = &mdev->mlx5e_res.hw_objs;
        int err;
@@ -169,15 +169,11 @@ int mlx5e_create_mdev_resources(struct mlx5_core_dev *mdev, bool create_tises)
                goto err_destroy_mkey;
        }
 
-       if (create_tises) {
-               err = mlx5e_create_tises(mdev, res->tisn);
-               if (err) {
-                       mlx5_core_err(mdev, "alloc tises failed, %d\n", err);
-                       goto err_destroy_bfreg;
-               }
-               res->tisn_valid = true;
+       err = mlx5e_create_tises(mdev, res->tisn);
+       if (err) {
+               mlx5_core_err(mdev, "alloc tises failed, %d\n", err);
+               goto err_destroy_bfreg;
        }
-
        INIT_LIST_HEAD(&res->td.tirs_list);
        mutex_init(&res->td.list_lock);
 
@@ -207,8 +203,7 @@ void mlx5e_destroy_mdev_resources(struct mlx5_core_dev *mdev)
 
        mlx5_crypto_dek_cleanup(mdev->mlx5e_res.dek_priv);
        mdev->mlx5e_res.dek_priv = NULL;
-       if (res->tisn_valid)
-               mlx5e_destroy_tises(mdev, res->tisn);
+       mlx5e_destroy_tises(mdev, res->tisn);
        mlx5_free_bfreg(mdev, &res->bfreg);
        mlx5_core_destroy_mkey(mdev, res->mkey);
        mlx5_core_dealloc_transport_domain(mdev, res->td.tdn);
index 40626b6108fb61063d7c6c6509f9dfcc1c361041..b5f1c4ca38bac97d860ed2bb5f37eac332e6e24c 100644 (file)
@@ -70,7 +70,6 @@
 #include "qos.h"
 #include "en/trap.h"
 #include "lib/devcom.h"
-#include "lib/sd.h"
 
 bool mlx5e_check_fragmented_striding_rq_cap(struct mlx5_core_dev *mdev, u8 page_shift,
                                            enum mlx5e_mpwrq_umr_mode umr_mode)
@@ -1025,7 +1024,7 @@ static void mlx5e_free_rq(struct mlx5e_rq *rq)
        mlx5_wq_destroy(&rq->wq_ctrl);
 }
 
-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)
 {
        struct mlx5_core_dev *mdev = rq->mdev;
        u8 ts_format;
@@ -1052,7 +1051,6 @@ int mlx5e_create_rq(struct mlx5e_rq *rq, struct mlx5e_rq_param *param, u16 q_cou
        MLX5_SET(rqc,  rqc, cqn,                rq->cq.mcq.cqn);
        MLX5_SET(rqc,  rqc, state,              MLX5_RQC_STATE_RST);
        MLX5_SET(rqc,  rqc, ts_format,          ts_format);
-       MLX5_SET(rqc,  rqc, counter_set_id,     q_counter);
        MLX5_SET(wq,   wq,  log_wq_pg_sz,       rq->wq_ctrl.buf.page_shift -
                                                MLX5_ADAPTER_PAGE_SHIFT);
        MLX5_SET64(wq, wq,  dbr_addr,           rq->wq_ctrl.db.dma);
@@ -1276,7 +1274,7 @@ void mlx5e_free_rx_descs(struct mlx5e_rq *rq)
 }
 
 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)
 {
        struct mlx5_core_dev *mdev = rq->mdev;
@@ -1289,7 +1287,7 @@ int mlx5e_open_rq(struct mlx5e_params *params, struct mlx5e_rq_param *param,
        if (err)
                return err;
 
-       err = mlx5e_create_rq(rq, param, q_counter);
+       err = mlx5e_create_rq(rq, param);
        if (err)
                goto err_free_rq;
 
@@ -2335,14 +2333,13 @@ static int mlx5e_set_tx_maxrate(struct net_device *dev, int index, u32 rate)
 static int mlx5e_open_rxq_rq(struct mlx5e_channel *c, struct mlx5e_params *params,
                             struct mlx5e_rq_param *rq_params)
 {
-       u16 q_counter = c->priv->q_counter[c->sd_ix];
        int err;
 
        err = mlx5e_init_rxq_rq(c, params, rq_params->xdp_frag_size, &c->rq);
        if (err)
                return err;
 
-       return mlx5e_open_rq(params, rq_params, NULL, cpu_to_node(c->cpu), q_counter, &c->rq);
+       return mlx5e_open_rq(params, rq_params, NULL, cpu_to_node(c->cpu), &c->rq);
 }
 
 static int mlx5e_open_queues(struct mlx5e_channel *c,
@@ -2529,20 +2526,14 @@ static int mlx5e_open_channel(struct mlx5e_priv *priv, int ix,
                              struct xsk_buff_pool *xsk_pool,
                              struct mlx5e_channel **cp)
 {
+       int cpu = mlx5_comp_vector_get_cpu(priv->mdev, ix);
        struct net_device *netdev = priv->netdev;
-       struct mlx5_core_dev *mdev;
        struct mlx5e_xsk_param xsk;
        struct mlx5e_channel *c;
        unsigned int irq;
-       int vec_ix;
-       int cpu;
        int err;
 
-       mdev = mlx5_sd_ch_ix_get_dev(priv->mdev, ix);
-       vec_ix = mlx5_sd_ch_ix_get_vec_ix(mdev, ix);
-       cpu = mlx5_comp_vector_get_cpu(mdev, vec_ix);
-
-       err = mlx5_comp_irqn_get(mdev, vec_ix, &irq);
+       err = mlx5_comp_irqn_get(priv->mdev, ix, &irq);
        if (err)
                return err;
 
@@ -2555,20 +2546,18 @@ static int mlx5e_open_channel(struct mlx5e_priv *priv, int ix,
                return -ENOMEM;
 
        c->priv     = priv;
-       c->mdev     = mdev;
+       c->mdev     = priv->mdev;
        c->tstamp   = &priv->tstamp;
        c->ix       = ix;
-       c->vec_ix   = vec_ix;
-       c->sd_ix    = mlx5_sd_ch_ix_get_dev_ix(mdev, ix);
        c->cpu      = cpu;
-       c->pdev     = mlx5_core_dma_dev(mdev);
+       c->pdev     = mlx5_core_dma_dev(priv->mdev);
        c->netdev   = priv->netdev;
-       c->mkey_be  = cpu_to_be32(mdev->mlx5e_res.hw_objs.mkey);
+       c->mkey_be  = cpu_to_be32(priv->mdev->mlx5e_res.hw_objs.mkey);
        c->num_tc   = mlx5e_get_dcb_num_tc(params);
        c->xdp      = !!params->xdp_prog;
        c->stats    = &priv->channel_stats[ix]->ch;
        c->aff_mask = irq_get_effective_affinity_mask(irq);
-       c->lag_port = mlx5e_enumerate_lag_port(mdev, ix);
+       c->lag_port = mlx5e_enumerate_lag_port(priv->mdev, ix);
 
        netif_napi_add(netdev, &c->napi, mlx5e_napi_poll);
 
@@ -2658,7 +2647,7 @@ int mlx5e_open_channels(struct mlx5e_priv *priv,
        if (!chs->c || !cparam)
                goto err_free;
 
-       err = mlx5e_build_channel_param(priv->mdev, &chs->params, cparam);
+       err = mlx5e_build_channel_param(priv->mdev, &chs->params, priv->q_counter, cparam);
        if (err)
                goto err_free;
 
@@ -2946,18 +2935,15 @@ static MLX5E_DEFINE_PREACTIVATE_WRAPPER_CTX(mlx5e_update_netdev_queues);
 static void mlx5e_set_default_xps_cpumasks(struct mlx5e_priv *priv,
                                           struct mlx5e_params *params)
 {
-       int ix;
+       struct mlx5_core_dev *mdev = priv->mdev;
+       int num_comp_vectors, ix, irq;
 
-       for (ix = 0; ix < params->num_channels; ix++) {
-               int num_comp_vectors, irq, vec_ix;
-               struct mlx5_core_dev *mdev;
+       num_comp_vectors = mlx5_comp_vectors_max(mdev);
 
-               mdev = mlx5_sd_ch_ix_get_dev(priv->mdev, ix);
-               num_comp_vectors = mlx5_comp_vectors_max(mdev);
+       for (ix = 0; ix < params->num_channels; ix++) {
                cpumask_clear(priv->scratchpad.cpumask);
-               vec_ix = mlx5_sd_ch_ix_get_vec_ix(mdev, ix);
 
-               for (irq = vec_ix; irq < num_comp_vectors; irq += params->num_channels) {
+               for (irq = ix; irq < num_comp_vectors; irq += params->num_channels) {
                        int cpu = mlx5_comp_vector_get_cpu(mdev, irq);
 
                        cpumask_set_cpu(cpu, priv->scratchpad.cpumask);
@@ -3349,7 +3335,7 @@ int mlx5e_open_drop_rq(struct mlx5e_priv *priv,
        struct mlx5e_cq *cq = &drop_rq->cq;
        int err;
 
-       mlx5e_build_drop_rq_param(mdev, &rq_param);
+       mlx5e_build_drop_rq_param(mdev, priv->drop_rq_q_counter, &rq_param);
 
        err = mlx5e_alloc_drop_cq(priv, cq, &cq_param);
        if (err)
@@ -3363,7 +3349,7 @@ int mlx5e_open_drop_rq(struct mlx5e_priv *priv,
        if (err)
                goto err_destroy_cq;
 
-       err = mlx5e_create_rq(drop_rq, &rq_param, priv->drop_rq_q_counter);
+       err = mlx5e_create_rq(drop_rq, &rq_param);
        if (err)
                goto err_free_rq;
 
@@ -3799,7 +3785,7 @@ mlx5e_get_stats(struct net_device *dev, struct rtnl_link_stats64 *stats)
        stats->tx_errors = stats->tx_aborted_errors + stats->tx_carrier_errors;
 }
 
-void mlx5e_nic_set_rx_mode(struct mlx5e_priv *priv)
+static void mlx5e_nic_set_rx_mode(struct mlx5e_priv *priv)
 {
        if (mlx5e_is_uplink_rep(priv))
                return; /* no rx mode for uplink rep */
@@ -5004,15 +4990,6 @@ const struct net_device_ops mlx5e_netdev_ops = {
 #endif
 };
 
-const struct net_device_ops mlx5e_mgmt_netdev_ops = {
-       .ndo_open               = mlx5e_open,
-       .ndo_stop               = mlx5e_close,
-       .ndo_start_xmit         = mlx5e_xmit,
-       .ndo_get_stats64        = mlx5e_get_stats,
-       .ndo_change_mtu         = mlx5e_change_nic_mtu,
-       .ndo_set_rx_mode        = mlx5e_set_rx_mode,
-};
-
 static u32 mlx5e_choose_lro_timeout(struct mlx5_core_dev *mdev, u32 wanted_timeout)
 {
        int i;
@@ -5152,11 +5129,7 @@ static void mlx5e_build_nic_netdev(struct net_device *netdev)
 
        SET_NETDEV_DEV(netdev, mdev->device);
 
-       if (mlx5_core_is_mgmt_pf(mdev))
-               netdev->netdev_ops = &mlx5e_mgmt_netdev_ops;
-       else
-               netdev->netdev_ops = &mlx5e_netdev_ops;
-
+       netdev->netdev_ops = &mlx5e_netdev_ops;
        netdev->xdp_metadata_ops = &mlx5e_xdp_metadata_ops;
        netdev->xsk_tx_metadata_ops = &mlx5e_xsk_tx_metadata_ops;
 
@@ -5291,17 +5264,13 @@ void mlx5e_create_q_counters(struct mlx5e_priv *priv)
        u32 out[MLX5_ST_SZ_DW(alloc_q_counter_out)] = {};
        u32 in[MLX5_ST_SZ_DW(alloc_q_counter_in)] = {};
        struct mlx5_core_dev *mdev = priv->mdev;
-       struct mlx5_core_dev *pos;
-       int err, i;
+       int err;
 
        MLX5_SET(alloc_q_counter_in, in, opcode, MLX5_CMD_OP_ALLOC_Q_COUNTER);
-
-       mlx5_sd_for_each_dev(i, mdev, pos) {
-               err = mlx5_cmd_exec_inout(pos, alloc_q_counter, in, out);
-               if (!err)
-                       priv->q_counter[i] =
-                               MLX5_GET(alloc_q_counter_out, out, counter_set_id);
-       }
+       err = mlx5_cmd_exec_inout(mdev, alloc_q_counter, in, out);
+       if (!err)
+               priv->q_counter =
+                       MLX5_GET(alloc_q_counter_out, out, counter_set_id);
 
        err = mlx5_cmd_exec_inout(mdev, alloc_q_counter, in, out);
        if (!err)
@@ -5312,17 +5281,13 @@ void mlx5e_create_q_counters(struct mlx5e_priv *priv)
 void mlx5e_destroy_q_counters(struct mlx5e_priv *priv)
 {
        u32 in[MLX5_ST_SZ_DW(dealloc_q_counter_in)] = {};
-       struct mlx5_core_dev *pos;
-       int i;
 
        MLX5_SET(dealloc_q_counter_in, in, opcode,
                 MLX5_CMD_OP_DEALLOC_Q_COUNTER);
-       mlx5_sd_for_each_dev(i, priv->mdev, pos) {
-               if (priv->q_counter[i]) {
-                       MLX5_SET(dealloc_q_counter_in, in, counter_set_id,
-                                priv->q_counter[i]);
-                       mlx5_cmd_exec_in(pos, dealloc_q_counter, in);
-               }
+       if (priv->q_counter) {
+               MLX5_SET(dealloc_q_counter_in, in, counter_set_id,
+                        priv->q_counter);
+               mlx5_cmd_exec_in(priv->mdev, dealloc_q_counter, in);
        }
 
        if (priv->drop_rq_q_counter) {
@@ -5406,8 +5371,6 @@ static int mlx5e_init_nic_rx(struct mlx5e_priv *priv)
        features = MLX5E_RX_RES_FEATURE_PTP;
        if (mlx5_tunnel_inner_ft_supported(mdev))
                features |= MLX5E_RX_RES_FEATURE_INNER_FT;
-       if (mlx5_get_sd(priv->mdev))
-               features |= MLX5E_RX_RES_FEATURE_MULTI_VHCA;
 
        priv->rx_res = mlx5e_rx_res_create(priv->mdev, features, priv->max_nch, priv->drop_rq.rqn,
                                           &priv->channels.params.packet_merge,
@@ -6017,52 +5980,28 @@ void mlx5e_destroy_netdev(struct mlx5e_priv *priv)
        free_netdev(netdev);
 }
 
-static int _mlx5e_resume(struct auxiliary_device *adev)
+static int mlx5e_resume(struct auxiliary_device *adev)
 {
        struct mlx5_adev *edev = container_of(adev, struct mlx5_adev, adev);
        struct mlx5e_dev *mlx5e_dev = auxiliary_get_drvdata(adev);
        struct mlx5e_priv *priv = mlx5e_dev->priv;
        struct net_device *netdev = priv->netdev;
        struct mlx5_core_dev *mdev = edev->mdev;
-       struct mlx5_core_dev *pos, *to;
-       int err, i;
+       int err;
 
        if (netif_device_present(netdev))
                return 0;
 
-       mlx5_sd_for_each_dev(i, mdev, pos) {
-               err = mlx5e_create_mdev_resources(pos, true);
-               if (err)
-                       goto err_destroy_mdev_res;
-       }
-
-       err = mlx5e_attach_netdev(priv);
+       err = mlx5e_create_mdev_resources(mdev);
        if (err)
-               goto err_destroy_mdev_res;
-
-       return 0;
-
-err_destroy_mdev_res:
-       to = pos;
-       mlx5_sd_for_each_dev_to(i, mdev, to, pos)
-               mlx5e_destroy_mdev_resources(pos);
-       return err;
-}
-
-static int mlx5e_resume(struct auxiliary_device *adev)
-{
-       struct mlx5_adev *edev = container_of(adev, struct mlx5_adev, adev);
-       struct mlx5_core_dev *mdev = edev->mdev;
-       struct auxiliary_device *actual_adev;
-       int err;
+               return err;
 
-       err = mlx5_sd_init(mdev);
-       if (err)
+       err = mlx5e_attach_netdev(priv);
+       if (err) {
+               mlx5e_destroy_mdev_resources(mdev);
                return err;
+       }
 
-       actual_adev = mlx5_sd_get_adev(mdev, adev, edev->idx);
-       if (actual_adev)
-               return _mlx5e_resume(actual_adev);
        return 0;
 }
 
@@ -6072,53 +6011,33 @@ static int _mlx5e_suspend(struct auxiliary_device *adev)
        struct mlx5e_priv *priv = mlx5e_dev->priv;
        struct net_device *netdev = priv->netdev;
        struct mlx5_core_dev *mdev = priv->mdev;
-       struct mlx5_core_dev *pos;
-       int i;
 
        if (!netif_device_present(netdev)) {
                if (test_bit(MLX5E_STATE_DESTROYING, &priv->state))
-                       mlx5_sd_for_each_dev(i, mdev, pos)
-                               mlx5e_destroy_mdev_resources(pos);
+                       mlx5e_destroy_mdev_resources(mdev);
                return -ENODEV;
        }
 
        mlx5e_detach_netdev(priv);
-       mlx5_sd_for_each_dev(i, mdev, pos)
-               mlx5e_destroy_mdev_resources(pos);
-
+       mlx5e_destroy_mdev_resources(mdev);
        return 0;
 }
 
 static int mlx5e_suspend(struct auxiliary_device *adev, pm_message_t state)
 {
-       struct mlx5_adev *edev = container_of(adev, struct mlx5_adev, adev);
-       struct mlx5_core_dev *mdev = edev->mdev;
-       struct auxiliary_device *actual_adev;
-       int err = 0;
-
-       actual_adev = mlx5_sd_get_adev(mdev, adev, edev->idx);
-       if (actual_adev)
-               err = _mlx5e_suspend(actual_adev);
-
-       mlx5_sd_cleanup(mdev);
-       return err;
+       return _mlx5e_suspend(adev);
 }
 
 static int _mlx5e_probe(struct auxiliary_device *adev)
 {
        struct mlx5_adev *edev = container_of(adev, struct mlx5_adev, adev);
+       const struct mlx5e_profile *profile = &mlx5e_nic_profile;
        struct mlx5_core_dev *mdev = edev->mdev;
-       const struct mlx5e_profile *profile;
        struct mlx5e_dev *mlx5e_dev;
        struct net_device *netdev;
        struct mlx5e_priv *priv;
        int err;
 
-       if (mlx5_core_is_mgmt_pf(mdev))
-               profile = &mlx5e_mgmt_pf_nic_profile;
-       else
-               profile = &mlx5e_nic_profile;
-
        mlx5e_dev = mlx5e_create_devlink(&adev->dev, mdev);
        if (IS_ERR(mlx5e_dev))
                return PTR_ERR(mlx5e_dev);
@@ -6152,9 +6071,9 @@ static int _mlx5e_probe(struct auxiliary_device *adev)
                goto err_destroy_netdev;
        }
 
-       err = _mlx5e_resume(adev);
+       err = mlx5e_resume(adev);
        if (err) {
-               mlx5_core_err(mdev, "_mlx5e_resume failed, %d\n", err);
+               mlx5_core_err(mdev, "mlx5e_resume failed, %d\n", err);
                goto err_profile_cleanup;
        }
 
@@ -6185,29 +6104,15 @@ static int _mlx5e_probe(struct auxiliary_device *adev)
 static int mlx5e_probe(struct auxiliary_device *adev,
                       const struct auxiliary_device_id *id)
 {
-       struct mlx5_adev *edev = container_of(adev, struct mlx5_adev, adev);
-       struct mlx5_core_dev *mdev = edev->mdev;
-       struct auxiliary_device *actual_adev;
-       int err;
-
-       err = mlx5_sd_init(mdev);
-       if (err)
-               return err;
-
-       actual_adev = mlx5_sd_get_adev(mdev, adev, edev->idx);
-       if (actual_adev)
-               return _mlx5e_probe(actual_adev);
-       return 0;
+       return _mlx5e_probe(adev);
 }
 
-static void _mlx5e_remove(struct auxiliary_device *adev)
+static void mlx5e_remove(struct auxiliary_device *adev)
 {
-       struct mlx5_adev *edev = container_of(adev, struct mlx5_adev, adev);
        struct mlx5e_dev *mlx5e_dev = auxiliary_get_drvdata(adev);
        struct mlx5e_priv *priv = mlx5e_dev->priv;
-       struct mlx5_core_dev *mdev = edev->mdev;
 
-       mlx5_core_uplink_netdev_set(mdev, NULL);
+       mlx5_core_uplink_netdev_set(priv->mdev, NULL);
        mlx5e_dcbnl_delete_app(priv);
        unregister_netdev(priv->netdev);
        _mlx5e_suspend(adev);
@@ -6217,19 +6122,6 @@ static void _mlx5e_remove(struct auxiliary_device *adev)
        mlx5e_destroy_devlink(mlx5e_dev);
 }
 
-static void mlx5e_remove(struct auxiliary_device *adev)
-{
-       struct mlx5_adev *edev = container_of(adev, struct mlx5_adev, adev);
-       struct mlx5_core_dev *mdev = edev->mdev;
-       struct auxiliary_device *actual_adev;
-
-       actual_adev = mlx5_sd_get_adev(mdev, adev, edev->idx);
-       if (actual_adev)
-               _mlx5e_remove(actual_adev);
-
-       mlx5_sd_cleanup(mdev);
-}
-
 static const struct auxiliary_device_id mlx5e_id_table[] = {
        { .name = MLX5_ADEV_NAME ".eth", },
        {},
index f3d0898bdbc6e28b67db27e860354e0f1b7ba404..4b96ad657145b8dac0492d9c2a76241ae9b11bbb 100644 (file)
@@ -561,23 +561,11 @@ static const struct counter_desc drop_rq_stats_desc[] = {
 #define NUM_Q_COUNTERS                 ARRAY_SIZE(q_stats_desc)
 #define NUM_DROP_RQ_COUNTERS           ARRAY_SIZE(drop_rq_stats_desc)
 
-static bool q_counter_any(struct mlx5e_priv *priv)
-{
-       struct mlx5_core_dev *pos;
-       int i;
-
-       mlx5_sd_for_each_dev(i, priv->mdev, pos)
-               if (priv->q_counter[i++])
-                       return true;
-
-       return false;
-}
-
 static MLX5E_DECLARE_STATS_GRP_OP_NUM_STATS(qcnt)
 {
        int num_stats = 0;
 
-       if (q_counter_any(priv))
+       if (priv->q_counter)
                num_stats += NUM_Q_COUNTERS;
 
        if (priv->drop_rq_q_counter)
@@ -590,7 +578,7 @@ static MLX5E_DECLARE_STATS_GRP_OP_FILL_STRS(qcnt)
 {
        int i;
 
-       for (i = 0; i < NUM_Q_COUNTERS && q_counter_any(priv); i++)
+       for (i = 0; i < NUM_Q_COUNTERS && priv->q_counter; i++)
                strcpy(data + (idx++) * ETH_GSTRING_LEN,
                       q_stats_desc[i].format);
 
@@ -605,7 +593,7 @@ static MLX5E_DECLARE_STATS_GRP_OP_FILL_STATS(qcnt)
 {
        int i;
 
-       for (i = 0; i < NUM_Q_COUNTERS && q_counter_any(priv); i++)
+       for (i = 0; i < NUM_Q_COUNTERS && priv->q_counter; i++)
                data[idx++] = MLX5E_READ_CTR32_CPU(&priv->stats.qcnt,
                                                   q_stats_desc, i);
        for (i = 0; i < NUM_DROP_RQ_COUNTERS && priv->drop_rq_q_counter; i++)
@@ -619,23 +607,18 @@ static MLX5E_DECLARE_STATS_GRP_OP_UPDATE_STATS(qcnt)
        struct mlx5e_qcounter_stats *qcnt = &priv->stats.qcnt;
        u32 out[MLX5_ST_SZ_DW(query_q_counter_out)] = {};
        u32 in[MLX5_ST_SZ_DW(query_q_counter_in)] = {};
-       struct mlx5_core_dev *pos;
-       u32 rx_out_of_buffer = 0;
-       int ret, i;
+       int ret;
 
        MLX5_SET(query_q_counter_in, in, opcode, MLX5_CMD_OP_QUERY_Q_COUNTER);
 
-       mlx5_sd_for_each_dev(i, priv->mdev, pos) {
-               if (priv->q_counter[i]) {
-                       MLX5_SET(query_q_counter_in, in, counter_set_id,
-                                priv->q_counter[i]);
-                       ret = mlx5_cmd_exec_inout(pos, query_q_counter, in, out);
-                       if (!ret)
-                               rx_out_of_buffer += MLX5_GET(query_q_counter_out,
-                                                            out, out_of_buffer);
-               }
+       if (priv->q_counter) {
+               MLX5_SET(query_q_counter_in, in, counter_set_id,
+                        priv->q_counter);
+               ret = mlx5_cmd_exec_inout(priv->mdev, query_q_counter, in, out);
+               if (!ret)
+                       qcnt->rx_out_of_buffer = MLX5_GET(query_q_counter_out,
+                                                         out, out_of_buffer);
        }
-       qcnt->rx_out_of_buffer = rx_out_of_buffer;
 
        if (priv->drop_rq_q_counter) {
                MLX5_SET(query_q_counter_in, in, counter_set_id,
index b8ceb972df9ed1d3a926c61d5054b07007facd5f..30932c9c9a8f08bca2c8025f0a5685f79695e54d 100644 (file)
@@ -766,7 +766,7 @@ static int mlx5e_hairpin_create_indirect_rqt(struct mlx5e_hairpin *hp)
                return err;
 
        mlx5e_rss_params_indir_init_uniform(&indir, hp->num_channels);
-       err = mlx5e_rqt_init_indir(&hp->indir_rqt, mdev, hp->pair->rqn, NULL, hp->num_channels,
+       err = mlx5e_rqt_init_indir(&hp->indir_rqt, mdev, hp->pair->rqn, hp->num_channels,
                                   mlx5e_rx_res_get_current_hash(priv->rx_res).hfunc,
                                   &indir);
 
@@ -1169,7 +1169,7 @@ static int mlx5e_hairpin_flow_add(struct mlx5e_priv *priv,
                        MLX5_CAP_GEN(priv->mdev, log_min_hairpin_wq_data_sz),
                        MLX5_CAP_GEN(priv->mdev, log_max_hairpin_wq_data_sz));
 
-       params.q_counter = priv->q_counter[0];
+       params.q_counter = priv->q_counter;
        err = devl_param_driverinit_value_get(
                devlink, MLX5_DEVLINK_PARAM_ID_HAIRPIN_NUM_QUEUES, &val);
        if (err) {
index 3bf419d06d53498d21949e5bbea60e4330868e85..3047d7015c5256726338904432ce56845c59c39c 100644 (file)
@@ -1665,7 +1665,7 @@ int mlx5_esw_sf_max_hpf_functions(struct mlx5_core_dev *dev, u16 *max_sfs, u16 *
        void *hca_caps;
        int err;
 
-       if (!mlx5_core_is_ecpf(dev) || mlx5_core_is_mgmt_pf(dev)) {
+       if (!mlx5_core_is_ecpf(dev)) {
                *max_sfs = 0;
                return 0;
        }
index d77be1b4dd9c557b70ba74e3ebb37ac7994a4486..58845121954c19db3bdc454046c161654ef37308 100644 (file)
@@ -783,7 +783,7 @@ static int mlx5_rdma_setup_rn(struct ib_device *ibdev, u32 port_num,
                }
 
                /* This should only be called once per mdev */
-               err = mlx5e_create_mdev_resources(mdev, false);
+               err = mlx5e_create_mdev_resources(mdev);
                if (err)
                        goto destroy_ht;
        }
index d58032dd0df74c108b78d66bd21a89b31663c5f9..ec32b686f58654ed9628d13d8bf5ecf292420a4a 100644 (file)
@@ -10,7 +10,6 @@ enum mlx5_devcom_component {
        MLX5_DEVCOM_ESW_OFFLOADS,
        MLX5_DEVCOM_MPV,
        MLX5_DEVCOM_HCA_PORTS,
-       MLX5_DEVCOM_SD_GROUP,
        MLX5_DEVCOM_NUM_COMPONENTS,
 };
 
index 37d5f445598c7bff34f1a09b8d3c2ac8749d923b..2b5826a785c4f747b02135ab0f7872fa46c904af 100644 (file)
@@ -54,16 +54,4 @@ static inline struct net_device *mlx5_uplink_netdev_get(struct mlx5_core_dev *md
 {
        return mdev->mlx5e_res.uplink_netdev;
 }
-
-struct mlx5_sd;
-
-static inline struct mlx5_sd *mlx5_get_sd(struct mlx5_core_dev *dev)
-{
-       return dev->sd;
-}
-
-static inline void mlx5_set_sd(struct mlx5_core_dev *dev, struct mlx5_sd *sd)
-{
-       dev->sd = sd;
-}
 #endif
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/lib/sd.c b/drivers/net/ethernet/mellanox/mlx5/core/lib/sd.c
deleted file mode 100644 (file)
index f689422..0000000
+++ /dev/null
@@ -1,487 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB
-/* Copyright (c) 2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved. */
-
-#include "lib/sd.h"
-#include "mlx5_core.h"
-#include "lib/mlx5.h"
-#include "fs_cmd.h"
-#include <linux/mlx5/vport.h>
-
-#define sd_info(__dev, format, ...) \
-       dev_info((__dev)->device, "Socket-Direct: " format, ##__VA_ARGS__)
-#define sd_warn(__dev, format, ...) \
-       dev_warn((__dev)->device, "Socket-Direct: " format, ##__VA_ARGS__)
-
-struct mlx5_sd {
-       u32 group_id;
-       u8 host_buses;
-       struct mlx5_devcom_comp_dev *devcom;
-       bool primary;
-       union {
-               struct { /* primary */
-                       struct mlx5_core_dev *secondaries[MLX5_SD_MAX_GROUP_SZ - 1];
-                       struct mlx5_flow_table *tx_ft;
-               };
-               struct { /* secondary */
-                       struct mlx5_core_dev *primary_dev;
-                       u32 alias_obj_id;
-               };
-       };
-};
-
-static int mlx5_sd_get_host_buses(struct mlx5_core_dev *dev)
-{
-       struct mlx5_sd *sd = mlx5_get_sd(dev);
-
-       if (!sd)
-               return 1;
-
-       return sd->host_buses;
-}
-
-static struct mlx5_core_dev *mlx5_sd_get_primary(struct mlx5_core_dev *dev)
-{
-       struct mlx5_sd *sd = mlx5_get_sd(dev);
-
-       if (!sd)
-               return dev;
-
-       return sd->primary ? dev : sd->primary_dev;
-}
-
-struct mlx5_core_dev *
-mlx5_sd_primary_get_peer(struct mlx5_core_dev *primary, int idx)
-{
-       struct mlx5_sd *sd;
-
-       if (idx == 0)
-               return primary;
-
-       if (idx >= mlx5_sd_get_host_buses(primary))
-               return NULL;
-
-       sd = mlx5_get_sd(primary);
-       return sd->secondaries[idx - 1];
-}
-
-int mlx5_sd_ch_ix_get_dev_ix(struct mlx5_core_dev *dev, int ch_ix)
-{
-       return ch_ix % mlx5_sd_get_host_buses(dev);
-}
-
-int mlx5_sd_ch_ix_get_vec_ix(struct mlx5_core_dev *dev, int ch_ix)
-{
-       return ch_ix / mlx5_sd_get_host_buses(dev);
-}
-
-struct mlx5_core_dev *mlx5_sd_ch_ix_get_dev(struct mlx5_core_dev *primary, int ch_ix)
-{
-       int mdev_idx = mlx5_sd_ch_ix_get_dev_ix(primary, ch_ix);
-
-       return mlx5_sd_primary_get_peer(primary, mdev_idx);
-}
-
-static bool ft_create_alias_supported(struct mlx5_core_dev *dev)
-{
-       u64 obj_allowed = MLX5_CAP_GEN_2_64(dev, allowed_object_for_other_vhca_access);
-       u32 obj_supp = MLX5_CAP_GEN_2(dev, cross_vhca_object_to_object_supported);
-
-       if (!(obj_supp &
-           MLX5_CROSS_VHCA_OBJ_TO_OBJ_SUPPORTED_LOCAL_FLOW_TABLE_ROOT_TO_REMOTE_FLOW_TABLE))
-               return false;
-
-       if (!(obj_allowed & MLX5_ALLOWED_OBJ_FOR_OTHER_VHCA_ACCESS_FLOW_TABLE))
-               return false;
-
-       return true;
-}
-
-static bool mlx5_sd_is_supported(struct mlx5_core_dev *dev, u8 host_buses)
-{
-       /* Feature is currently implemented for PFs only */
-       if (!mlx5_core_is_pf(dev))
-               return false;
-
-       /* Honor the SW implementation limit */
-       if (host_buses > MLX5_SD_MAX_GROUP_SZ)
-               return false;
-
-       /* Disconnect secondaries from the network */
-       if (!MLX5_CAP_GEN(dev, eswitch_manager))
-               return false;
-       if (!MLX5_CAP_GEN(dev, silent_mode))
-               return false;
-
-       /* RX steering from primary to secondaries */
-       if (!MLX5_CAP_GEN(dev, cross_vhca_rqt))
-               return false;
-       if (host_buses > MLX5_CAP_GEN_2(dev, max_rqt_vhca_id))
-               return false;
-
-       /* TX steering from secondaries to primary */
-       if (!ft_create_alias_supported(dev))
-               return false;
-       if (!MLX5_CAP_FLOWTABLE_NIC_TX(dev, reset_root_to_default))
-               return false;
-
-       return true;
-}
-
-static int mlx5_query_sd(struct mlx5_core_dev *dev, bool *sdm,
-                        u8 *host_buses, u8 *sd_group)
-{
-       u32 out[MLX5_ST_SZ_DW(mpir_reg)];
-       int err;
-
-       err = mlx5_query_mpir_reg(dev, out);
-       if (err)
-               return err;
-
-       err = mlx5_query_nic_vport_sd_group(dev, sd_group);
-       if (err)
-               return err;
-
-       *sdm = MLX5_GET(mpir_reg, out, sdm);
-       *host_buses = MLX5_GET(mpir_reg, out, host_buses);
-
-       return 0;
-}
-
-static u32 mlx5_sd_group_id(struct mlx5_core_dev *dev, u8 sd_group)
-{
-       return (u32)((MLX5_CAP_GEN(dev, native_port_num) << 8) | sd_group);
-}
-
-static int sd_init(struct mlx5_core_dev *dev)
-{
-       u8 host_buses, sd_group;
-       struct mlx5_sd *sd;
-       u32 group_id;
-       bool sdm;
-       int err;
-
-       err = mlx5_query_sd(dev, &sdm, &host_buses, &sd_group);
-       if (err)
-               return err;
-
-       if (!sdm)
-               return 0;
-
-       if (!sd_group)
-               return 0;
-
-       group_id = mlx5_sd_group_id(dev, sd_group);
-
-       if (!mlx5_sd_is_supported(dev, host_buses)) {
-               sd_warn(dev, "can't support requested netdev combining for group id 0x%x), skipping\n",
-                       group_id);
-               return 0;
-       }
-
-       sd = kzalloc(sizeof(*sd), GFP_KERNEL);
-       if (!sd)
-               return -ENOMEM;
-
-       sd->host_buses = host_buses;
-       sd->group_id = group_id;
-
-       mlx5_set_sd(dev, sd);
-
-       return 0;
-}
-
-static void sd_cleanup(struct mlx5_core_dev *dev)
-{
-       struct mlx5_sd *sd = mlx5_get_sd(dev);
-
-       mlx5_set_sd(dev, NULL);
-       kfree(sd);
-}
-
-static int sd_register(struct mlx5_core_dev *dev)
-{
-       struct mlx5_devcom_comp_dev *devcom, *pos;
-       struct mlx5_core_dev *peer, *primary;
-       struct mlx5_sd *sd, *primary_sd;
-       int err, i;
-
-       sd = mlx5_get_sd(dev);
-       devcom = mlx5_devcom_register_component(dev->priv.devc, MLX5_DEVCOM_SD_GROUP,
-                                               sd->group_id, NULL, dev);
-       if (!devcom)
-               return -ENOMEM;
-
-       sd->devcom = devcom;
-
-       if (mlx5_devcom_comp_get_size(devcom) != sd->host_buses)
-               return 0;
-
-       mlx5_devcom_comp_lock(devcom);
-       mlx5_devcom_comp_set_ready(devcom, true);
-       mlx5_devcom_comp_unlock(devcom);
-
-       if (!mlx5_devcom_for_each_peer_begin(devcom)) {
-               err = -ENODEV;
-               goto err_devcom_unreg;
-       }
-
-       primary = dev;
-       mlx5_devcom_for_each_peer_entry(devcom, peer, pos)
-               if (peer->pdev->bus->number < primary->pdev->bus->number)
-                       primary = peer;
-
-       primary_sd = mlx5_get_sd(primary);
-       primary_sd->primary = true;
-       i = 0;
-       /* loop the secondaries */
-       mlx5_devcom_for_each_peer_entry(primary_sd->devcom, peer, pos) {
-               struct mlx5_sd *peer_sd = mlx5_get_sd(peer);
-
-               primary_sd->secondaries[i++] = peer;
-               peer_sd->primary = false;
-               peer_sd->primary_dev = primary;
-       }
-
-       mlx5_devcom_for_each_peer_end(devcom);
-       return 0;
-
-err_devcom_unreg:
-       mlx5_devcom_comp_lock(sd->devcom);
-       mlx5_devcom_comp_set_ready(sd->devcom, false);
-       mlx5_devcom_comp_unlock(sd->devcom);
-       mlx5_devcom_unregister_component(sd->devcom);
-       return err;
-}
-
-static void sd_unregister(struct mlx5_core_dev *dev)
-{
-       struct mlx5_sd *sd = mlx5_get_sd(dev);
-
-       mlx5_devcom_comp_lock(sd->devcom);
-       mlx5_devcom_comp_set_ready(sd->devcom, false);
-       mlx5_devcom_comp_unlock(sd->devcom);
-       mlx5_devcom_unregister_component(sd->devcom);
-}
-
-static int sd_cmd_set_primary(struct mlx5_core_dev *primary, u8 *alias_key)
-{
-       struct mlx5_cmd_allow_other_vhca_access_attr allow_attr = {};
-       struct mlx5_sd *sd = mlx5_get_sd(primary);
-       struct mlx5_flow_table_attr ft_attr = {};
-       struct mlx5_flow_namespace *nic_ns;
-       struct mlx5_flow_table *ft;
-       int err;
-
-       nic_ns = mlx5_get_flow_namespace(primary, MLX5_FLOW_NAMESPACE_EGRESS);
-       if (!nic_ns)
-               return -EOPNOTSUPP;
-
-       ft = mlx5_create_flow_table(nic_ns, &ft_attr);
-       if (IS_ERR(ft)) {
-               err = PTR_ERR(ft);
-               return err;
-       }
-       sd->tx_ft = ft;
-       memcpy(allow_attr.access_key, alias_key, ACCESS_KEY_LEN);
-       allow_attr.obj_type = MLX5_GENERAL_OBJECT_TYPES_FLOW_TABLE_ALIAS;
-       allow_attr.obj_id = (ft->type << FT_ID_FT_TYPE_OFFSET) | ft->id;
-
-       err = mlx5_cmd_allow_other_vhca_access(primary, &allow_attr);
-       if (err) {
-               mlx5_core_err(primary, "Failed to allow other vhca access err=%d\n",
-                             err);
-               mlx5_destroy_flow_table(ft);
-               return err;
-       }
-
-       return 0;
-}
-
-static void sd_cmd_unset_primary(struct mlx5_core_dev *primary)
-{
-       struct mlx5_sd *sd = mlx5_get_sd(primary);
-
-       mlx5_destroy_flow_table(sd->tx_ft);
-}
-
-static int sd_secondary_create_alias_ft(struct mlx5_core_dev *secondary,
-                                       struct mlx5_core_dev *primary,
-                                       struct mlx5_flow_table *ft,
-                                       u32 *obj_id, u8 *alias_key)
-{
-       u32 aliased_object_id = (ft->type << FT_ID_FT_TYPE_OFFSET) | ft->id;
-       u16 vhca_id_to_be_accessed = MLX5_CAP_GEN(primary, vhca_id);
-       struct mlx5_cmd_alias_obj_create_attr alias_attr = {};
-       int ret;
-
-       memcpy(alias_attr.access_key, alias_key, ACCESS_KEY_LEN);
-       alias_attr.obj_id = aliased_object_id;
-       alias_attr.obj_type = MLX5_GENERAL_OBJECT_TYPES_FLOW_TABLE_ALIAS;
-       alias_attr.vhca_id = vhca_id_to_be_accessed;
-       ret = mlx5_cmd_alias_obj_create(secondary, &alias_attr, obj_id);
-       if (ret) {
-               mlx5_core_err(secondary, "Failed to create alias object err=%d\n",
-                             ret);
-               return ret;
-       }
-
-       return 0;
-}
-
-static void sd_secondary_destroy_alias_ft(struct mlx5_core_dev *secondary)
-{
-       struct mlx5_sd *sd = mlx5_get_sd(secondary);
-
-       mlx5_cmd_alias_obj_destroy(secondary, sd->alias_obj_id,
-                                  MLX5_GENERAL_OBJECT_TYPES_FLOW_TABLE_ALIAS);
-}
-
-static int sd_cmd_set_secondary(struct mlx5_core_dev *secondary,
-                               struct mlx5_core_dev *primary,
-                               u8 *alias_key)
-{
-       struct mlx5_sd *primary_sd = mlx5_get_sd(primary);
-       struct mlx5_sd *sd = mlx5_get_sd(secondary);
-       int err;
-
-       err = mlx5_fs_cmd_set_l2table_entry_silent(secondary, 1);
-       if (err)
-               return err;
-
-       err = sd_secondary_create_alias_ft(secondary, primary, primary_sd->tx_ft,
-                                          &sd->alias_obj_id, alias_key);
-       if (err)
-               goto err_unset_silent;
-
-       err = mlx5_fs_cmd_set_tx_flow_table_root(secondary, sd->alias_obj_id, false);
-       if (err)
-               goto err_destroy_alias_ft;
-
-       return 0;
-
-err_destroy_alias_ft:
-       sd_secondary_destroy_alias_ft(secondary);
-err_unset_silent:
-       mlx5_fs_cmd_set_l2table_entry_silent(secondary, 0);
-       return err;
-}
-
-static void sd_cmd_unset_secondary(struct mlx5_core_dev *secondary)
-{
-       mlx5_fs_cmd_set_tx_flow_table_root(secondary, 0, true);
-       sd_secondary_destroy_alias_ft(secondary);
-       mlx5_fs_cmd_set_l2table_entry_silent(secondary, 0);
-}
-
-static void sd_print_group(struct mlx5_core_dev *primary)
-{
-       struct mlx5_sd *sd = mlx5_get_sd(primary);
-       struct mlx5_core_dev *pos;
-       int i;
-
-       sd_info(primary, "group id %#x, primary %s, vhca %u\n",
-               sd->group_id, pci_name(primary->pdev),
-               MLX5_CAP_GEN(primary, vhca_id));
-       mlx5_sd_for_each_secondary(i, primary, pos)
-               sd_info(primary, "group id %#x, secondary#%d %s, vhca %u\n",
-                       sd->group_id, i - 1, pci_name(pos->pdev),
-                       MLX5_CAP_GEN(pos, vhca_id));
-}
-
-int mlx5_sd_init(struct mlx5_core_dev *dev)
-{
-       struct mlx5_core_dev *primary, *pos, *to;
-       struct mlx5_sd *sd = mlx5_get_sd(dev);
-       u8 alias_key[ACCESS_KEY_LEN];
-       int err, i;
-
-       err = sd_init(dev);
-       if (err)
-               return err;
-
-       sd = mlx5_get_sd(dev);
-       if (!sd)
-               return 0;
-
-       err = sd_register(dev);
-       if (err)
-               goto err_sd_cleanup;
-
-       if (!mlx5_devcom_comp_is_ready(sd->devcom))
-               return 0;
-
-       primary = mlx5_sd_get_primary(dev);
-
-       for (i = 0; i < ACCESS_KEY_LEN; i++)
-               alias_key[i] = get_random_u8();
-
-       err = sd_cmd_set_primary(primary, alias_key);
-       if (err)
-               goto err_sd_unregister;
-
-       mlx5_sd_for_each_secondary(i, primary, pos) {
-               err = sd_cmd_set_secondary(pos, primary, alias_key);
-               if (err)
-                       goto err_unset_secondaries;
-       }
-
-       sd_info(primary, "group id %#x, size %d, combined\n",
-               sd->group_id, mlx5_devcom_comp_get_size(sd->devcom));
-       sd_print_group(primary);
-
-       return 0;
-
-err_unset_secondaries:
-       to = pos;
-       mlx5_sd_for_each_secondary_to(i, primary, to, pos)
-               sd_cmd_unset_secondary(pos);
-       sd_cmd_unset_primary(primary);
-err_sd_unregister:
-       sd_unregister(dev);
-err_sd_cleanup:
-       sd_cleanup(dev);
-       return err;
-}
-
-void mlx5_sd_cleanup(struct mlx5_core_dev *dev)
-{
-       struct mlx5_sd *sd = mlx5_get_sd(dev);
-       struct mlx5_core_dev *primary, *pos;
-       int i;
-
-       if (!sd)
-               return;
-
-       if (!mlx5_devcom_comp_is_ready(sd->devcom))
-               goto out;
-
-       primary = mlx5_sd_get_primary(dev);
-       mlx5_sd_for_each_secondary(i, primary, pos)
-               sd_cmd_unset_secondary(pos);
-       sd_cmd_unset_primary(primary);
-
-       sd_info(primary, "group id %#x, uncombined\n", sd->group_id);
-out:
-       sd_unregister(dev);
-       sd_cleanup(dev);
-}
-
-struct auxiliary_device *mlx5_sd_get_adev(struct mlx5_core_dev *dev,
-                                         struct auxiliary_device *adev,
-                                         int idx)
-{
-       struct mlx5_sd *sd = mlx5_get_sd(dev);
-       struct mlx5_core_dev *primary;
-
-       if (!sd)
-               return adev;
-
-       if (!mlx5_devcom_comp_is_ready(sd->devcom))
-               return NULL;
-
-       primary = mlx5_sd_get_primary(dev);
-       if (dev == primary)
-               return adev;
-
-       return &primary->priv.adev[idx]->adev;
-}
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/lib/sd.h b/drivers/net/ethernet/mellanox/mlx5/core/lib/sd.h
deleted file mode 100644 (file)
index 137efaf..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */
-/* Copyright (c) 2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved. */
-
-#ifndef __MLX5_LIB_SD_H__
-#define __MLX5_LIB_SD_H__
-
-#define MLX5_SD_MAX_GROUP_SZ 2
-
-struct mlx5_sd;
-
-struct mlx5_core_dev *mlx5_sd_primary_get_peer(struct mlx5_core_dev *primary, int idx);
-int mlx5_sd_ch_ix_get_dev_ix(struct mlx5_core_dev *dev, int ch_ix);
-int mlx5_sd_ch_ix_get_vec_ix(struct mlx5_core_dev *dev, int ch_ix);
-struct mlx5_core_dev *mlx5_sd_ch_ix_get_dev(struct mlx5_core_dev *primary, int ch_ix);
-struct auxiliary_device *mlx5_sd_get_adev(struct mlx5_core_dev *dev,
-                                         struct auxiliary_device *adev,
-                                         int idx);
-
-int mlx5_sd_init(struct mlx5_core_dev *dev);
-void mlx5_sd_cleanup(struct mlx5_core_dev *dev);
-
-#define mlx5_sd_for_each_dev_from_to(i, primary, ix_from, to, pos)     \
-       for (i = ix_from;                                                       \
-            (pos = mlx5_sd_primary_get_peer(primary, i)) && pos != (to); i++)
-
-#define mlx5_sd_for_each_dev(i, primary, pos)                          \
-       mlx5_sd_for_each_dev_from_to(i, primary, 0, NULL, pos)
-
-#define mlx5_sd_for_each_dev_to(i, primary, to, pos)                   \
-       mlx5_sd_for_each_dev_from_to(i, primary, 0, to, pos)
-
-#define mlx5_sd_for_each_secondary(i, primary, pos)                    \
-       mlx5_sd_for_each_dev_from_to(i, primary, 1, NULL, pos)
-
-#define mlx5_sd_for_each_secondary_to(i, primary, to, pos)             \
-       mlx5_sd_for_each_dev_from_to(i, primary, 1, to, pos)
-
-#endif /* __MLX5_LIB_SD_H__ */
index 1005bb6935b65c0d6bb2b68f71744c2857085eed..21753f32786850bd010bded5a13db6eb83fa3ade 100644 (file)
@@ -440,27 +440,6 @@ int mlx5_query_nic_vport_system_image_guid(struct mlx5_core_dev *mdev,
 }
 EXPORT_SYMBOL_GPL(mlx5_query_nic_vport_system_image_guid);
 
-int mlx5_query_nic_vport_sd_group(struct mlx5_core_dev *mdev, u8 *sd_group)
-{
-       int outlen = MLX5_ST_SZ_BYTES(query_nic_vport_context_out);
-       u32 *out;
-       int err;
-
-       out = kvzalloc(outlen, GFP_KERNEL);
-       if (!out)
-               return -ENOMEM;
-
-       err = mlx5_query_nic_vport_context(mdev, 0, out);
-       if (err)
-               goto out;
-
-       *sd_group = MLX5_GET(query_nic_vport_context_out, out,
-                            nic_vport_context.sd_group);
-out:
-       kvfree(out);
-       return err;
-}
-
 int mlx5_query_nic_vport_node_guid(struct mlx5_core_dev *mdev, u64 *node_guid)
 {
        u32 *out;
index 2bba88c67f58322dc286ecd9f30939b95a4bed72..7ee5b79ff3d604e3c1cab554d6e99068e973b5e8 100644 (file)
@@ -681,7 +681,6 @@ struct mlx5e_resources {
                struct mlx5_sq_bfreg       bfreg;
 #define MLX5_MAX_NUM_TC 8
                u32                        tisn[MLX5_MAX_PORTS][MLX5_MAX_NUM_TC];
-               bool                       tisn_valid;
        } hw_objs;
        struct net_device *uplink_netdev;
        struct mutex uplink_netdev_lock;
@@ -822,7 +821,6 @@ struct mlx5_core_dev {
        struct blocking_notifier_head macsec_nh;
 #endif
        u64 num_ipsec_offloads;
-       struct mlx5_sd          *sd;
 };
 
 struct mlx5_db {
@@ -1224,14 +1222,6 @@ static inline bool mlx5_core_is_ecpf(const struct mlx5_core_dev *dev)
        return dev->caps.embedded_cpu;
 }
 
-static inline bool mlx5_core_is_mgmt_pf(const struct mlx5_core_dev *dev)
-{
-       if (!MLX5_CAP_GEN_2(dev, local_mng_port_valid))
-               return false;
-
-       return MLX5_CAP_GEN_2(dev, local_mng_port);
-}
-
 static inline bool
 mlx5_core_is_ecpf_esw_manager(const struct mlx5_core_dev *dev)
 {
index 58656920925441e025bbc5f84e2b1cdfef5c14f5..fee20fc010c2d2984738f8b389c7cbf8218cc4f1 100644 (file)
@@ -1954,10 +1954,8 @@ enum {
 struct mlx5_ifc_cmd_hca_cap_2_bits {
        u8         reserved_at_0[0x80];
 
-       u8         migratable[0x1];
-       u8         reserved_at_81[0x19];
-       u8         local_mng_port[0x1];
-       u8         reserved_at_9b[0x5];
+       u8         migratable[0x1];
+       u8         reserved_at_81[0x1f];
 
        u8         max_reformat_insert_size[0x8];
        u8         max_reformat_insert_offset[0x8];
@@ -1975,13 +1973,7 @@ struct mlx5_ifc_cmd_hca_cap_2_bits {
 
        u8         allowed_object_for_other_vhca_access[0x40];
 
-       u8         reserved_at_140[0x20];
-
-       u8         reserved_at_160[0xa];
-       u8         local_mng_port_valid[0x1];
-       u8         reserved_at_16b[0x15];
-
-       u8         reserved_at_180[0x20];
+       u8         reserved_at_140[0x60];
 
        u8         flow_table_type_2_type[0x8];
        u8         reserved_at_1a8[0x3];
@@ -4038,13 +4030,8 @@ struct mlx5_ifc_nic_vport_context_bits {
        u8         affiliation_criteria[0x4];
        u8         affiliated_vhca_id[0x10];
 
-       u8         reserved_at_60[0xa0];
+       u8         reserved_at_60[0xd0];
 
-       u8         reserved_at_100[0x1];
-       u8         sd_group[0x3];
-       u8         reserved_at_104[0x1c];
-
-       u8         reserved_at_120[0x10];
        u8         mtu[0x10];
 
        u8         system_image_guid[0x40];
@@ -10129,7 +10116,8 @@ struct mlx5_ifc_mpir_reg_bits {
        u8         reserved_at_20[0x20];
 
        u8         local_port[0x8];
-       u8         reserved_at_28[0x18];
+       u8         reserved_at_28[0x15];
+       u8         sd_group[0x3];
 
        u8         reserved_at_60[0x20];
 };
index c36cc6d829267e8b795c5c1ea7f71c1e28dcdaed..fbb9bf4478894c72e0e4a3f4d6404008611cbca0 100644 (file)
@@ -72,7 +72,6 @@ int mlx5_query_nic_vport_mtu(struct mlx5_core_dev *mdev, u16 *mtu);
 int mlx5_modify_nic_vport_mtu(struct mlx5_core_dev *mdev, u16 mtu);
 int mlx5_query_nic_vport_system_image_guid(struct mlx5_core_dev *mdev,
                                           u64 *system_image_guid);
-int mlx5_query_nic_vport_sd_group(struct mlx5_core_dev *mdev, u8 *sd_group);
 int mlx5_query_nic_vport_node_guid(struct mlx5_core_dev *mdev, u64 *node_guid);
 int mlx5_modify_nic_vport_node_guid(struct mlx5_core_dev *mdev,
                                    u16 vport, u64 node_guid);