Merge branch 'x86/iommu' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip into for-linus

authored by

Jesse Barnes and committed by
Jesse Barnes
29111f57 cc5499c3

+18 -15
+5 -8
arch/x86/kernel/amd_iommu.c
··· 29 29 30 30 #define CMD_SET_TYPE(cmd, t) ((cmd)->data[1] |= ((t) << 28)) 31 31 32 - #define to_pages(addr, size) \ 33 - (round_up(((addr) & ~PAGE_MASK) + (size), PAGE_SIZE) >> PAGE_SHIFT) 34 - 35 32 #define EXIT_LOOP_COUNT 10000000 36 33 37 34 static DEFINE_RWLOCK(amd_iommu_devtable_lock); ··· 182 185 u64 address, size_t size) 183 186 { 184 187 int s = 0; 185 - unsigned pages = to_pages(address, size); 188 + unsigned pages = iommu_num_pages(address, size); 186 189 187 190 address &= PAGE_MASK; 188 191 ··· 554 557 if (iommu->exclusion_start && 555 558 iommu->exclusion_start < dma_dom->aperture_size) { 556 559 unsigned long startpage = iommu->exclusion_start >> PAGE_SHIFT; 557 - int pages = to_pages(iommu->exclusion_start, 558 - iommu->exclusion_length); 560 + int pages = iommu_num_pages(iommu->exclusion_start, 561 + iommu->exclusion_length); 559 562 dma_ops_reserve_addresses(dma_dom, startpage, pages); 560 563 } 561 564 ··· 764 767 unsigned int pages; 765 768 int i; 766 769 767 - pages = to_pages(paddr, size); 770 + pages = iommu_num_pages(paddr, size); 768 771 paddr &= PAGE_MASK; 769 772 770 773 address = dma_ops_alloc_addresses(dev, dma_dom, pages); ··· 799 802 if ((dma_addr == 0) || (dma_addr + size > dma_dom->aperture_size)) 800 803 return; 801 804 802 - pages = to_pages(dma_addr, size); 805 + pages = iommu_num_pages(dma_addr, size); 803 806 dma_addr &= PAGE_MASK; 804 807 start = dma_addr; 805 808
+4 -7
arch/x86/kernel/pci-gart_64.c
··· 67 67 (((x) & 0xfffff000) | (((x) >> 32) << 4) | GPTE_VALID | GPTE_COHERENT) 68 68 #define GPTE_DECODE(x) (((x) & 0xfffff000) | (((u64)(x) & 0xff0) << 28)) 69 69 70 - #define to_pages(addr, size) \ 71 - (round_up(((addr) & ~PAGE_MASK) + (size), PAGE_SIZE) >> PAGE_SHIFT) 72 - 73 70 #define EMERGENCY_PAGES 32 /* = 128KB */ 74 71 75 72 #ifdef CONFIG_AGP ··· 238 241 static dma_addr_t dma_map_area(struct device *dev, dma_addr_t phys_mem, 239 242 size_t size, int dir) 240 243 { 241 - unsigned long npages = to_pages(phys_mem, size); 244 + unsigned long npages = iommu_num_pages(phys_mem, size); 242 245 unsigned long iommu_page = alloc_iommu(dev, npages); 243 246 int i; 244 247 ··· 301 304 return; 302 305 303 306 iommu_page = (dma_addr - iommu_bus_base)>>PAGE_SHIFT; 304 - npages = to_pages(dma_addr, size); 307 + npages = iommu_num_pages(dma_addr, size); 305 308 for (i = 0; i < npages; i++) { 306 309 iommu_gatt_base[iommu_page + i] = gart_unmapped_entry; 307 310 CLEAR_LEAK(iommu_page + i); ··· 384 387 } 385 388 386 389 addr = phys_addr; 387 - pages = to_pages(s->offset, s->length); 390 + pages = iommu_num_pages(s->offset, s->length); 388 391 while (pages--) { 389 392 iommu_gatt_base[iommu_page] = GPTE_ENCODE(addr); 390 393 SET_LEAK(iommu_page); ··· 467 470 468 471 seg_size += s->length; 469 472 need = nextneed; 470 - pages += to_pages(s->offset, s->length); 473 + pages += iommu_num_pages(s->offset, s->length); 471 474 ps = s; 472 475 } 473 476 if (dma_map_cont(dev, start_sg, i - start, sgmap, pages, need) < 0)
+1
include/linux/iommu-helper.h
··· 8 8 unsigned long align_mask); 9 9 extern void iommu_area_free(unsigned long *map, unsigned long start, 10 10 unsigned int nr); 11 + extern unsigned long iommu_num_pages(unsigned long addr, unsigned long len);
+8
lib/iommu-helper.c
··· 80 80 } 81 81 } 82 82 EXPORT_SYMBOL(iommu_area_free); 83 + 84 + unsigned long iommu_num_pages(unsigned long addr, unsigned long len) 85 + { 86 + unsigned long size = roundup((addr & ~PAGE_MASK) + len, PAGE_SIZE); 87 + 88 + return size >> PAGE_SHIFT; 89 + } 90 + EXPORT_SYMBOL(iommu_num_pages);