Skip to content

Commit 3c4159b

Browse files
author
Paolo Abeni
committed
Merge branch 'net-mlx5e-disable-egress-xdp-redirect-in-default'
Tariq Toukan says: ==================== net/mlx5e: Disable egress xdp-redirect in default This small series disables the egress xdp-redirect feature in default. It can still be enabled by loading a dummy XDP program. Patches were previously submitted as part of [1]. This reduces the default number of SQs in each channel from 4 to 3, and saves resources in device and host memory. This also improves the latency of channel configuration operations, like interface up (create channels), interface down (destroy channels), and channels reconfiguration (create new set, destroy old one). Perf numbers: NIC: Connect-X7. Setup: 248 channels, default mtu and rx/tx ring sizes. Interface up + down: Before: 2.246 secs After: 1.798 secs (-0.448 sec) Saves ~1.8 msec per channel. [1] https://lore.kernel.org/all/[email protected]/ ==================== Link: https://patch.msgid.link/[email protected] Signed-off-by: Paolo Abeni <[email protected]>
2 parents 31a3ed4 + d4aa0cc commit 3c4159b

File tree

4 files changed

+20
-30
lines changed

4 files changed

+20
-30
lines changed

drivers/net/ethernet/mellanox/mlx5/core/en.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1249,7 +1249,7 @@ void mlx5e_netdev_attach_nic_profile(struct mlx5e_priv *priv);
12491249
void mlx5e_set_netdev_mtu_boundaries(struct mlx5e_priv *priv);
12501250
void mlx5e_build_nic_params(struct mlx5e_priv *priv, struct mlx5e_xsk *xsk, u16 mtu);
12511251

1252-
void mlx5e_set_xdp_feature(struct net_device *netdev);
1252+
void mlx5e_set_xdp_feature(struct mlx5e_priv *priv);
12531253
netdev_features_t mlx5e_features_check(struct sk_buff *skb,
12541254
struct net_device *netdev,
12551255
netdev_features_t features);

drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2294,7 +2294,6 @@ static int set_pflag_rx_striding_rq(struct net_device *netdev, bool enable)
22942294
struct mlx5e_priv *priv = netdev_priv(netdev);
22952295
struct mlx5_core_dev *mdev = priv->mdev;
22962296
struct mlx5e_params new_params;
2297-
int err;
22982297

22992298
if (enable) {
23002299
/* Checking the regular RQ here; mlx5e_validate_xsk_param called
@@ -2315,14 +2314,7 @@ static int set_pflag_rx_striding_rq(struct net_device *netdev, bool enable)
23152314
MLX5E_SET_PFLAG(&new_params, MLX5E_PFLAG_RX_STRIDING_RQ, enable);
23162315
mlx5e_set_rq_type(mdev, &new_params);
23172316

2318-
err = mlx5e_safe_switch_params(priv, &new_params, NULL, NULL, true);
2319-
if (err)
2320-
return err;
2321-
2322-
/* update XDP supported features */
2323-
mlx5e_set_xdp_feature(netdev);
2324-
2325-
return 0;
2317+
return mlx5e_safe_switch_params(priv, &new_params, NULL, NULL, true);
23262318
}
23272319

23282320
static int set_pflag_rx_no_csum_complete(struct net_device *netdev, bool enable)

drivers/net/ethernet/mellanox/mlx5/core/en_main.c

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2612,7 +2612,7 @@ static int mlx5e_open_queues(struct mlx5e_channel *c,
26122612
if (err)
26132613
goto err_close_icosq_cq;
26142614

2615-
if (netdev_ops->ndo_xdp_xmit) {
2615+
if (netdev_ops->ndo_xdp_xmit && c->xdp) {
26162616
c->xdpsq = mlx5e_open_xdpredirect_sq(c, params, cparam, &ccp);
26172617
if (IS_ERR(c->xdpsq)) {
26182618
err = PTR_ERR(c->xdpsq);
@@ -3365,6 +3365,7 @@ static int mlx5e_switch_priv_params(struct mlx5e_priv *priv,
33653365
}
33663366
}
33673367

3368+
mlx5e_set_xdp_feature(priv);
33683369
return 0;
33693370
}
33703371

@@ -3396,6 +3397,7 @@ static int mlx5e_switch_priv_channels(struct mlx5e_priv *priv,
33963397
}
33973398
}
33983399

3400+
mlx5e_set_xdp_feature(priv);
33993401
if (!MLX5_CAP_GEN(priv->mdev, tis_tir_td_order))
34003402
mlx5e_close_channels(old_chs);
34013403
priv->profile->update_rx(priv);
@@ -4409,23 +4411,22 @@ static int mlx5e_handle_feature(struct net_device *netdev,
44094411
return 0;
44104412
}
44114413

4412-
void mlx5e_set_xdp_feature(struct net_device *netdev)
4414+
void mlx5e_set_xdp_feature(struct mlx5e_priv *priv)
44134415
{
4414-
struct mlx5e_priv *priv = netdev_priv(netdev);
44154416
struct mlx5e_params *params = &priv->channels.params;
4416-
xdp_features_t val;
4417+
struct net_device *netdev = priv->netdev;
4418+
xdp_features_t val = 0;
44174419

4418-
if (!netdev->netdev_ops->ndo_bpf ||
4419-
params->packet_merge.type != MLX5E_PACKET_MERGE_NONE) {
4420-
xdp_set_features_flag_locked(netdev, 0);
4421-
return;
4422-
}
4420+
if (netdev->netdev_ops->ndo_bpf &&
4421+
params->packet_merge.type == MLX5E_PACKET_MERGE_NONE)
4422+
val = NETDEV_XDP_ACT_BASIC | NETDEV_XDP_ACT_REDIRECT |
4423+
NETDEV_XDP_ACT_XSK_ZEROCOPY |
4424+
NETDEV_XDP_ACT_RX_SG;
4425+
4426+
if (netdev->netdev_ops->ndo_xdp_xmit && params->xdp_prog)
4427+
val |= NETDEV_XDP_ACT_NDO_XMIT |
4428+
NETDEV_XDP_ACT_NDO_XMIT_SG;
44234429

4424-
val = NETDEV_XDP_ACT_BASIC | NETDEV_XDP_ACT_REDIRECT |
4425-
NETDEV_XDP_ACT_XSK_ZEROCOPY |
4426-
NETDEV_XDP_ACT_RX_SG |
4427-
NETDEV_XDP_ACT_NDO_XMIT |
4428-
NETDEV_XDP_ACT_NDO_XMIT_SG;
44294430
xdp_set_features_flag_locked(netdev, val);
44304431
}
44314432

@@ -4461,9 +4462,6 @@ int mlx5e_set_features(struct net_device *netdev, netdev_features_t features)
44614462
return -EINVAL;
44624463
}
44634464

4464-
/* update XDP supported features */
4465-
mlx5e_set_xdp_feature(netdev);
4466-
44674465
return 0;
44684466
}
44694467

@@ -5859,7 +5857,7 @@ static void mlx5e_build_nic_netdev(struct net_device *netdev)
58595857
netdev->netmem_tx = true;
58605858

58615859
netif_set_tso_max_size(netdev, GSO_MAX_SIZE);
5862-
mlx5e_set_xdp_feature(netdev);
5860+
mlx5e_set_xdp_feature(priv);
58635861
mlx5e_set_netdev_dev_addr(netdev);
58645862
mlx5e_macsec_build_netdev(priv);
58655863
mlx5e_ipsec_build_netdev(priv);
@@ -5957,7 +5955,7 @@ static int mlx5e_nic_init(struct mlx5_core_dev *mdev,
59575955

59585956
mlx5e_psp_register(priv);
59595957
/* update XDP supported features */
5960-
mlx5e_set_xdp_feature(netdev);
5958+
mlx5e_set_xdp_feature(priv);
59615959

59625960
if (take_rtnl)
59635961
rtnl_unlock();

drivers/net/ethernet/mellanox/mlx5/core/en_rep.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -867,7 +867,7 @@ static void mlx5e_build_rep_params(struct net_device *netdev)
867867
if (take_rtnl)
868868
rtnl_lock();
869869
/* update XDP supported features */
870-
mlx5e_set_xdp_feature(netdev);
870+
mlx5e_set_xdp_feature(priv);
871871
if (take_rtnl)
872872
rtnl_unlock();
873873

0 commit comments

Comments
 (0)