From: Greg Kroah-Hartman Date: Thu, 10 Sep 2009 22:34:55 +0000 (-0700) Subject: start .27 queue X-Git-Tag: v2.6.27.34~5 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=92c7897d87a13748796086972d1741bdf3078ed7;p=thirdparty%2Fkernel%2Fstable-queue.git start .27 queue --- diff --git a/queue-2.6.27/e100-fix-interaction-with-swiotlb-on-x86.patch b/queue-2.6.27/e100-fix-interaction-with-swiotlb-on-x86.patch new file mode 100644 index 00000000000..7a583de4df8 --- /dev/null +++ b/queue-2.6.27/e100-fix-interaction-with-swiotlb-on-x86.patch @@ -0,0 +1,42 @@ +From 6a5b8fbb81c74441aa1d50855e56c3c30c3b283a Mon Sep 17 00:00:00 2001 +From: Krzysztof Hałasa +Date: Sun, 23 Aug 2009 19:02:13 -0700 +Subject: E100: fix interaction with swiotlb on X86. + +From: Krzysztof Hałasa + +[ Upstream commit 6ff9c2e7fa8ca63a575792534b63c5092099c286 ] + +E100 places it's RX packet descriptors inside skb->data and uses them +with bidirectional streaming DMA mapping. Data in descriptors is +accessed simultaneously by the chip (writing status and size when +a packet is received) and CPU (reading to check if the packet was +received). This isn't a valid usage of PCI DMA API, which requires use +of the coherent (consistent) memory for such purpose. Unfortunately e100 +chips working in "simplified" RX mode have to store received data +directly after the descriptor. Fixing the driver to conform to the API +would require using unsupported "flexible" RX mode or receiving data +into a coherent memory and using CPU to copy it to network buffers. + +This patch, while not yet making the driver conform to the PCI DMA API, +allows it to work correctly on X86 with swiotlb (while not breaking +other architectures). + +Signed-off-by: Krzysztof Hałasa +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman +--- + drivers/net/e100.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/net/e100.c ++++ b/drivers/net/e100.c +@@ -1842,7 +1842,7 @@ static int e100_rx_indicate(struct nic * + nic->ru_running = RU_SUSPENDED; + pci_dma_sync_single_for_device(nic->pdev, rx->dma_addr, + sizeof(struct rfd), +- PCI_DMA_BIDIRECTIONAL); ++ PCI_DMA_FROMDEVICE); + return -ENODATA; + } + diff --git a/queue-2.6.27/net-net_assign_generic-fix.patch b/queue-2.6.27/net-net_assign_generic-fix.patch new file mode 100644 index 00000000000..c1912d617fd --- /dev/null +++ b/queue-2.6.27/net-net_assign_generic-fix.patch @@ -0,0 +1,31 @@ +From ff0ffe964c49d2a0693dc4c2575ca887f684c6c4 Mon Sep 17 00:00:00 2001 +From: Eric Dumazet +Date: Tue, 28 Jul 2009 02:36:15 +0000 +Subject: net: net_assign_generic() fix + +From: Eric Dumazet + +[ Upstream commit 144586301f6af5ae5943a002f030d8c626fa4fdd ] + +memcpy() should take into account size of pointers, +not only number of pointers to copy. + +Signed-off-by: Eric Dumazet +Acked-by: Pavel Emelyanov +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman +--- + net/core/net_namespace.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/net/core/net_namespace.c ++++ b/net/core/net_namespace.c +@@ -446,7 +446,7 @@ int net_assign_generic(struct net *net, + + ng->len = id; + INIT_RCU_HEAD(&ng->rcu); +- memcpy(&ng->ptr, &old_ng->ptr, old_ng->len); ++ memcpy(&ng->ptr, &old_ng->ptr, old_ng->len * sizeof(void*)); + + rcu_assign_pointer(net->gen, ng); + call_rcu(&old_ng->rcu, net_generic_release); diff --git a/queue-2.6.27/series b/queue-2.6.27/series new file mode 100644 index 00000000000..d476e44b283 --- /dev/null +++ b/queue-2.6.27/series @@ -0,0 +1,2 @@ +e100-fix-interaction-with-swiotlb-on-x86.patch +net-net_assign_generic-fix.patch