move page table handling utility functions from intel-iommu.c to dma_remapping.h, because some of them will be used in other .c files.
Signed-off-by: Weidong Han <[EMAIL PROTECTED]>
---
drivers/pci/intel-iommu.c | 45 ----------------------------------------
include/linux/dma_remapping.h | 46 ++++++++++++++++++++++++++++++++++++++++-
2 files changed, 45 insertions(+), 46 deletions(-)
diff --git a/drivers/pci/intel-iommu.c b/drivers/pci/intel-iommu.c
index 39c5e9d..a18e0b4 100644
--- a/drivers/pci/intel-iommu.c
+++ b/drivers/pci/intel-iommu.c
@@ -288,51 +288,6 @@ out:
spin_unlock_irqrestore(&iommu->lock, flags);
}
-/* page table handling */
-#define LEVEL_STRIDE (9)
-#define LEVEL_MASK (((u64)1 << LEVEL_STRIDE) - 1)
-
-static inline int agaw_to_level(int agaw)
-{
- return agaw + 2;
-}
-
-static inline int agaw_to_width(int agaw)
-{
- return 30 + agaw * LEVEL_STRIDE;
-
-}
-
-static inline int width_to_agaw(int width)
-{
- return (width - 30) / LEVEL_STRIDE;
-}
-
-static inline unsigned int level_to_offset_bits(int level)
-{
- return (12 + (level - 1) * LEVEL_STRIDE);
-}
-
-static inline int address_level_offset(u64 addr, int level)
-{
- return ((addr >> level_to_offset_bits(level)) & LEVEL_MASK);
-}
-
-static inline u64 level_mask(int level)
-{
- return ((u64)-1 << level_to_offset_bits(level));
-}
-
-static inline u64 level_size(int level)
-{
- return ((u64)1 << level_to_offset_bits(level));
-}
-
-static inline u64 align_to_level(u64 addr, int level)
-{
- return ((addr + level_size(level) - 1) & level_mask(level));
-}
-
static struct dma_pte * addr_to_dma_pte(struct dmar_domain *domain, u64 addr)
{
int addr_width = agaw_to_width(domain->agaw);
diff --git a/include/linux/dma_remapping.h b/include/linux/dma_remapping.h
index 66f7887..eeb8243 100644
--- a/include/linux/dma_remapping.h
+++ b/include/linux/dma_remapping.h
@@ -13,6 +13,50 @@
#define DMA_32BIT_PFN IOVA_PFN(DMA_32BIT_MASK)
#define DMA_64BIT_PFN IOVA_PFN(DMA_64BIT_MASK)
+/* page table handling */
+#define VTD_LEVEL_STRIDE (9)
+#define VTD_LEVEL_MASK (((u64)1 << VTD_LEVEL_STRIDE) - 1)
+
+static inline int agaw_to_level(int agaw)
+{
+ return agaw + 2;
+}
+
+static inline int agaw_to_width(int agaw)
+{
+ return 30 + agaw * VTD_LEVEL_STRIDE;
+}
+
+static inline int width_to_agaw(int width)
+{
+ return (width - 30) / VTD_LEVEL_STRIDE;
+}
+
+static inline unsigned int level_to_offset_bits(int level)
+{
+ return 12 + (level - 1) * VTD_LEVEL_STRIDE;
+}
+
+static inline int address_level_offset(u64 addr, int level)
+{
+ return (addr >> level_to_offset_bits(level)) & VTD_LEVEL_MASK;
+}
+
+static inline u64 level_mask(int level)
+{
+ return (u64)-1 << level_to_offset_bits(level);
+}
+
+static inline u64 level_size(int level)
+{
+ return (u64)1 << level_to_offset_bits(level);
+}
+
+static inline u64 align_to_level(u64 addr, int level)
+{
+ return (addr + level_size(level) - 1) & level_mask(level);
+}
+
/*
* 0: Present
@@ -27,7 +71,7 @@ struct root_entry {
#define ROOT_ENTRY_NR (VTD_PAGE_SIZE/sizeof(struct root_entry))
static inline bool root_present(struct root_entry *root)
{
- return (root->val & 1);
+ return root->val & 1;
}
static inline void set_root_present(struct root_entry *root)
{
--
1.5.1
0002-move-page-table-handling-utility-functions.patch
Description: 0002-move-page-table-handling-utility-functions.patch
