mirror of
https://github.com/Dasharo/linux.git
synced 2026-03-06 15:25:10 -08:00
netdev_features: convert NETIF_F_LLTX to dev->lltx
NETIF_F_LLTX can't be changed via Ethtool and is not a feature, rather an attribute, very similar to IFF_NO_QUEUE (and hot). Free one netdev_features_t bit and make it a "hot" private flag. Signed-off-by: Alexander Lobakin <aleksander.lobakin@intel.com> Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
committed by
Paolo Abeni
parent
beb5a9bea8
commit
00d066a4d4
@@ -8,6 +8,7 @@ net_device struct fast path usage breakdown
|
||||
Type Name fastpath_tx_access fastpath_rx_access Comments
|
||||
..struct ..net_device
|
||||
unsigned_long:32 priv_flags read_mostly - __dev_queue_xmit(tx)
|
||||
unsigned_long:1 lltx read_mostly - HARD_TX_LOCK,HARD_TX_TRYLOCK,HARD_TX_UNLOCK(tx)
|
||||
char name[16] - -
|
||||
struct_netdev_name_node* name_node
|
||||
struct_dev_ifalias* ifalias
|
||||
|
||||
@@ -139,14 +139,6 @@ chained skbs (skb->next/prev list).
|
||||
Features contained in NETIF_F_SOFT_FEATURES are features of networking
|
||||
stack. Driver should not change behaviour based on them.
|
||||
|
||||
* LLTX driver (deprecated for hardware drivers)
|
||||
|
||||
NETIF_F_LLTX is meant to be used by drivers that don't need locking at all,
|
||||
e.g. software tunnels.
|
||||
|
||||
This is also used in a few legacy drivers that implement their
|
||||
own locking, don't use it for new (hardware) drivers.
|
||||
|
||||
* netns-local device
|
||||
|
||||
NETIF_F_NETNS_LOCAL is set for devices that are not allowed to move between
|
||||
|
||||
@@ -258,11 +258,11 @@ ndo_get_stats:
|
||||
ndo_start_xmit:
|
||||
Synchronization: __netif_tx_lock spinlock.
|
||||
|
||||
When the driver sets NETIF_F_LLTX in dev->features this will be
|
||||
When the driver sets dev->lltx this will be
|
||||
called without holding netif_tx_lock. In this case the driver
|
||||
has to lock by itself when needed.
|
||||
The locking there should also properly protect against
|
||||
set_rx_mode. WARNING: use of NETIF_F_LLTX is deprecated.
|
||||
set_rx_mode. WARNING: use of dev->lltx is deprecated.
|
||||
Don't use it for new drivers.
|
||||
|
||||
Context: Process with BHs disabled or BH (timer),
|
||||
|
||||
@@ -3098,7 +3098,7 @@ static void amt_link_setup(struct net_device *dev)
|
||||
dev->hard_header_len = 0;
|
||||
dev->addr_len = 0;
|
||||
dev->priv_flags |= IFF_NO_QUEUE;
|
||||
dev->features |= NETIF_F_LLTX;
|
||||
dev->lltx = true;
|
||||
dev->features |= NETIF_F_GSO_SOFTWARE;
|
||||
dev->features |= NETIF_F_NETNS_LOCAL;
|
||||
dev->hw_features |= NETIF_F_SG | NETIF_F_HW_CSUM;
|
||||
|
||||
@@ -553,7 +553,6 @@ static void bareudp_setup(struct net_device *dev)
|
||||
SET_NETDEV_DEVTYPE(dev, &bareudp_type);
|
||||
dev->features |= NETIF_F_SG | NETIF_F_HW_CSUM | NETIF_F_FRAGLIST;
|
||||
dev->features |= NETIF_F_RXCSUM;
|
||||
dev->features |= NETIF_F_LLTX;
|
||||
dev->features |= NETIF_F_GSO_SOFTWARE;
|
||||
dev->hw_features |= NETIF_F_SG | NETIF_F_HW_CSUM | NETIF_F_FRAGLIST;
|
||||
dev->hw_features |= NETIF_F_RXCSUM;
|
||||
@@ -566,6 +565,7 @@ static void bareudp_setup(struct net_device *dev)
|
||||
dev->type = ARPHRD_NONE;
|
||||
netif_keep_dst(dev);
|
||||
dev->priv_flags |= IFF_NO_QUEUE;
|
||||
dev->lltx = true;
|
||||
dev->flags = IFF_POINTOPOINT | IFF_NOARP | IFF_MULTICAST;
|
||||
dev->pcpu_stat_type = NETDEV_PCPU_STAT_TSTATS;
|
||||
}
|
||||
|
||||
@@ -5928,7 +5928,7 @@ void bond_setup(struct net_device *bond_dev)
|
||||
#endif /* CONFIG_XFRM_OFFLOAD */
|
||||
|
||||
/* don't acquire bond device's netif_tx_lock when transmitting */
|
||||
bond_dev->features |= NETIF_F_LLTX;
|
||||
bond_dev->lltx = true;
|
||||
|
||||
/* By default, we declare the bond to be fully
|
||||
* VLAN hardware accelerated capable. Special
|
||||
|
||||
@@ -109,9 +109,10 @@ static void dummy_setup(struct net_device *dev)
|
||||
dev->flags |= IFF_NOARP;
|
||||
dev->flags &= ~IFF_MULTICAST;
|
||||
dev->priv_flags |= IFF_LIVE_ADDR_CHANGE | IFF_NO_QUEUE;
|
||||
dev->lltx = true;
|
||||
dev->features |= NETIF_F_SG | NETIF_F_FRAGLIST;
|
||||
dev->features |= NETIF_F_GSO_SOFTWARE;
|
||||
dev->features |= NETIF_F_HW_CSUM | NETIF_F_HIGHDMA | NETIF_F_LLTX;
|
||||
dev->features |= NETIF_F_HW_CSUM | NETIF_F_HIGHDMA;
|
||||
dev->features |= NETIF_F_GSO_ENCAP_ALL;
|
||||
dev->hw_features |= dev->features;
|
||||
dev->hw_enc_features |= dev->features;
|
||||
|
||||
@@ -1034,7 +1034,8 @@ static int init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
netdev->hw_features |= NETIF_F_SG | NETIF_F_IP_CSUM |
|
||||
NETIF_F_RXCSUM;
|
||||
netdev->features |= NETIF_F_SG | NETIF_F_IP_CSUM |
|
||||
NETIF_F_RXCSUM | NETIF_F_LLTX | NETIF_F_HIGHDMA;
|
||||
NETIF_F_RXCSUM | NETIF_F_HIGHDMA;
|
||||
netdev->lltx = true;
|
||||
|
||||
if (vlan_tso_capable(adapter)) {
|
||||
netdev->features |=
|
||||
|
||||
@@ -229,7 +229,7 @@ static int dpaa_netdev_init(struct net_device *net_dev,
|
||||
net_dev->max_mtu = dpaa_get_max_mtu();
|
||||
|
||||
net_dev->hw_features |= (NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM |
|
||||
NETIF_F_LLTX | NETIF_F_RXHASH);
|
||||
NETIF_F_RXHASH);
|
||||
|
||||
net_dev->hw_features |= NETIF_F_SG | NETIF_F_HIGHDMA;
|
||||
/* The kernels enables GSO automatically, if we declare NETIF_F_SG.
|
||||
@@ -239,6 +239,7 @@ static int dpaa_netdev_init(struct net_device *net_dev,
|
||||
net_dev->features |= NETIF_F_RXCSUM;
|
||||
|
||||
net_dev->priv_flags |= IFF_LIVE_ADDR_CHANGE;
|
||||
net_dev->lltx = true;
|
||||
/* we do not want shared skbs on TX */
|
||||
net_dev->priv_flags &= ~IFF_TX_SKB_SHARING;
|
||||
|
||||
|
||||
@@ -4594,12 +4594,13 @@ static int dpaa2_eth_netdev_init(struct net_device *net_dev)
|
||||
|
||||
net_dev->priv_flags |= supported;
|
||||
net_dev->priv_flags &= ~not_supported;
|
||||
net_dev->lltx = true;
|
||||
|
||||
/* Features */
|
||||
net_dev->features = NETIF_F_RXCSUM |
|
||||
NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM |
|
||||
NETIF_F_SG | NETIF_F_HIGHDMA |
|
||||
NETIF_F_LLTX | NETIF_F_HW_TC | NETIF_F_TSO;
|
||||
NETIF_F_HW_TC | NETIF_F_TSO;
|
||||
net_dev->gso_max_segs = DPAA2_ETH_ENQUEUE_MAX_FDS;
|
||||
net_dev->hw_features = net_dev->features;
|
||||
net_dev->xdp_features = NETDEV_XDP_ACT_BASIC |
|
||||
|
||||
@@ -1676,9 +1676,10 @@ static int mlxsw_sp_port_create(struct mlxsw_sp *mlxsw_sp, u16 local_port,
|
||||
|
||||
netif_carrier_off(dev);
|
||||
|
||||
dev->features |= NETIF_F_NETNS_LOCAL | NETIF_F_LLTX | NETIF_F_SG |
|
||||
dev->features |= NETIF_F_NETNS_LOCAL | NETIF_F_SG |
|
||||
NETIF_F_HW_VLAN_CTAG_FILTER | NETIF_F_HW_TC;
|
||||
dev->hw_features |= NETIF_F_HW_TC | NETIF_F_LOOPBACK;
|
||||
dev->lltx = true;
|
||||
|
||||
dev->min_mtu = ETH_MIN_MTU;
|
||||
dev->max_mtu = MLXSW_PORT_MAX_MTU - MLXSW_PORT_ETH_FRAME_HDR;
|
||||
|
||||
@@ -248,7 +248,6 @@ nfp_repr_fix_features(struct net_device *netdev, netdev_features_t features)
|
||||
|
||||
features = netdev_intersect_features(features, lower_features);
|
||||
features |= old_features & (NETIF_F_SOFT_FEATURES | NETIF_F_HW_TC);
|
||||
features |= NETIF_F_LLTX;
|
||||
|
||||
return features;
|
||||
}
|
||||
@@ -386,7 +385,7 @@ int nfp_repr_init(struct nfp_app *app, struct net_device *netdev,
|
||||
netif_set_tso_max_segs(netdev, NFP_NET_LSO_MAX_SEGS);
|
||||
|
||||
netdev->priv_flags |= IFF_NO_QUEUE | IFF_DISABLE_NETPOLL;
|
||||
netdev->features |= NETIF_F_LLTX;
|
||||
netdev->lltx = true;
|
||||
|
||||
if (nfp_app_has_tc(app)) {
|
||||
netdev->features |= NETIF_F_HW_TC;
|
||||
|
||||
@@ -1699,8 +1699,9 @@ pasemi_mac_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
|
||||
netif_napi_add(dev, &mac->napi, pasemi_mac_poll);
|
||||
|
||||
dev->features = NETIF_F_IP_CSUM | NETIF_F_LLTX | NETIF_F_SG |
|
||||
NETIF_F_HIGHDMA | NETIF_F_GSO;
|
||||
dev->features = NETIF_F_IP_CSUM | NETIF_F_SG | NETIF_F_HIGHDMA |
|
||||
NETIF_F_GSO;
|
||||
dev->lltx = true;
|
||||
|
||||
mac->dma_pdev = pci_get_device(PCI_VENDOR_ID_PASEMI, 0xa007, NULL);
|
||||
if (!mac->dma_pdev) {
|
||||
|
||||
@@ -286,7 +286,7 @@ void rmnet_vnd_setup(struct net_device *rmnet_dev)
|
||||
rmnet_dev->needs_free_netdev = true;
|
||||
rmnet_dev->ethtool_ops = &rmnet_ethtool_ops;
|
||||
|
||||
rmnet_dev->features |= NETIF_F_LLTX;
|
||||
rmnet_dev->lltx = true;
|
||||
|
||||
/* This perm addr will be used as interface identifier by IPv6 */
|
||||
rmnet_dev->addr_assign_type = NET_ADDR_RANDOM;
|
||||
|
||||
@@ -233,8 +233,8 @@ static struct efx_rep *efx_ef100_rep_create_netdev(struct efx_nic *efx,
|
||||
net_dev->ethtool_ops = &efx_ef100_rep_ethtool_ops;
|
||||
net_dev->min_mtu = EFX_MIN_MTU;
|
||||
net_dev->max_mtu = EFX_MAX_MTU;
|
||||
net_dev->features |= NETIF_F_LLTX;
|
||||
net_dev->hw_features |= NETIF_F_LLTX;
|
||||
net_dev->lltx = true;
|
||||
|
||||
return efv;
|
||||
fail1:
|
||||
free_netdev(net_dev);
|
||||
|
||||
@@ -1671,7 +1671,7 @@ static netdev_tx_t bdx_tx_transmit(struct sk_buff *skb,
|
||||
|
||||
#endif
|
||||
#ifdef BDX_LLTX
|
||||
netif_trans_update(ndev); /* NETIF_F_LLTX driver :( */
|
||||
netif_trans_update(ndev); /* dev->lltx driver :( */
|
||||
#endif
|
||||
ndev->stats.tx_packets++;
|
||||
ndev->stats.tx_bytes += skb->len;
|
||||
@@ -2019,7 +2019,7 @@ bdx_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
* set multicast list callback has to use priv->tx_lock.
|
||||
*/
|
||||
#ifdef BDX_LLTX
|
||||
ndev->features |= NETIF_F_LLTX;
|
||||
ndev->lltx = true;
|
||||
#endif
|
||||
/* MTU range: 60 - 16384 */
|
||||
ndev->min_mtu = ETH_ZLEN;
|
||||
|
||||
@@ -260,7 +260,7 @@ struct bdx_priv {
|
||||
int tx_update_mark;
|
||||
int tx_noupd;
|
||||
#endif
|
||||
spinlock_t tx_lock; /* NETIF_F_LLTX mode */
|
||||
spinlock_t tx_lock; /* dev->lltx mode */
|
||||
|
||||
/* rarely used */
|
||||
u8 port;
|
||||
|
||||
@@ -2277,10 +2277,11 @@ spider_net_setup_netdev(struct spider_net_card *card)
|
||||
netdev->hw_features = NETIF_F_RXCSUM | NETIF_F_IP_CSUM;
|
||||
if (SPIDER_NET_RX_CSUM_DEFAULT)
|
||||
netdev->features |= NETIF_F_RXCSUM;
|
||||
netdev->features |= NETIF_F_IP_CSUM | NETIF_F_LLTX;
|
||||
netdev->features |= NETIF_F_IP_CSUM;
|
||||
/* some time: NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_CTAG_RX |
|
||||
* NETIF_F_HW_VLAN_CTAG_FILTER
|
||||
*/
|
||||
netdev->lltx = true;
|
||||
|
||||
/* MTU range: 64 - 2294 */
|
||||
netdev->min_mtu = SPIDER_NET_MIN_MTU;
|
||||
|
||||
@@ -1194,7 +1194,6 @@ static void geneve_setup(struct net_device *dev)
|
||||
|
||||
SET_NETDEV_DEVTYPE(dev, &geneve_type);
|
||||
|
||||
dev->features |= NETIF_F_LLTX;
|
||||
dev->features |= NETIF_F_SG | NETIF_F_HW_CSUM | NETIF_F_FRAGLIST;
|
||||
dev->features |= NETIF_F_RXCSUM;
|
||||
dev->features |= NETIF_F_GSO_SOFTWARE;
|
||||
@@ -1215,6 +1214,7 @@ static void geneve_setup(struct net_device *dev)
|
||||
netif_keep_dst(dev);
|
||||
dev->priv_flags &= ~IFF_TX_SKB_SHARING;
|
||||
dev->priv_flags |= IFF_LIVE_ADDR_CHANGE | IFF_NO_QUEUE;
|
||||
dev->lltx = true;
|
||||
eth_hw_addr_random(dev);
|
||||
}
|
||||
|
||||
|
||||
@@ -1356,7 +1356,7 @@ static void gtp_link_setup(struct net_device *dev)
|
||||
|
||||
dev->pcpu_stat_type = NETDEV_PCPU_STAT_TSTATS;
|
||||
dev->priv_flags |= IFF_NO_QUEUE;
|
||||
dev->features |= NETIF_F_LLTX;
|
||||
dev->lltx = true;
|
||||
netif_keep_dst(dev);
|
||||
|
||||
dev->needed_headroom = LL_MAX_HEADER + GTP_IPV4_MAXLEN;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user