vt-d: Fix dma_set_pte_superpage
authorKeir Fraser <keir.fraser@citrix.com>
Fri, 10 Oct 2008 09:04:58 +0000 (10:04 +0100)
committerKeir Fraser <keir.fraser@citrix.com>
Fri, 10 Oct 2008 09:04:58 +0000 (10:04 +0100)
Superpage bit is bit 7 in VT-d page table entry.

Signed-off-by: Weidong Han <weidong.han@intel.com>
xen/drivers/passthrough/vtd/iommu.h

index 8b06ff7516056fe96cc3f2889de6bf1f1acde1cd..dd17a6b642c14a09f1d879f6545bed4d0faf5cb0 100644 (file)
@@ -258,15 +258,17 @@ struct context_entry {
 struct dma_pte {
     u64 val;
 };
-#define dma_clear_pte(p)    do {(p).val = 0;} while(0)
-#define dma_set_pte_readable(p) do {(p).val |= 1;} while(0)
-#define dma_set_pte_writable(p) do {(p).val |= 2;} while(0)
-#define dma_set_pte_superpage(p) do {(p).val |= 8;} while(0)
-#define dma_set_pte_prot(p, prot) do { (p).val = (((p).val >> 2) << 2) | ((prot) & 3);} while (0)
-#define dma_pte_addr(p) ((p).val & PAGE_MASK_4K)
-#define dma_set_pte_addr(p, addr) do {(p).val |= ((addr) >> PAGE_SHIFT_4K) << PAGE_SHIFT_4K;} while(0)
 #define DMA_PTE_READ (1)
 #define DMA_PTE_WRITE (2)
+#define dma_clear_pte(p)    do {(p).val = 0;} while(0)
+#define dma_set_pte_readable(p) do {(p).val |= DMA_PTE_READ;} while(0)
+#define dma_set_pte_writable(p) do {(p).val |= DMA_PTE_WRITE;} while(0)
+#define dma_set_pte_superpage(p) do {(p).val |= (1 << 7);} while(0)
+#define dma_set_pte_prot(p, prot) \
+            do {(p).val = ((p).val & ~3) | ((prot) & 3); } while (0)
+#define dma_pte_addr(p) ((p).val & PAGE_MASK_4K)
+#define dma_set_pte_addr(p, addr) do {\
+            (p).val |= ((addr) & PAGE_MASK_4K); } while (0)
 #define dma_pte_present(p) (((p).val & 3) != 0)
 
 /* interrupt remap entry */