diff --git a/debian/changelog b/debian/changelog index 4267b46ef..0f967ccf2 100644 --- a/debian/changelog +++ b/debian/changelog @@ -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 Sat, 29 Sep 2012 14:19:46 +0200 diff --git a/debian/patches/features/all/bql/e1000e-Change-wthresh-to-1-to-avoid-possible-Tx-stal.patch b/debian/patches/features/all/bql/e1000e-Change-wthresh-to-1-to-avoid-possible-Tx-stal.patch new file mode 100644 index 000000000..574e2556a --- /dev/null +++ b/debian/patches/features/all/bql/e1000e-Change-wthresh-to-1-to-avoid-possible-Tx-stal.patch @@ -0,0 +1,80 @@ +From: Hiroaki SHIMODA +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 +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 +Tested-by: Denys Fedoryshchenko +Signed-off-by: Hiroaki SHIMODA +CC: eric.dumazet@gmail.com +CC: therbert@google.com +Signed-off-by: Jesse Brandeburg +Signed-off-by: David S. Miller +--- + 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 diff --git a/debian/patches/series b/debian/patches/series index 565970366..79e81e10c 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -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