Skip to contentSkip to conversation

: Use bitmask of feature flags instead of seperate feature bits

VLAN Patrick McHardy 4 participants 6 messages May 23, 2008

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

Change the NETIF_F_VLAN flags to a bitmask of supported features, as discussed with Herbert.

Tested by adding

+ netdev->vlan_features |= NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_SG | \
+ NETIF_F_ALL_CSUM;
+

to e1000.

commit db2b989176f0e89f669ad8df34b2793ebbf0ab58

Author: Patrick McHardy <[email protected]>
Date:   Fri May 23 08:33:37 2008 +0200

[VLAN]: Use bitmask of feature flags instead of seperate feature bits

Herbert Xu points out that the use of seperate feature bits for features to be propagated to VLAN devices is going to get messy real soon. Replace the VLAN feature bits by a bitmask of feature flags to be propagated and restore the old GSO_SHIFT/MASK values.

include/linux/netdevice.h +5 -4
index 2b02664..f27fd20 100644
@@ -514,12 +514,10 @@ struct net_device
 #define NETIF_F_NETNS_LOCAL	8192	/* Does not change network namespaces */
 #define NETIF_F_MULTI_QUEUE	16384	/* Has multiple TX/RX queues */
 #define NETIF_F_LRO		32768	/* large receive offload */
-#define NETIF_F_VLAN_TSO	65536	/* Supports TSO for VLANs */
-#define NETIF_F_VLAN_CSUM	131072	/* Supports TX checksumming for VLANs */
 
 	/* Segmentation offload features */
-#define NETIF_F_GSO_SHIFT	20
-#define NETIF_F_GSO_MASK	0xfff00000
+#define NETIF_F_GSO_SHIFT	16
+#define NETIF_F_GSO_MASK	0xffff0000
 #define NETIF_F_TSO		(SKB_GSO_TCPV4 << NETIF_F_GSO_SHIFT)
 #define NETIF_F_UFO		(SKB_GSO_UDP << NETIF_F_GSO_SHIFT)
 #define NETIF_F_GSO_ROBUST	(SKB_GSO_DODGY << NETIF_F_GSO_SHIFT)
@@ -747,6 +745,9 @@ struct net_device
 	/* rtnetlink link ops */
 	const struct rtnl_link_ops *rtnl_link_ops;
 
+	/* VLAN feature mask */
+	unsigned long vlan_features;
+
 	/* for setting kernel sock attribute on TCP connection setup */
 #define GSO_MAX_SIZE		65536
 	unsigned int		gso_max_size;
net/8021q/vlan.c +2 -8
index 5196130..ab2225d 100644
@@ -387,14 +387,8 @@ static void vlan_transfer_features(struct net_device *dev,
 {
 	unsigned long old_features = vlandev->features;
 
-	if (dev->features & NETIF_F_VLAN_TSO) {
-		vlandev->features &= ~VLAN_TSO_FEATURES;
-		vlandev->features |= dev->features & VLAN_TSO_FEATURES;
-	}
-	if (dev->features & NETIF_F_VLAN_CSUM) {
-		vlandev->features &= ~NETIF_F_ALL_CSUM;
-		vlandev->features |= dev->features & NETIF_F_ALL_CSUM;
-	}
+	vlandev->features &= ~dev->vlan_features;
+	vlandev->features |= dev->features & dev->vlan_features;
 
 	if (old_features != vlandev->features)
 		netdev_features_change(vlandev);
net/8021q/vlan.h +0 -2
index 7962569..5229a72 100644
@@ -7,8 +7,6 @@
 #define VLAN_GRP_HASH_SIZE	(1 << VLAN_GRP_HASH_SHIFT)
 #define VLAN_GRP_HASH_MASK	(VLAN_GRP_HASH_SIZE - 1)
 
-#define VLAN_TSO_FEATURES	(NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_SG)
-
 /*  Find a VLAN device by the MAC address of its Ethernet device, and
  *  it's VLAN ID.  The default configuration is to have VLAN's scope
  *  to be box-wide, so the MAC will be ignored.  The mac will only be
net/8021q/vlan_dev.c +1 -4
index b1cfbaa..5d055c2 100644
@@ -663,10 +663,7 @@ static int vlan_dev_init(struct net_device *dev)
 					  (1<<__LINK_STATE_DORMANT))) |
 		      (1<<__LINK_STATE_PRESENT);
 
-	if (real_dev->features & NETIF_F_VLAN_TSO)
-		dev->features |= real_dev->features & VLAN_TSO_FEATURES;
-	if (real_dev->features & NETIF_F_VLAN_CSUM)
-		dev->features |= real_dev->features & NETIF_F_ALL_CSUM;
+	dev->features |= real_dev->features & real_dev->vlan_features;
 
 	/* ipv6 shared card related stuff */
 	dev->dev_id = real_dev->dev_id;
Acked-by
#1 lore raw
Quoted 9 lines · Patrick McHardy

[VLAN]: Use bitmask of feature flags instead of seperate feature bits

Herbert Xu points out that the use of seperate feature bits for features to be propagated to VLAN devices is going to get messy real soon. Replace the VLAN feature bits by a bitmask of feature flags to be propagated and restore the old GSO_SHIFT/MASK values.

Looks great Patrick, thanks!

Cheers,

Signature · 4 lines
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <[email protected]>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
#2 lore raw
Quoted 18 lines · Patrick McHardy
Quoted 2 lines

[VLAN]: Use bitmask of feature flags instead of

seperate feature

Quoted 3 lines

bits

Herbert Xu points out that the use of seperate feature

bits for features

Quoted 1 line

to be propagated to VLAN devices is going to get messy

real soon.

Quoted 1 line

Replace the VLAN feature bits by a bitmask of feature

flags to be

Quoted 3 lines

propagated and restore the old GSO_SHIFT/MASK values.

Looks great Patrick, thanks!

Quoted 8 lines

Cheers,
--
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <[email protected]> Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt

Agreed. It looks great, and I'll also test it on ixgbe tomorrow morning.

Cheers,

-PJ Waskiewicz

maintainer
#3 lore raw

From: "Waskiewicz Jr, Peter P" <[email protected]>
Date: Fri, 23 May 2008 00:17:02 -0700

Quoted 2 lines

Agreed. It looks great, and I'll also test it on ixgbe tomorrow morning.

I'll try to get this merged either while I'm here at the RCC at Narita, or later tonight in Seoul.

Thanks everyone.

maintainer
#4 lore raw
In reply to Herbert Xu

From: Herbert Xu <[email protected]>
Date: Fri, 23 May 2008 17:09:45 +1000

Quoted 9 lines · Patrick McHardy
Quoted 8 lines

[VLAN]: Use bitmask of feature flags instead of seperate feature bits

Herbert Xu points out that the use of seperate feature bits for features to be propagated to VLAN devices is going to get messy real soon. Replace the VLAN feature bits by a bitmask of feature flags to be propagated and restore the old GSO_SHIFT/MASK values.

Quoted 5 lines
Quoted 1 line

Looks great Patrick, thanks!

Applied and pushed out to net-2.6, thanks everyone!

#5 lore raw
Quoted 14 lines
Quoted 3 lines · Patrick McHardy
Quoted 2 lines

[VLAN]: Use bitmask of feature flags instead of

seperate feature

Quoted 3 lines
Quoted 3 lines

bits

Herbert Xu points out that the use of seperate

feature bits for features

Quoted 1 line
Quoted 1 line

to be propagated to VLAN devices is going to get

messy real soon.

Quoted 1 line
Quoted 1 line

Replace the VLAN feature bits by a bitmask of feature

flags to be

Quoted 2 lines
Quoted 2 lines

propagated and restore the old GSO_SHIFT/MASK values.

Quoted 7 lines
Quoted 5 lines
Quoted 1 line

Looks great Patrick, thanks!

Applied and pushed out to net-2.6, thanks everyone!

Just to close the loop, also tested on ixgbe without issue.

Cheers,
-PJ Waskiewicz