Skip to content

Commit 66c0e13

Browse files
Marek MajtykaAlexei Starovoitov
authored andcommitted
drivers: net: turn on XDP features
A summary of the flags being set for various drivers is given below. Note that XDP_F_REDIRECT_TARGET and XDP_F_FRAG_TARGET are features that can be turned off and on at runtime. This means that these flags may be set and unset under RTNL lock protection by the driver. Hence, READ_ONCE must be used by code loading the flag value. Also, these flags are not used for synchronization against the availability of XDP resources on a device. It is merely a hint, and hence the read may race with the actual teardown of XDP resources on the device. This may change in the future, e.g. operations taking a reference on the XDP resources of the driver, and in turn inhibiting turning off this flag. However, for now, it can only be used as a hint to check whether device supports becoming a redirection target. Turn 'hw-offload' feature flag on for: - netronome (nfp) - netdevsim. Turn 'native' and 'zerocopy' features flags on for: - intel (i40e, ice, ixgbe, igc) - mellanox (mlx5). - stmmac - netronome (nfp) Turn 'native' features flags on for: - amazon (ena) - broadcom (bnxt) - freescale (dpaa, dpaa2, enetc) - funeth - intel (igb) - marvell (mvneta, mvpp2, octeontx2) - mellanox (mlx4) - mtk_eth_soc - qlogic (qede) - sfc - socionext (netsec) - ti (cpsw) - tap - tsnep - veth - xen - virtio_net. Turn 'basic' (tx, pass, aborted and drop) features flags on for: - netronome (nfp) - cavium (thunder) - hyperv. Turn 'redirect_target' feature flag on for: - amanzon (ena) - broadcom (bnxt) - freescale (dpaa, dpaa2) - intel (i40e, ice, igb, ixgbe) - ti (cpsw) - marvell (mvneta, mvpp2) - sfc - socionext (netsec) - qlogic (qede) - mellanox (mlx5) - tap - veth - virtio_net - xen Reviewed-by: Gerhard Engleder <[email protected]> Reviewed-by: Simon Horman <[email protected]> Acked-by: Stanislav Fomichev <[email protected]> Acked-by: Jakub Kicinski <[email protected]> Co-developed-by: Kumar Kartikeya Dwivedi <[email protected]> Signed-off-by: Kumar Kartikeya Dwivedi <[email protected]> Co-developed-by: Lorenzo Bianconi <[email protected]> Signed-off-by: Lorenzo Bianconi <[email protected]> Signed-off-by: Marek Majtyka <[email protected]> Link: https://lore.kernel.org/r/3eca9fafb308462f7edb1f58e451d59209aa07eb.1675245258.git.lorenzo@kernel.org Signed-off-by: Alexei Starovoitov <[email protected]>
1 parent d3d854f commit 66c0e13

File tree

40 files changed

+184
-5
lines changed

40 files changed

+184
-5
lines changed

drivers/net/ethernet/amazon/ena/ena_netdev.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -597,7 +597,9 @@ static int ena_xdp_set(struct net_device *netdev, struct netdev_bpf *bpf)
597597
if (rc)
598598
return rc;
599599
}
600+
xdp_features_set_redirect_target(netdev, false);
600601
} else if (old_bpf_prog) {
602+
xdp_features_clear_redirect_target(netdev);
601603
rc = ena_destroy_and_free_all_xdp_queues(adapter);
602604
if (rc)
603605
return rc;
@@ -4103,6 +4105,8 @@ static void ena_set_conf_feat_params(struct ena_adapter *adapter,
41034105
/* Set offload features */
41044106
ena_set_dev_offloads(feat, netdev);
41054107

4108+
netdev->xdp_features = NETDEV_XDP_ACT_BASIC | NETDEV_XDP_ACT_REDIRECT;
4109+
41064110
adapter->max_mtu = feat->dev_attr.max_mtu;
41074111
netdev->max_mtu = adapter->max_mtu;
41084112
netdev->min_mtu = ENA_MIN_MTU;

drivers/net/ethernet/aquantia/atlantic/aq_nic.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -384,6 +384,11 @@ void aq_nic_ndev_init(struct aq_nic_s *self)
384384
self->ndev->mtu = aq_nic_cfg->mtu - ETH_HLEN;
385385
self->ndev->max_mtu = aq_hw_caps->mtu - ETH_FCS_LEN - ETH_HLEN;
386386

387+
self->ndev->xdp_features = NETDEV_XDP_ACT_BASIC |
388+
NETDEV_XDP_ACT_REDIRECT |
389+
NETDEV_XDP_ACT_NDO_XMIT |
390+
NETDEV_XDP_ACT_RX_SG |
391+
NETDEV_XDP_ACT_NDO_XMIT_SG;
387392
}
388393

389394
void aq_nic_set_tx_ring(struct aq_nic_s *self, unsigned int idx,

drivers/net/ethernet/broadcom/bnxt/bnxt.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13686,6 +13686,9 @@ static int bnxt_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
1368613686

1368713687
netif_set_tso_max_size(dev, GSO_MAX_SIZE);
1368813688

13689+
dev->xdp_features = NETDEV_XDP_ACT_BASIC | NETDEV_XDP_ACT_REDIRECT |
13690+
NETDEV_XDP_ACT_RX_SG;
13691+
1368913692
#ifdef CONFIG_BNXT_SRIOV
1369013693
init_waitqueue_head(&bp->sriov_cfg_wait);
1369113694
#endif

drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -422,9 +422,11 @@ static int bnxt_xdp_set(struct bnxt *bp, struct bpf_prog *prog)
422422

423423
if (prog) {
424424
bnxt_set_rx_skb_mode(bp, true);
425+
xdp_features_set_redirect_target(dev, true);
425426
} else {
426427
int rx, tx;
427428

429+
xdp_features_clear_redirect_target(dev);
428430
bnxt_set_rx_skb_mode(bp, false);
429431
bnxt_get_max_rings(bp, &rx, &tx, true);
430432
if (rx > 1) {

drivers/net/ethernet/cavium/thunder/nicvf_main.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2218,6 +2218,8 @@ static int nicvf_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
22182218
netdev->netdev_ops = &nicvf_netdev_ops;
22192219
netdev->watchdog_timeo = NICVF_TX_TIMEOUT;
22202220

2221+
netdev->xdp_features = NETDEV_XDP_ACT_BASIC;
2222+
22212223
/* MTU range: 64 - 9200 */
22222224
netdev->min_mtu = NIC_HW_MIN_FRS;
22232225
netdev->max_mtu = NIC_HW_MAX_FRS;

drivers/net/ethernet/engleder/tsnep_main.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1926,6 +1926,10 @@ static int tsnep_probe(struct platform_device *pdev)
19261926
netdev->features = NETIF_F_SG;
19271927
netdev->hw_features = netdev->features | NETIF_F_LOOPBACK;
19281928

1929+
netdev->xdp_features = NETDEV_XDP_ACT_BASIC | NETDEV_XDP_ACT_REDIRECT |
1930+
NETDEV_XDP_ACT_NDO_XMIT |
1931+
NETDEV_XDP_ACT_NDO_XMIT_SG;
1932+
19291933
/* carrier off reporting is important to ethtool even BEFORE open */
19301934
netif_carrier_off(netdev);
19311935

drivers/net/ethernet/freescale/dpaa/dpaa_eth.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,10 @@ static int dpaa_netdev_init(struct net_device *net_dev,
244244
net_dev->features |= net_dev->hw_features;
245245
net_dev->vlan_features = net_dev->features;
246246

247+
net_dev->xdp_features = NETDEV_XDP_ACT_BASIC |
248+
NETDEV_XDP_ACT_REDIRECT |
249+
NETDEV_XDP_ACT_NDO_XMIT;
250+
247251
if (is_valid_ether_addr(mac_addr)) {
248252
memcpy(net_dev->perm_addr, mac_addr, net_dev->addr_len);
249253
eth_hw_addr_set(net_dev, mac_addr);

drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4596,6 +4596,10 @@ static int dpaa2_eth_netdev_init(struct net_device *net_dev)
45964596
NETIF_F_LLTX | NETIF_F_HW_TC | NETIF_F_TSO;
45974597
net_dev->gso_max_segs = DPAA2_ETH_ENQUEUE_MAX_FDS;
45984598
net_dev->hw_features = net_dev->features;
4599+
net_dev->xdp_features = NETDEV_XDP_ACT_BASIC |
4600+
NETDEV_XDP_ACT_REDIRECT |
4601+
NETDEV_XDP_ACT_XSK_ZEROCOPY |
4602+
NETDEV_XDP_ACT_NDO_XMIT;
45994603

46004604
if (priv->dpni_attrs.vlan_filter_entries)
46014605
net_dev->hw_features |= NETIF_F_HW_VLAN_CTAG_FILTER;

drivers/net/ethernet/freescale/enetc/enetc_pf.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -807,6 +807,9 @@ static void enetc_pf_netdev_setup(struct enetc_si *si, struct net_device *ndev,
807807
ndev->hw_features |= NETIF_F_RXHASH;
808808

809809
ndev->priv_flags |= IFF_UNICAST_FLT;
810+
ndev->xdp_features = NETDEV_XDP_ACT_BASIC | NETDEV_XDP_ACT_REDIRECT |
811+
NETDEV_XDP_ACT_NDO_XMIT | NETDEV_XDP_ACT_RX_SG |
812+
NETDEV_XDP_ACT_NDO_XMIT_SG;
810813

811814
if (si->hw_features & ENETC_SI_F_PSFP && !enetc_psfp_enable(priv)) {
812815
priv->active_offloads |= ENETC_F_QCI;

drivers/net/ethernet/fungible/funeth/funeth_main.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1160,6 +1160,11 @@ static int fun_xdp_setup(struct net_device *dev, struct netdev_bpf *xdp)
11601160
WRITE_ONCE(rxqs[i]->xdp_prog, prog);
11611161
}
11621162

1163+
if (prog)
1164+
xdp_features_set_redirect_target(dev, true);
1165+
else
1166+
xdp_features_clear_redirect_target(dev);
1167+
11631168
dev->max_mtu = prog ? XDP_MAX_MTU : FUN_MAX_MTU;
11641169
old_prog = xchg(&fp->xdp_prog, prog);
11651170
if (old_prog)
@@ -1765,6 +1770,7 @@ static int fun_create_netdev(struct fun_ethdev *ed, unsigned int portid)
17651770
netdev->vlan_features = netdev->features & VLAN_FEAT;
17661771
netdev->mpls_features = netdev->vlan_features;
17671772
netdev->hw_enc_features = netdev->hw_features;
1773+
netdev->xdp_features = NETDEV_XDP_ACT_BASIC | NETDEV_XDP_ACT_REDIRECT;
17681774

17691775
netdev->min_mtu = ETH_MIN_MTU;
17701776
netdev->max_mtu = FUN_MAX_MTU;

0 commit comments

Comments
 (0)