* can be 32bit when dma_addr_t is 64bit leading to a loss in
  * information if the shift is done before casting to 64bit.
  */
-static inline dma_addr_t xen_phys_to_bus(phys_addr_t paddr)
+static inline dma_addr_t xen_phys_to_bus(struct device *dev, phys_addr_t paddr)
 {
        unsigned long bfn = pfn_to_bfn(XEN_PFN_DOWN(paddr));
        dma_addr_t dma = (dma_addr_t)bfn << XEN_PAGE_SHIFT;
        return paddr;
 }
 
-static inline dma_addr_t xen_virt_to_bus(void *address)
+static inline dma_addr_t xen_virt_to_bus(struct device *dev, void *address)
 {
-       return xen_phys_to_bus(virt_to_phys(address));
+       return xen_phys_to_bus(dev, virt_to_phys(address));
 }
 
 static inline int range_straddles_page_boundary(phys_addr_t p, size_t size)
         * Do not use virt_to_phys(ret) because on ARM it doesn't correspond
         * to *dma_handle. */
        phys = *dma_handle;
-       dev_addr = xen_phys_to_bus(phys);
+       dev_addr = xen_phys_to_bus(hwdev, phys);
        if (((dev_addr + size - 1 <= dma_mask)) &&
            !range_straddles_page_boundary(phys, size))
                *dma_handle = dev_addr;
                                unsigned long attrs)
 {
        phys_addr_t map, phys = page_to_phys(page) + offset;
-       dma_addr_t dev_addr = xen_phys_to_bus(phys);
+       dma_addr_t dev_addr = xen_phys_to_bus(dev, phys);
 
        BUG_ON(dir == DMA_NONE);
        /*
                return DMA_MAPPING_ERROR;
 
        phys = map;
-       dev_addr = xen_phys_to_bus(map);
+       dev_addr = xen_phys_to_bus(dev, map);
 
        /*
         * Ensure that the address returned is DMA'ble
 static int
 xen_swiotlb_dma_supported(struct device *hwdev, u64 mask)
 {
-       return xen_virt_to_bus(xen_io_tlb_end - 1) <= mask;
+       return xen_virt_to_bus(hwdev, xen_io_tlb_end - 1) <= mask;
 }
 
 const struct dma_map_ops xen_swiotlb_dma_ops = {