Skip to content

Commit ab2a47b

Browse files
committed
xen-swiotlb: Fix wrong panic.
Propagate the baremetal git commit "swiotlb: fix wrong panic" (fba99fa) in the Xen-SWIOTLB version. wherein 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 xen-swiotlb returns an error, b44 driver can use the own bouncing mechanism. CC: [email protected] Signed-off-by: Konrad Rzeszutek Wilk <[email protected]>
1 parent f4b2f07 commit ab2a47b

File tree

1 file changed

+4
-3
lines changed

1 file changed

+4
-3
lines changed

drivers/xen/swiotlb-xen.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -293,9 +293,10 @@ dma_addr_t xen_swiotlb_map_page(struct device *dev, struct page *page,
293293
/*
294294
* Ensure that the address returned is DMA'ble
295295
*/
296-
if (!dma_capable(dev, dev_addr, size))
297-
panic("map_single: bounce buffer is not DMA'ble");
298-
296+
if (!dma_capable(dev, dev_addr, size)) {
297+
swiotlb_tbl_unmap_single(dev, map, size, dir);
298+
dev_addr = 0;
299+
}
299300
return dev_addr;
300301
}
301302
EXPORT_SYMBOL_GPL(xen_swiotlb_map_page);

0 commit comments

Comments
 (0)