summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Gortmaker <paul.gortmaker@windriver.com>2011-02-08 12:55:03 -0500
committerPaul Gortmaker <paul.gortmaker@windriver.com>2011-02-08 12:55:03 -0500
commitbee4090e9ccdb34184b4572743dd5fda427e96e0 (patch)
treedd0b6626f6552f1e6c73d6b67ff35e6f35168408
parent05560c0e77192b01b902ba79582fd15e7b8fbf24 (diff)
downloadrt-patches-bee4090e9ccdb34184b4572743dd5fda427e96e0.tar.gz
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
-rw-r--r--gianfar-Fix-TX-ring-processing-on-SMP-machines.patch75
-rw-r--r--series1
2 files changed, 0 insertions, 76 deletions
diff --git a/gianfar-Fix-TX-ring-processing-on-SMP-machines.patch b/gianfar-Fix-TX-ring-processing-on-SMP-machines.patch
deleted file mode 100644
index f8d0c90..0000000
--- a/gianfar-Fix-TX-ring-processing-on-SMP-machines.patch
+++ /dev/null
@@ -1,75 +0,0 @@
-From 42edbcbc3240b56cf89a426cbfe9c8d9051459c4 Mon Sep 17 00:00:00 2001
-From: Anton Vorontsov <avorontsov@ru.mvista.com>
-Date: Wed, 3 Mar 2010 08:18:58 +0000
-Subject: [PATCH] gianfar: Fix TX ring processing on SMP machines
-
-commit 42edbcbc3240b56cf89a426cbfe9c8d9051459c4 in tip.
-
-Starting with commit a3bc1f11e9b867a4f49505 ("gianfar: Revive SKB
-recycling") gianfar driver sooner or later stops transmitting any
-packets on SMP machines.
-
-start_xmit() prepares new skb for transmitting, generally it does
-three things:
-
-1. sets up all BDs (marks them ready to send), except the first one.
-2. stores skb into tx_queue->tx_skbuff so that clean_tx_ring()
- would cleanup it later.
-3. sets up the first BD, i.e. marks it ready.
-
-Here is what clean_tx_ring() does:
-
-1. reads skbs from tx_queue->tx_skbuff
-2. checks if the *last* BD is ready. If it's still ready [to send]
- then it it isn't transmitted, so clean_tx_ring() returns.
- Otherwise it actually cleanups BDs. All is OK.
-
-Now, if there is just one BD, code flow:
-
-- start_xmit(): stores skb into tx_skbuff. Note that the first BD
- (which is also the last one) isn't marked as ready, yet.
-- clean_tx_ring(): sees that skb is not null, *and* its lstatus
- says that it is NOT ready (like if BD was sent), so it cleans
- it up (bad!)
-- start_xmit(): marks BD as ready [to send], but it's too late.
-
-We can fix this simply by reordering lstatus/tx_skbuff writes.
-
-[ Upstream commit: 0eddba525cf4c3a4aab9feaf36b12b465290d4a7 ]
-
-Reported-by: Martyn Welch <martyn.welch@ge.com>
-Bisected-by: Paul Gortmaker <paul.gortmaker@windriver.com>
-Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
-Tested-by: Paul Gortmaker <paul.gortmaker@windriver.com>
-Tested-by: Martyn Welch <martyn.welch@ge.com>
-Cc: Sandeep Gopalpet <Sandeep.Kumar@freescale.com>
-Cc: Stable <stable@vger.kernel.org> [2.6.33]
-Signed-off-by: David S. Miller <davem@davemloft.net>
-Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-
-diff --git a/drivers/net/gianfar.c b/drivers/net/gianfar.c
-index 5c85948..f819db2 100644
---- a/drivers/net/gianfar.c
-+++ b/drivers/net/gianfar.c
-@@ -2021,7 +2021,6 @@ static int gfar_start_xmit(struct sk_buff *skb, struct net_device *dev)
- }
-
- /* setup the TxBD length and buffer pointer for the first BD */
-- tx_queue->tx_skbuff[tx_queue->skb_curtx] = skb;
- txbdp_start->bufPtr = dma_map_single(&priv->ofdev->dev, skb->data,
- skb_headlen(skb), DMA_TO_DEVICE);
-
-@@ -2053,6 +2052,10 @@ static int gfar_start_xmit(struct sk_buff *skb, struct net_device *dev)
-
- txbdp_start->lstatus = lstatus;
-
-+ eieio(); /* force lstatus write before tx_skbuff */
-+
-+ tx_queue->tx_skbuff[tx_queue->skb_curtx] = skb;
-+
- /* Update the current skb pointer to the next entry we will use
- * (wrapping if necessary) */
- tx_queue->skb_curtx = (tx_queue->skb_curtx + 1) &
---
-1.7.1.1
-
diff --git a/series b/series
index 6672eed..839c141 100644
--- a/series
+++ b/series
@@ -435,7 +435,6 @@ powerpc-Disable-sparse-irq-for-RT.patch
lockdep-Reduce-stack_trace-usage.patch
perf-Fix-errors-path-in-perf_output_begin.patch
timer_stats-Convert-table_lock-to-raw_spin_lock.patch
-gianfar-Fix-TX-ring-processing-on-SMP-machines.patch
# v2.6.33.5-rt24.patch
# v2.6.33.5-rt25.patch
# v2.6.33.6-rt26.patch