IFF_NO_QUEUE: Fix for drivers not calling ether_setup() (regression in 4.3)
This commit is contained in:
parent
2c39d8f576
commit
96504c2870
|
@ -36,6 +36,7 @@ linux (4.4.1-1) UNRELEASED; urgency=medium
|
||||||
- [i386/686-pae] mm: Fix types used in pgprot cacheability flags
|
- [i386/686-pae] mm: Fix types used in pgprot cacheability flags
|
||||||
translations
|
translations
|
||||||
- [i386/686-pae] PCI: Set pci=nobios by default
|
- [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 ]
|
[ Roger Shimizu ]
|
||||||
* Enable TTY_PRINTK as module (Closes: #814540).
|
* Enable TTY_PRINTK as module (Closes: #814540).
|
||||||
|
|
41
debian/patches/bugfix/all/iff_no_queue-fix-for-drivers-not-calling-ether_setup.patch
vendored
Normal file
41
debian/patches/bugfix/all/iff_no_queue-fix-for-drivers-not-calling-ether_setup.patch
vendored
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
From: Phil Sutter <phil@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@efficios.com>
|
||||||
|
Signed-off-by: Phil Sutter <phil@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;
|
|
@ -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-efi-setup-separate-efi-page-tables-in-kexec-path.patch
|
||||||
bugfix/x86/x86-mm-fix-types-used-in-pgprot-cacheability-flags-t.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
|
debian/i386-686-pae-pci-set-pci-nobios-by-default.patch
|
||||||
|
bugfix/all/iff_no_queue-fix-for-drivers-not-calling-ether_setup.patch
|
||||||
|
|
Loading…
Reference in New Issue