Signed-off-by: Suresh Siddha --- linux-2.6.8-rc2/arch/ia64/lib/swiotlb.c.orig 2004-08-04 14:12:09.000000000 -0700 +++ linux-2.6.8-rc2/arch/ia64/lib/swiotlb.c 2004-08-04 14:12:16.000000000 -0700 @@ -492,7 +492,7 @@ addr = SG_ENT_VIRT_ADDRESS(sg); dev_addr = virt_to_phys(addr); if (swiotlb_force || address_needs_mapping(hwdev, dev_addr)) { - sg->dma_address = (dma_addr_t) map_single(hwdev, addr, sg->length, dir); + sg->dma_address = (dma_addr_t) virt_to_phys(map_single(hwdev, addr, sg->length, dir)); if (!sg->dma_address) { /* Don't panic here, we expect pci_map_sg users to do proper error handling. */ @@ -522,7 +522,7 @@ for (i = 0; i < nelems; i++, sg++) if (sg->dma_address != SG_ENT_PHYS_ADDRESS(sg)) - unmap_single(hwdev, (void *) sg->dma_address, sg->dma_length, dir); + unmap_single(hwdev, (void *) phys_to_virt(sg->dma_address), sg->dma_length, dir); else if (dir == DMA_FROM_DEVICE) mark_clean(SG_ENT_VIRT_ADDRESS(sg), sg->dma_length); }