mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 14:11:52 +00:00
net: typhoon: implement ndo_features_check method
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. Most locally generated packets will use a small number of fragments anyway. For forwarding workloads, we can limit gro_max_size at ingress, we might also implement gro_max_segs if needed. Signed-off-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
5f2155132c
commit
d2692eee05
@ -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 @@ out:
|
||||
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,
|
||||
|
Loading…
Reference in New Issue
Block a user