[linux] 01/02: IFF_NO_QUEUE: Fix for drivers not calling ether_setup() (regression in 4.3)
debian-kernel at lists.debian.org
debian-kernel at lists.debian.org
Wed Feb 17 18:00:39 UTC 2016
This is an automated email from the git hooks/post-receive script.
benh pushed a commit to branch sid
in repository linux.
commit 96504c28700902aa296085e6ccbfa8f18fd22d68
Author: Ben Hutchings <ben at decadent.org.uk>
Date: Wed Feb 17 16:05:10 2016 +0000
IFF_NO_QUEUE: Fix for drivers not calling ether_setup() (regression in 4.3)
---
debian/changelog | 1 +
...e-fix-for-drivers-not-calling-ether_setup.patch | 41 ++++++++++++++++++++++
debian/patches/series | 1 +
3 files changed, 43 insertions(+)
diff --git a/debian/changelog b/debian/changelog
index 5befcf2..c6bf414 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -36,6 +36,7 @@ linux (4.4.1-1) UNRELEASED; urgency=medium
- [i386/686-pae] mm: Fix types used in pgprot cacheability flags
translations
- [i386/686-pae] PCI: Set pci=nobios by default
+ * IFF_NO_QUEUE: Fix for drivers not calling ether_setup() (regression in 4.3)
[ Roger Shimizu ]
* Enable TTY_PRINTK as module (Closes: #814540).
diff --git a/debian/patches/bugfix/all/iff_no_queue-fix-for-drivers-not-calling-ether_setup.patch b/debian/patches/bugfix/all/iff_no_queue-fix-for-drivers-not-calling-ether_setup.patch
new file mode 100644
index 0000000..defcd96
--- /dev/null
+++ b/debian/patches/bugfix/all/iff_no_queue-fix-for-drivers-not-calling-ether_setup.patch
@@ -0,0 +1,41 @@
+From: Phil Sutter <phil at nwl.cc>
+Date: Wed, 17 Feb 2016 15:37:43 +0100
+Subject: IFF_NO_QUEUE: Fix for drivers not calling ether_setup()
+Origin: http://mid.gmane.org/1455719863-25730-1-git-send-email-phil@nwl.cc
+
+My implementation around IFF_NO_QUEUE driver flag assumed that leaving
+tx_queue_len untouched (specifically: not setting it to zero) by drivers
+would make it possible to assign a regular qdisc to them without having
+to worry about setting tx_queue_len to a useful value. This was only
+partially true: I overlooked that some drivers don't call ether_setup()
+and therefore not initialize tx_queue_len to the default value of 1000.
+Consequently, removing the workarounds in place for that case in qdisc
+implementations which cared about it (namely, pfifo, bfifo, gred, htb,
+plug and sfb) leads to problems with these specific interface types and
+qdiscs.
+
+Luckily, there's already a sanitization point for drivers setting
+tx_queue_len to zero, which can be reused to assign the fallback value
+most qdisc implementations used, which is 1.
+
+Fixes: 348e3435cbefa ("net: sched: drop all special handling of tx_queue_len == 0")
+Tested-by: Mathieu Desnoyers <mathieu.desnoyers at efficios.com>
+Signed-off-by: Phil Sutter <phil at nwl.cc>
+---
+ net/core/dev.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+--- a/net/core/dev.c
++++ b/net/core/dev.c
+@@ -7125,8 +7125,10 @@ struct net_device *alloc_netdev_mqs(int
+ dev->priv_flags = IFF_XMIT_DST_RELEASE | IFF_XMIT_DST_RELEASE_PERM;
+ setup(dev);
+
+- if (!dev->tx_queue_len)
++ if (!dev->tx_queue_len) {
+ dev->priv_flags |= IFF_NO_QUEUE;
++ dev->tx_queue_len = 1;
++ }
+
+ dev->num_tx_queues = txqs;
+ dev->real_num_tx_queues = txqs;
diff --git a/debian/patches/series b/debian/patches/series
index 646e47c..379f50e 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -132,3 +132,4 @@ bugfix/x86/x86-efi-build-our-own-page-table-structures.patch
bugfix/x86/x86-efi-setup-separate-efi-page-tables-in-kexec-path.patch
bugfix/x86/x86-mm-fix-types-used-in-pgprot-cacheability-flags-t.patch
debian/i386-686-pae-pci-set-pci-nobios-by-default.patch
+bugfix/all/iff_no_queue-fix-for-drivers-not-calling-ether_setup.patch
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/kernel/linux.git
More information about the Kernel-svn-changes
mailing list