]> git.pld-linux.org Git - packages/kernel.git/commitdiff
- fix oopses with b44 with 4GB of mem
authorArkadiusz Miśkiewicz <arekm@maven.pl>
Tue, 15 Feb 2011 06:03:14 +0000 (06:03 +0000)
committercvs2git <feedback@pld-linux.org>
Sun, 24 Jun 2012 12:13:13 +0000 (12:13 +0000)
Changed files:
    kernel-small_fixes.patch -> 1.18

kernel-small_fixes.patch

index fe03e00fa3c1d9c3f08e7dab5b6d5ef7e206b2d5..f9af65f9ee446c06afe222365087d4e9e401941d 100644 (file)
@@ -170,3 +170,46 @@ index 31b71a2..18da702 100644
             cred->uid != tcred->suid ||
             cred->uid != tcred->uid  ||
             cred->gid != tcred->egid ||
+Subject: [PATCH -mm] swiotlb: fix wrong panic
+From: FUJITA Tomonori <fujita.tomonori@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@redhat.com>
+Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
+Tested-by: Arkadiusz Miskiewicz <arekm@maven.pl>
+Cc: stable@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
+
+
This page took 0.103674 seconds and 4 git commands to generate.