Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

net: add netif_inherit_tso_max()

To make later patches smaller create a helper for inheriting
the TSO limitations of a lower device. The TSO in the name
is not an accident, subsequent patches will replace GSO
with TSO in more names.

Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Jakub Kicinski and committed by
David S. Miller
6df6398f beb21e3e

+24 -18
+1 -2
drivers/net/ethernet/netronome/nfp/nfp_net_repr.c
··· 286 286 if (repr->dst->u.port_info.lower_dev != lower) 287 287 return; 288 288 289 - netif_set_gso_max_size(netdev, lower->gso_max_size); 290 - netif_set_gso_max_segs(netdev, lower->gso_max_segs); 289 + netif_inherit_tso_max(netdev, lower); 291 290 292 291 netdev_update_features(netdev); 293 292 }
+2 -4
drivers/net/ipvlan/ipvlan_main.c
··· 139 139 dev->vlan_features = phy_dev->vlan_features & IPVLAN_FEATURES; 140 140 dev->vlan_features |= IPVLAN_ALWAYS_ON_OFLOADS; 141 141 dev->hw_enc_features |= dev->features; 142 - netif_set_gso_max_size(dev, phy_dev->gso_max_size); 143 - netif_set_gso_max_segs(dev, phy_dev->gso_max_segs); 142 + netif_inherit_tso_max(dev, phy_dev); 144 143 dev->hard_header_len = phy_dev->hard_header_len; 145 144 146 145 netdev_lockdep_set_classes(dev); ··· 761 762 762 763 case NETDEV_FEAT_CHANGE: 763 764 list_for_each_entry(ipvlan, &port->ipvlans, pnode) { 764 - netif_set_gso_max_size(ipvlan->dev, dev->gso_max_size); 765 - netif_set_gso_max_segs(ipvlan->dev, dev->gso_max_segs); 765 + netif_inherit_tso_max(ipvlan->dev, dev); 766 766 netdev_update_features(ipvlan->dev); 767 767 } 768 768 break;
+2 -4
drivers/net/macvlan.c
··· 904 904 dev->vlan_features = lowerdev->vlan_features & MACVLAN_FEATURES; 905 905 dev->vlan_features |= ALWAYS_ON_OFFLOADS; 906 906 dev->hw_enc_features |= dev->features; 907 - netif_set_gso_max_size(dev, lowerdev->gso_max_size); 908 - netif_set_gso_max_segs(dev, lowerdev->gso_max_segs); 907 + netif_inherit_tso_max(dev, lowerdev); 909 908 dev->hard_header_len = lowerdev->hard_header_len; 910 909 macvlan_set_lockdep_class(dev); 911 910 ··· 1762 1763 break; 1763 1764 case NETDEV_FEAT_CHANGE: 1764 1765 list_for_each_entry(vlan, &port->vlans, list) { 1765 - netif_set_gso_max_size(vlan->dev, dev->gso_max_size); 1766 - netif_set_gso_max_segs(vlan->dev, dev->gso_max_segs); 1766 + netif_inherit_tso_max(vlan->dev, dev); 1767 1767 netdev_update_features(vlan->dev); 1768 1768 } 1769 1769 break;
+1 -2
drivers/net/veth.c
··· 1758 1758 if (ifmp && (dev->ifindex != 0)) 1759 1759 peer->ifindex = ifmp->ifi_index; 1760 1760 1761 - netif_set_gso_max_size(peer, dev->gso_max_size); 1762 - netif_set_gso_max_segs(peer, dev->gso_max_segs); 1761 + netif_inherit_tso_max(peer, dev); 1763 1762 1764 1763 err = register_netdevice(peer); 1765 1764 put_net(net);
+1 -2
drivers/net/vxlan/vxlan_core.c
··· 3683 3683 if (lowerdev) { 3684 3684 dst->remote_ifindex = conf->remote_ifindex; 3685 3685 3686 - netif_set_gso_max_size(dev, lowerdev->gso_max_size); 3687 - netif_set_gso_max_segs(dev, lowerdev->gso_max_segs); 3686 + netif_inherit_tso_max(dev, lowerdev); 3688 3687 3689 3688 needed_headroom = lowerdev->hard_header_len; 3690 3689 needed_headroom += lowerdev->needed_headroom;
+3
include/linux/netdevice.h
··· 4895 4895 WRITE_ONCE(dev->gro_max_size, size); 4896 4896 } 4897 4897 4898 + void netif_inherit_tso_max(struct net_device *to, 4899 + const struct net_device *from); 4900 + 4898 4901 static inline void skb_gso_error_unwind(struct sk_buff *skb, __be16 protocol, 4899 4902 int pulled_hlen, u16 mac_offset, 4900 4903 int mac_len)
+1 -2
net/8021q/vlan.c
··· 319 319 { 320 320 struct vlan_dev_priv *vlan = vlan_dev_priv(vlandev); 321 321 322 - netif_set_gso_max_size(vlandev, dev->gso_max_size); 323 - netif_set_gso_max_segs(vlandev, dev->gso_max_segs); 322 + netif_inherit_tso_max(vlandev, dev); 324 323 325 324 if (vlan_hw_offload_capable(dev->features, vlan->vlan_proto)) 326 325 vlandev->hard_header_len = dev->hard_header_len;
+1 -2
net/8021q/vlan_dev.c
··· 573 573 NETIF_F_ALL_FCOE; 574 574 575 575 dev->features |= dev->hw_features | NETIF_F_LLTX; 576 - netif_set_gso_max_size(dev, real_dev->gso_max_size); 577 - netif_set_gso_max_segs(dev, real_dev->gso_max_segs); 576 + netif_inherit_tso_max(dev, real_dev); 578 577 if (dev->features & NETIF_F_VLAN_FEATURES) 579 578 netdev_warn(real_dev, "VLAN features are set incorrectly. Q-in-Q configurations may not work correctly.\n"); 580 579
+12
net/core/dev.c
··· 2993 2993 EXPORT_SYMBOL(netif_set_real_num_queues); 2994 2994 2995 2995 /** 2996 + * netif_inherit_tso_max() - copy all TSO limits from a lower device to an upper 2997 + * @to: netdev to update 2998 + * @from: netdev from which to copy the limits 2999 + */ 3000 + void netif_inherit_tso_max(struct net_device *to, const struct net_device *from) 3001 + { 3002 + netif_set_gso_max_size(to, from->gso_max_size); 3003 + netif_set_gso_max_segs(to, from->gso_max_segs); 3004 + } 3005 + EXPORT_SYMBOL(netif_inherit_tso_max); 3006 + 3007 + /** 2996 3008 * netif_get_num_default_rss_queues - default number of RSS queues 2997 3009 * 2998 3010 * Default value is the number of physical cores if there are only 1 or 2, or