Message ID | 20220205045459.3457024-1-eric.dumazet@gmail.com (mailing list archive) |
---|---|
State | Accepted |
Commit | d2692eee05b8502dbe4c480405feec79f4efbb55 |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [v2,net-next] net: typhoon: implement ndo_features_check method | expand |
Hello: This patch was applied to netdev/net-next.git (master) by David S. Miller <davem@davemloft.net>: On Fri, 4 Feb 2022 20:54:59 -0800 you wrote: > From: Eric Dumazet <edumazet@google.com> > > Instead of disabling TSO at compile time if MAX_SKB_FRAGS > 32, > implement ndo_features_check() method for this driver for > a more dynamic handling. > > If skb has more than 32 frags and is a GSO packet, force > software segmentation. > > [...] Here is the summary with links: - [v2,net-next] net: typhoon: implement ndo_features_check method https://git.kernel.org/netdev/net-next/c/d2692eee05b8 You are awesome, thank you!
diff --git a/drivers/net/ethernet/3com/typhoon.c b/drivers/net/ethernet/3com/typhoon.c index 8aec5d9fbfef2803c181387537300502a937caf0..08f6c42a1e3803006159915cfdae1e72c5e30335 100644 --- a/drivers/net/ethernet/3com/typhoon.c +++ b/drivers/net/ethernet/3com/typhoon.c @@ -138,11 +138,6 @@ MODULE_PARM_DESC(use_mmio, "Use MMIO (1) or PIO(0) to access the NIC. " module_param(rx_copybreak, int, 0); module_param(use_mmio, int, 0); -#if defined(NETIF_F_TSO) && MAX_SKB_FRAGS > 32 -#warning Typhoon only supports 32 entries in its SG list for TSO, disabling TSO -#undef NETIF_F_TSO -#endif - #if TXLO_ENTRIES <= (2 * MAX_SKB_FRAGS) #error TX ring too small! #endif @@ -2261,9 +2256,25 @@ typhoon_test_mmio(struct pci_dev *pdev) return mode; } +#if MAX_SKB_FRAGS > 32 +static netdev_features_t typhoon_features_check(struct sk_buff *skb, + struct net_device *dev, + netdev_features_t features) +{ + if (skb_shinfo(skb)->nr_frags > 32 && skb_is_gso(skb)) + features &= ~NETIF_F_GSO_MASK; + + features = vlan_features_check(skb, features); + return vxlan_features_check(skb, features); +} +#endif + static const struct net_device_ops typhoon_netdev_ops = { .ndo_open = typhoon_open, .ndo_stop = typhoon_close, +#if MAX_SKB_FRAGS > 32 + .ndo_features_check = typhoon_features_check, +#endif .ndo_start_xmit = typhoon_start_tx, .ndo_set_rx_mode = typhoon_set_rx_mode, .ndo_tx_timeout = typhoon_tx_timeout,