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 <[email protected]>
+
+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 <[email protected]>
+Signed-off-by: FUJITA Tomonori <[email protected]>
+Tested-by: Arkadiusz Miskiewicz <[email protected]>
+Cc: [email protected]
+---
+ 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

_______________________________________________
pld-cvs-commit mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to