packages: kernel/kernel-small_fixes.patch - fix oopses with b44 with 4GB of...
arekm
arekm at pld-linux.org
Tue Feb 15 07:03:19 CET 2011
Author: arekm Date: Tue Feb 15 06:03:19 2011 GMT
Module: packages Tag: HEAD
---- Log message:
- fix oopses with b44 with 4GB of mem
---- Files affected:
packages/kernel:
kernel-small_fixes.patch (1.17 -> 1.18)
---- Diffs:
================================================================
Index: packages/kernel/kernel-small_fixes.patch
diff -u packages/kernel/kernel-small_fixes.patch:1.17 packages/kernel/kernel-small_fixes.patch:1.18
--- packages/kernel/kernel-small_fixes.patch:1.17 Thu Feb 10 19:52:25 2011
+++ packages/kernel/kernel-small_fixes.patch Tue Feb 15 07:03:14 2011
@@ -170,3 +170,46 @@
cred->uid != tcred->suid ||
cred->uid != tcred->uid ||
cred->gid != tcred->egid ||
+Subject: [PATCH -mm] swiotlb: fix wrong panic
+From: FUJITA Tomonori <fujita.tomonori at lab.ntt.co.jp>
+
+swiotlb's map_page wrongly calls panic() when it can't find a buffer
+fit for device's dma mask. It should return an error instead.
+
+Devices with an odd dma mask (i.e. under 4G) like b44 network card hit
+this bug (the system crashes):
+
+http://marc.info/?l=linux-kernel&m=129648943830106&w=2
+
+If swiotlb returns an error, b44 driver can use the own bouncing
+mechanism.
+
+Reported-by: Chuck Ebbert <cebbert at redhat.com>
+Signed-off-by: FUJITA Tomonori <fujita.tomonori at lab.ntt.co.jp>
+Tested-by: Arkadiusz Miskiewicz <arekm at maven.pl>
+Cc: stable at kernel.org
+---
+ lib/swiotlb.c | 6 ++++--
+ 1 files changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/lib/swiotlb.c b/lib/swiotlb.c
+index c47bbe1..93ca08b 100644
+--- a/lib/swiotlb.c
++++ b/lib/swiotlb.c
+@@ -686,8 +686,10 @@ dma_addr_t swiotlb_map_page(struct device *dev, struct page *page,
+ /*
+ * Ensure that the address returned is DMA'ble
+ */
+- if (!dma_capable(dev, dev_addr, size))
+- panic("map_single: bounce buffer is not DMA'ble");
++ if (!dma_capable(dev, dev_addr, size)) {
++ swiotlb_tbl_unmap_single(dev, map, size, dir);
++ dev_addr = swiotlb_virt_to_bus(dev, io_tlb_overflow_buffer);
++ }
+
+ return dev_addr;
+ }
+--
+1.7.2.3
+
+
================================================================
---- CVS-web:
http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/packages/kernel/kernel-small_fixes.patch?r1=1.17&r2=1.18&f=u
More information about the pld-cvs-commit
mailing list