diff options
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.patch | 48 |
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))) { |