From: Patrick McHardy <kaber@trash.net>
To: Peter Warasin <peter@endian.com>
Cc: Linux Netdev List <netdev@vger.kernel.org>
Subject: [RFC, VLAN]: Propagate selected feature bits to VLAN devices
Date: Tue, 20 May 2008 16:37:23 +0200 [thread overview]
Message-ID: <4832E223.7020206@trash.net> (raw)
[-- Attachment #1: Type: text/plain, Size: 124 bytes --]
This patch implements the TSO feature propagation we discussed.
Only compile-tested so far, testing and comments welcome.
[-- Attachment #2: x --]
[-- Type: text/plain, Size: 3030 bytes --]
commit b01a0b6b4a0463fe896e166d0782f0daca8c69ff
Author: Patrick McHardy <kaber@trash.net>
Date: Tue May 20 16:34:51 2008 +0200
[VLAN]: Propagate selected feature bits to VLAN devices
Propagate feature bits from the NETDEV_FEAT_CHANGE notifier. For now
only TSO is propagated for devices that announce their ability to
support TSO in combination with VLAN accel by setting the NETIF_F_VLAN_TSO
flag.
Signed-off-by: Patrick McHardy <kaber@trash.net>
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index b11e6e1..3be4559 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -514,10 +514,11 @@ 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 */
/* Segmentation offload features */
-#define NETIF_F_GSO_SHIFT 16
-#define NETIF_F_GSO_MASK 0xffff0000
+#define NETIF_F_GSO_SHIFT 20
+#define NETIF_F_GSO_MASK 0xfff00000
#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)
diff --git a/net/8021q/vlan.c b/net/8021q/vlan.c
index 2a739ad..1f172f7 100644
--- a/net/8021q/vlan.c
+++ b/net/8021q/vlan.c
@@ -382,6 +382,19 @@ static void vlan_sync_address(struct net_device *dev,
memcpy(vlan->real_dev_addr, dev->dev_addr, ETH_ALEN);
}
+static void vlan_transfer_features(struct net_device *dev,
+ struct net_device *vlandev)
+{
+ unsigned long old_features = vlandev->features;
+
+ if (dev->features & NETIF_F_VLAN_TSO)
+ vlandev->features |= dev->features &
+ (NETIF_F_TSO | NETIF_F_TSO6);
+
+ if (old_features != vlandev->features)
+ netdev_features_change(vlandev);
+}
+
static void __vlan_device_event(struct net_device *dev, unsigned long event)
{
switch (event) {
@@ -450,6 +463,18 @@ static int vlan_device_event(struct notifier_block *unused, unsigned long event,
}
break;
+ case NETDEV_FEAT_CHANGE:
+ /* Propagate device features to underlying device */
+ for (i = 0; i < VLAN_GROUP_ARRAY_LEN; i++) {
+ vlandev = vlan_group_get_device(grp, i);
+ if (!vlandev)
+ continue;
+
+ vlan_transfer_features(dev, vlandev);
+ }
+
+ break;
+
case NETDEV_DOWN:
/* Put all VLANs for this dev in the down state too. */
for (i = 0; i < VLAN_GROUP_ARRAY_LEN; i++) {
diff --git a/net/8021q/vlan_dev.c b/net/8021q/vlan_dev.c
index c961f08..3705d5a 100644
--- a/net/8021q/vlan_dev.c
+++ b/net/8021q/vlan_dev.c
@@ -662,6 +662,7 @@ static int vlan_dev_init(struct net_device *dev)
dev->state = (real_dev->state & ((1<<__LINK_STATE_NOCARRIER) |
(1<<__LINK_STATE_DORMANT))) |
(1<<__LINK_STATE_PRESENT);
+ dev->features = real_dev->features & (NETIF_F_TSO | NETIF_F_TSO6);
/* ipv6 shared card related stuff */
dev->dev_id = real_dev->dev_id;
next reply other threads:[~2008-05-20 14:37 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-05-20 14:37 Patrick McHardy [this message]
2008-05-20 14:38 ` [RFC, VLAN]: Propagate selected feature bits to VLAN devices Patrick McHardy
2008-05-20 14:48 ` Ben Hutchings
2008-05-20 14:51 ` Patrick McHardy
2008-05-20 15:46 ` Ben Greear
2008-05-20 16:20 ` Ben Hutchings
2008-05-20 16:27 ` Patrick McHardy
2008-05-20 16:28 ` Ben Greear
2008-05-20 17:22 ` Waskiewicz Jr, Peter P
2008-05-20 17:23 ` Patrick McHardy
2008-05-20 18:05 ` Ben Hutchings
2008-05-20 18:31 ` Patrick McHardy
2008-05-20 19:58 ` Waskiewicz Jr, Peter P
2008-05-20 23:59 ` Patrick McHardy
2008-05-20 21:55 ` David Miller
2008-05-20 23:58 ` Patrick McHardy
2008-05-21 15:49 ` Herbert Xu
2008-05-21 16:28 ` Patrick McHardy
2008-05-21 23:39 ` Herbert Xu
2008-05-22 17:47 ` Waskiewicz Jr, Peter P
2008-05-22 18:03 ` Patrick McHardy
2008-05-22 18:18 ` Waskiewicz Jr, Peter P
2008-05-22 18:25 ` Patrick McHardy
2008-05-22 18:57 ` Waskiewicz Jr, Peter P
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4832E223.7020206@trash.net \
--to=kaber@trash.net \
--cc=netdev@vger.kernel.org \
--cc=peter@endian.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.