Merge branch 'topic/ppc-kvm' into next
[linux-2.6-microblaze.git] / net / ipv6 / ip6_gre.c
index 5136959..4e37f7c 100644 (file)
@@ -382,11 +382,6 @@ static struct ip6_tnl *ip6gre_tunnel_locate(struct net *net,
                goto failed_free;
 
        ip6gre_tnl_link_config(nt, 1);
-
-       /* Can use a lockless transmit, unless we generate output sequences */
-       if (!(nt->parms.o_flags & TUNNEL_SEQ))
-               dev->features |= NETIF_F_LLTX;
-
        ip6gre_tunnel_link(ign, nt);
        return nt;
 
@@ -1445,26 +1440,23 @@ static void ip6gre_tunnel_setup(struct net_device *dev)
 static void ip6gre_tnl_init_features(struct net_device *dev)
 {
        struct ip6_tnl *nt = netdev_priv(dev);
+       __be16 flags;
 
-       dev->features           |= GRE6_FEATURES;
+       dev->features           |= GRE6_FEATURES | NETIF_F_LLTX;
        dev->hw_features        |= GRE6_FEATURES;
 
-       if (!(nt->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 (!(nt->parms.o_flags & TUNNEL_CSUM) ||
-                   nt->encap.type == TUNNEL_ENCAP_NONE) {
-                       dev->features    |= NETIF_F_GSO_SOFTWARE;
-                       dev->hw_features |= NETIF_F_GSO_SOFTWARE;
-               }
+       flags = nt->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 && nt->encap.type != TUNNEL_ENCAP_NONE)
+               return;
+
+       dev->features |= NETIF_F_GSO_SOFTWARE;
+       dev->hw_features |= NETIF_F_GSO_SOFTWARE;
 }
 
 static int ip6gre_tunnel_init_common(struct net_device *dev)