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