map = swiotlb_tbl_map_single(dev, start_dma_addr, phys, size, dir,
                                     attrs);
-       if (map == DMA_MAPPING_ERROR)
+       if (map == (phys_addr_t)DMA_MAPPING_ERROR)
                return DMA_MAPPING_ERROR;
 
        dev_addr = xen_phys_to_bus(map);
 
        if (!(attrs & DMA_ATTR_NO_WARN) && printk_ratelimit())
                dev_warn(hwdev, "swiotlb buffer is full (sz: %zd bytes), total %lu (slots), used %lu (slots)\n",
                         size, io_tlb_nslabs, tmp_io_tlb_used);
-       return DMA_MAPPING_ERROR;
+       return (phys_addr_t)DMA_MAPPING_ERROR;
 found:
        io_tlb_used += nslots;
        spin_unlock_irqrestore(&io_tlb_lock, flags);
        /* Oh well, have to allocate and map a bounce buffer. */
        *phys = swiotlb_tbl_map_single(dev, __phys_to_dma(dev, io_tlb_start),
                        *phys, size, dir, attrs);
-       if (*phys == DMA_MAPPING_ERROR)
+       if (*phys == (phys_addr_t)DMA_MAPPING_ERROR)
                return false;
 
        /* Ensure that the address returned is DMA'ble */