From a64e3fbcf1158bf7633e309a3fd626868ea0c01a Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Fri, 10 Oct 2008 10:04:58 +0100 Subject: [PATCH] vt-d: Fix dma_set_pte_superpage Superpage bit is bit 7 in VT-d page table entry. Signed-off-by: Weidong Han --- xen/drivers/passthrough/vtd/iommu.h | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/xen/drivers/passthrough/vtd/iommu.h b/xen/drivers/passthrough/vtd/iommu.h index 8b06ff7516..dd17a6b642 100644 --- a/xen/drivers/passthrough/vtd/iommu.h +++ b/xen/drivers/passthrough/vtd/iommu.h @@ -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 */ -- 2.30.2