e1000e: Change wthresh to 1 to avoid possible Tx stalls
svn path=/dists/sid/linux/; revision=19435
This commit is contained in:
parent
fef45a9d29
commit
fe2316a734
|
@ -33,6 +33,7 @@ linux (3.2.31-1) UNRELEASED; urgency=low
|
|||
- Fix statfs() values when different block sizes are in use
|
||||
* udeb: Add hid-logitech-dj to input-modules (Closes: #661379)
|
||||
* connector: Make CONNECTOR built-in; enable PROC_EVENTS (Closes: #588200)
|
||||
* e1000e: Change wthresh to 1 to avoid possible Tx stalls
|
||||
|
||||
-- Ben Hutchings <ben@decadent.org.uk> Sat, 29 Sep 2012 14:19:46 +0200
|
||||
|
||||
|
|
80
debian/patches/features/all/bql/e1000e-Change-wthresh-to-1-to-avoid-possible-Tx-stal.patch
vendored
Normal file
80
debian/patches/features/all/bql/e1000e-Change-wthresh-to-1-to-avoid-possible-Tx-stal.patch
vendored
Normal file
|
@ -0,0 +1,80 @@
|
|||
From: Hiroaki SHIMODA <shimoda.hiroaki@gmail.com>
|
||||
Date: Wed, 10 Oct 2012 15:34:20 +0000
|
||||
Subject: e1000e: Change wthresh to 1 to avoid possible Tx stalls
|
||||
|
||||
commit 8edc0e624db3756783233e464879eb2e3b904c13 upstream.
|
||||
|
||||
This patch originated from Hiroaki SHIMODA but has been modified
|
||||
by Intel with some minor cleanups and additional commit log text.
|
||||
|
||||
Denys Fedoryshchenko and others reported Tx stalls on e1000e with
|
||||
BQL enabled. Issue was root caused to hardware delays. They were
|
||||
introduced because some of the e1000e hardware with transmit
|
||||
writeback bursting enabled, waits until the driver does an
|
||||
explict flush OR there are WTHRESH descriptors to write back.
|
||||
|
||||
Sometimes the delays in question were on the order of seconds,
|
||||
causing visible lag for ssh sessions and unacceptable tx
|
||||
completion latency, especially for BQL enabled kernels.
|
||||
|
||||
To avoid possible Tx stalls, change WTHRESH back to 1.
|
||||
|
||||
The current plan is to investigate a method for re-enabling
|
||||
WTHRESH while not harming BQL, but those patches will be later
|
||||
for net-next if they work.
|
||||
|
||||
please enqueue for stable since v3.3 as this bug was introduced in
|
||||
commit 3f0cfa3bc11e7f00c9994e0f469cbc0e7da7b00c
|
||||
Author: Tom Herbert <therbert@google.com>
|
||||
Date: Mon Nov 28 16:33:16 2011 +0000
|
||||
|
||||
e1000e: Support for byte queue limits
|
||||
|
||||
Changes to e1000e to use byte queue limits.
|
||||
|
||||
Reported-by: Denys Fedoryshchenko <denys@visp.net.lb>
|
||||
Tested-by: Denys Fedoryshchenko <denys@visp.net.lb>
|
||||
Signed-off-by: Hiroaki SHIMODA <shimoda.hiroaki@gmail.com>
|
||||
CC: eric.dumazet@gmail.com
|
||||
CC: therbert@google.com
|
||||
Signed-off-by: Jesse Brandeburg <jesse.brandeburg@intel.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
drivers/net/ethernet/intel/e1000e/e1000.h | 6 +++---
|
||||
drivers/net/ethernet/intel/e1000e/netdev.c | 2 +-
|
||||
2 files changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/ethernet/intel/e1000e/e1000.h b/drivers/net/ethernet/intel/e1000e/e1000.h
|
||||
index cb3356c..04668b4 100644
|
||||
--- a/drivers/net/ethernet/intel/e1000e/e1000.h
|
||||
+++ b/drivers/net/ethernet/intel/e1000e/e1000.h
|
||||
@@ -175,13 +175,13 @@ struct e1000_info;
|
||||
/*
|
||||
* in the case of WTHRESH, it appears at least the 82571/2 hardware
|
||||
* writes back 4 descriptors when WTHRESH=5, and 3 descriptors when
|
||||
- * WTHRESH=4, and since we want 64 bytes at a time written back, set
|
||||
- * it to 5
|
||||
+ * WTHRESH=4, so a setting of 5 gives the most efficient bus
|
||||
+ * utilization but to avoid possible Tx stalls, set it to 1
|
||||
*/
|
||||
#define E1000_TXDCTL_DMA_BURST_ENABLE \
|
||||
(E1000_TXDCTL_GRAN | /* set descriptor granularity */ \
|
||||
E1000_TXDCTL_COUNT_DESC | \
|
||||
- (5 << 16) | /* wthresh must be +1 more than desired */\
|
||||
+ (1 << 16) | /* wthresh must be +1 more than desired */\
|
||||
(1 << 8) | /* hthresh */ \
|
||||
0x1f) /* pthresh */
|
||||
|
||||
diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c
|
||||
index de57a2b..f444eb0 100644
|
||||
--- a/drivers/net/ethernet/intel/e1000e/netdev.c
|
||||
+++ b/drivers/net/ethernet/intel/e1000e/netdev.c
|
||||
@@ -2831,7 +2831,7 @@ static void e1000_configure_tx(struct e1000_adapter *adapter)
|
||||
* set up some performance related parameters to encourage the
|
||||
* hardware to use the bus more efficiently in bursts, depends
|
||||
* on the tx_int_delay to be enabled,
|
||||
- * wthresh = 5 ==> burst write a cacheline (64 bytes) at a time
|
||||
+ * wthresh = 1 ==> burst write is disabled to avoid Tx stalls
|
||||
* hthresh = 1 ==> prefetch when one or more available
|
||||
* pthresh = 0x1f ==> prefetch if internal cache 31 or less
|
||||
* BEWARE: this seems to work but should be considered first if
|
|
@ -369,6 +369,7 @@ features/all/bql/bql-fix-posdiff-to-integer-overflow-aware.patch
|
|||
features/all/bql/bql-avoid-unneeded-limit-decrement.patch
|
||||
features/all/bql/bql-avoid-possible-inconsistent-calculation.patch
|
||||
features/all/bql/e1000e-support-for-byte-queue-limits.patch
|
||||
features/all/bql/e1000e-Change-wthresh-to-1-to-avoid-possible-Tx-stal.patch
|
||||
features/all/bql/forcedeth-support-for-byte-queue-limits.patch
|
||||
features/all/bql/forcedeath-fix-bql-support-for-forcedeath.patch
|
||||
features/all/bql/tg3-support-for-byte-queue-limits.patch
|
||||
|
|
Loading…
Reference in New Issue