ip_gre: Make GRE and GRETAP devices always NETIF_F_LLTX
Recently we made o_seqno atomic_t. Stop special-casing TUNNEL_SEQ, and always mark GRE[TAP] devices as NETIF_F_LLTX, since we no longer need the TX lock (&txq->_xmit_lock). Signed-off-by: Peilin Ye <peilin.ye@bytedance.com> Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
parent
6e28f56c0d
commit
020e8f60aa
|
@ -748,6 +748,7 @@ free_skb:
|
|||
static void ipgre_link_update(struct net_device *dev, bool set_mtu)
|
||||
{
|
||||
struct ip_tunnel *tunnel = netdev_priv(dev);
|
||||
__be16 flags;
|
||||
int len;
|
||||
|
||||
len = tunnel->tun_hlen;
|
||||
|
@ -763,19 +764,15 @@ static void ipgre_link_update(struct net_device *dev, bool set_mtu)
|
|||
if (set_mtu)
|
||||
dev->mtu = max_t(int, dev->mtu - len, 68);
|
||||
|
||||
if (!(tunnel->parms.o_flags & TUNNEL_SEQ)) {
|
||||
if (!(tunnel->parms.o_flags & TUNNEL_CSUM) ||
|
||||
tunnel->encap.type == TUNNEL_ENCAP_NONE) {
|
||||
dev->features |= NETIF_F_GSO_SOFTWARE;
|
||||
dev->hw_features |= NETIF_F_GSO_SOFTWARE;
|
||||
} else {
|
||||
dev->features &= ~NETIF_F_GSO_SOFTWARE;
|
||||
dev->hw_features &= ~NETIF_F_GSO_SOFTWARE;
|
||||
}
|
||||
dev->features |= NETIF_F_LLTX;
|
||||
} else {
|
||||
flags = tunnel->parms.o_flags;
|
||||
|
||||
if (flags & TUNNEL_SEQ ||
|
||||
(flags & TUNNEL_CSUM && tunnel->encap.type != TUNNEL_ENCAP_NONE)) {
|
||||
dev->features &= ~NETIF_F_GSO_SOFTWARE;
|
||||
dev->hw_features &= ~NETIF_F_GSO_SOFTWARE;
|
||||
dev->features &= ~(NETIF_F_LLTX | NETIF_F_GSO_SOFTWARE);
|
||||
} else {
|
||||
dev->features |= NETIF_F_GSO_SOFTWARE;
|
||||
dev->hw_features |= NETIF_F_GSO_SOFTWARE;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -949,6 +946,7 @@ static void ipgre_tunnel_setup(struct net_device *dev)
|
|||
static void __gre_tunnel_init(struct net_device *dev)
|
||||
{
|
||||
struct ip_tunnel *tunnel;
|
||||
__be16 flags;
|
||||
|
||||
tunnel = netdev_priv(dev);
|
||||
tunnel->tun_hlen = gre_calc_hlen(tunnel->parms.o_flags);
|
||||
|
@ -957,25 +955,21 @@ static void __gre_tunnel_init(struct net_device *dev)
|
|||
tunnel->hlen = tunnel->tun_hlen + tunnel->encap_hlen;
|
||||
dev->needed_headroom = tunnel->hlen + sizeof(tunnel->parms.iph);
|
||||
|
||||
dev->features |= GRE_FEATURES;
|
||||
dev->features |= GRE_FEATURES | NETIF_F_LLTX;
|
||||
dev->hw_features |= GRE_FEATURES;
|
||||
|
||||
if (!(tunnel->parms.o_flags & TUNNEL_SEQ)) {
|
||||
/* TCP offload with GRE SEQ is not supported, nor
|
||||
* can we support 2 levels of outer headers requiring
|
||||
* an update.
|
||||
*/
|
||||
if (!(tunnel->parms.o_flags & TUNNEL_CSUM) ||
|
||||
(tunnel->encap.type == TUNNEL_ENCAP_NONE)) {
|
||||
dev->features |= NETIF_F_GSO_SOFTWARE;
|
||||
dev->hw_features |= NETIF_F_GSO_SOFTWARE;
|
||||
}
|
||||
flags = tunnel->parms.o_flags;
|
||||
|
||||
/* Can use a lockless transmit, unless we generate
|
||||
* output sequences
|
||||
*/
|
||||
dev->features |= NETIF_F_LLTX;
|
||||
}
|
||||
/* TCP offload with GRE SEQ is not supported, nor can we support 2
|
||||
* levels of outer headers requiring an update.
|
||||
*/
|
||||
if (flags & TUNNEL_SEQ)
|
||||
return;
|
||||
if (flags & TUNNEL_CSUM && tunnel->encap.type != TUNNEL_ENCAP_NONE)
|
||||
return;
|
||||
|
||||
dev->features |= NETIF_F_GSO_SOFTWARE;
|
||||
dev->hw_features |= NETIF_F_GSO_SOFTWARE;
|
||||
}
|
||||
|
||||
static int ipgre_tunnel_init(struct net_device *dev)
|
||||
|
|
Loading…
Reference in New Issue