From: Joerg Roedel This patch introduces the generic iommu_num_pages function. It can be used by a given memory area. Signed-off-by: Joerg Roedel Cc: "David S. Miller" Cc: Richard Henderson Cc: Ivan Kokshaysky Cc: Benjamin Herrenschmidt Cc: Paul Mackerras Cc: Ingo Molnar Cc: Thomas Gleixner Cc: FUJITA Tomonori Cc: Muli Ben-Yehuda Cc: Dave Airlie Signed-off-by: Andrew Morton --- include/linux/iommu-helper.h | 2 ++ lib/iommu-helper.c | 9 +++++++++ 2 files changed, 11 insertions(+) diff -puN include/linux/iommu-helper.h~introduce-generic-iommu_num_pages-function include/linux/iommu-helper.h --- a/include/linux/iommu-helper.h~introduce-generic-iommu_num_pages-function +++ a/include/linux/iommu-helper.h @@ -8,3 +8,5 @@ extern unsigned long iommu_area_alloc(un unsigned long align_mask); extern void iommu_area_free(unsigned long *map, unsigned long start, unsigned int nr); +extern unsigned long iommu_num_pages(unsigned long addr, unsigned long len, + unsigned long io_page_size); diff -puN lib/iommu-helper.c~introduce-generic-iommu_num_pages-function lib/iommu-helper.c --- a/lib/iommu-helper.c~introduce-generic-iommu_num_pages-function +++ a/lib/iommu-helper.c @@ -80,3 +80,12 @@ void iommu_area_free(unsigned long *map, } } EXPORT_SYMBOL(iommu_area_free); + +unsigned long iommu_num_pages(unsigned long addr, unsigned long len, + unsigned long io_page_size) +{ + unsigned long size = (addr & (io_page_size - 1)) + len; + + return DIV_ROUND_UP(size, io_page_size); +} +EXPORT_SYMBOL(iommu_num_pages); _