diff --git a/drivers/xen/swiotlb-xen.c b/drivers/xen/swiotlb-xen.c index b6d27762c..4890cec96 100644 --- a/drivers/xen/swiotlb-xen.c +++ b/drivers/xen/swiotlb-xen.c @@ -255,6 +255,7 @@ int __ref xen_swiotlb_init(int verbose, bool early) if (!rc) swiotlb_set_max_segment(PAGE_SIZE); +printk("DEBUG %s %d start=%llx end=%llx\n",__func__,__LINE__,start_dma_addr,start_dma_addr+bytes); return rc; error: if (repeat--) { @@ -324,6 +325,10 @@ xen_swiotlb_alloc_coherent(struct device *hwdev, size_t size, } SetPageXenRemapped(virt_to_page(ret)); } +if (!dma_capable(hwdev, *dma_handle, size, true)) + printk("DEBUG1 %s %d phys=%llx dma=%llx dma_mask=%llx\n",__func__,__LINE__,phys,*dma_handle,dma_mask); +if (dev_addr + size - 1 > dma_mask) + printk("DEBUG2 %s %d phys=%llx dma=%llx dma_mask=%llx\n",__func__,__LINE__,phys,*dma_handle,dma_mask); memset(ret, 0, size); return ret; } @@ -398,6 +408,7 @@ static dma_addr_t xen_swiotlb_map_page(struct device *dev, struct page *page, * Ensure that the address returned is DMA'ble */ if (unlikely(!dma_capable(dev, dev_addr, size, true))) { +printk("DEBUG3 %s %d phys=%llx dma=%llx\n",__func__,__LINE__,phys,dev_addr); swiotlb_tbl_unmap_single(dev, map, size, size, dir, attrs | DMA_ATTR_SKIP_CPU_SYNC); return DMA_MAPPING_ERROR;