aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/layerscape/patches-4.4/7021-net-Make-the-netdev-watchdog-aware-of-hardware-multi.patch
diff options
context:
space:
mode:
authorYutang Jiang <yutang.jiang@nxp.com>2016-10-29 00:14:32 +0800
committerJohn Crispin <john@phrozen.org>2016-10-31 17:00:10 +0100
commitc6c731fe311f7da42777ffd31804a4f6aa3f8e19 (patch)
treed92c7296f82d46d1b2da30933a97595f6cb8ad66 /target/linux/layerscape/patches-4.4/7021-net-Make-the-netdev-watchdog-aware-of-hardware-multi.patch
parenta34f96d6cf80c7c3c425076714d9c4caa67e3670 (diff)
downloadupstream-c6c731fe311f7da42777ffd31804a4f6aa3f8e19.tar.gz
upstream-c6c731fe311f7da42777ffd31804a4f6aa3f8e19.tar.bz2
upstream-c6c731fe311f7da42777ffd31804a4f6aa3f8e19.zip
layerscape: add 64b/32b target for ls1043ardb device
Add support for NXP layerscape ls1043ardb 64b/32b Dev board. LS1043a is an SoC with 4x64-bit up to 1.6 GHz ARMv8 A53 cores. ls1043ardb support features as: 2GB DDR4, 128MB NOR/512MB NAND, USB3.0, eSDHC, I2C, GPIO, PCIe/Mini-PCIe, 6x1G/1x10G network port, etc. 64b/32b ls1043ardb target is using 4.4 kernel, and rcw/u-boot/fman images from NXP QorIQ SDK release. All of 4.4 kernel patches porting from SDK release or upstream. QorIQ SDK ISOs can be downloaded from this location: http://www.nxp.com/products/software-and-tools/run-time-software/linux-sdk/linux-sdk-for-qoriq-processors:SDKLINUX Signed-off-by: Yutang Jiang <yutang.jiang@nxp.com>
Diffstat (limited to 'target/linux/layerscape/patches-4.4/7021-net-Make-the-netdev-watchdog-aware-of-hardware-multi.patch')
-rw-r--r--target/linux/layerscape/patches-4.4/7021-net-Make-the-netdev-watchdog-aware-of-hardware-multi.patch48
1 files changed, 48 insertions, 0 deletions
diff --git a/target/linux/layerscape/patches-4.4/7021-net-Make-the-netdev-watchdog-aware-of-hardware-multi.patch b/target/linux/layerscape/patches-4.4/7021-net-Make-the-netdev-watchdog-aware-of-hardware-multi.patch
new file mode 100644
index 0000000000..69bba053a7
--- /dev/null
+++ b/target/linux/layerscape/patches-4.4/7021-net-Make-the-netdev-watchdog-aware-of-hardware-multi.patch
@@ -0,0 +1,48 @@
+From 6aa1eca98ca44f515e10d8058d0ff6db3c8a3c11 Mon Sep 17 00:00:00 2001
+From: Bogdan Hamciuc <bogdan.hamciuc@freescale.com>
+Date: Fri, 28 Sep 2012 17:04:33 +0300
+Subject: [PATCH 21/70] net: Make the netdev watchdog aware of hardware
+ multiqueue devices
+
+If the netdev declares the NETIF_F_HW_ACCEL_MQ (accelerated multiqueue)
+capability, tell the watchdog to consider the per-netdev trans_start
+field rather than any individual multiqueue's timestamp. That is
+justified by the fact that queues only go in and out of congestion
+in groups, not individually, as far as the net device is concerned.
+
+Change-Id: I07a6693bf1f0bb1e9396c5e232452223a511ecc1
+Signed-off-by: Bogdan Hamciuc <bogdan.hamciuc@freescale.com>
+Reviewed-on: http://git.am.freescale.net:8181/1033
+Reviewed-by: Fleming Andrew-AFLEMING <AFLEMING@freescale.com>
+Tested-by: Fleming Andrew-AFLEMING <AFLEMING@freescale.com>
+---
+ net/sched/sch_generic.c | 17 ++++++++++++++++-
+ 1 file changed, 16 insertions(+), 1 deletion(-)
+
+--- a/net/sched/sch_generic.c
++++ b/net/sched/sch_generic.c
+@@ -290,8 +290,23 @@ static void dev_watchdog(unsigned long a
+ txq = netdev_get_tx_queue(dev, i);
+ /*
+ * old device drivers set dev->trans_start
++ *
++ * (Actually, not only "old" devices, but also
++ * those which perform queue management in a
++ * separate hw accelerator. So even though the
++ * net device itself is single-queued, it makes
++ * sense (and is safe, too) to use kernel's
++ * multiqueue interface, specifically to avoid
++ * unnecessary device locking in SMP systems.
++ * In this case, we ought to consider not an
++ * individual txq's timestamp as a congestion
++ * indicator, but the "old" per-netdev field.)
+ */
+- trans_start = txq->trans_start ? : dev->trans_start;
++ if (dev->features & NETIF_F_HW_ACCEL_MQ)
++ trans_start = dev->trans_start;
++ else
++ trans_start = txq->trans_start ? :
++ dev->trans_start;
+ if (netif_xmit_stopped(txq) &&
+ time_after(jiffies, (trans_start +
+ dev->watchdog_timeo))) {