Skip to content

Commit 3401c77

Browse files
konradwilkgregkh
authored andcommitted
xen-swiotlb: Fix wrong panic.
commit ab2a47b upstream. 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. Signed-off-by: Konrad Rzeszutek Wilk <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent 6d473ff commit 3401c77

File tree

1 file changed

+4
-3
lines changed

1 file changed

+4
-3
lines changed

drivers/xen/swiotlb-xen.c

+4-3
Original file line numberDiff line numberDiff line change
@@ -278,9 +278,10 @@ dma_addr_t xen_swiotlb_map_page(struct device *dev, struct page *page,
278278
/*
279279
* Ensure that the address returned is DMA'ble
280280
*/
281-
if (!dma_capable(dev, dev_addr, size))
282-
panic("map_single: bounce buffer is not DMA'ble");
283-
281+
if (!dma_capable(dev, dev_addr, size)) {
282+
swiotlb_tbl_unmap_single(dev, map, size, dir);
283+
dev_addr = 0;
284+
}
284285
return dev_addr;
285286
}
286287
EXPORT_SYMBOL_GPL(xen_swiotlb_map_page);

0 commit comments

Comments
 (0)