[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen stable-4.5] VT-d: print_vtd_entries() should cope with superpages
commit b7386502a228cc4f18fd119182baa211f9c71892 Author: Jan Beulich <jbeulich@xxxxxxxx> AuthorDate: Thu Mar 26 08:21:03 2015 +0100 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Thu Mar 26 08:21:03 2015 +0100 VT-d: print_vtd_entries() should cope with superpages Even if VT-d code alone (i.e. when not sharing tables with EPT) still doesn't support superpages, this function - invoked upon DMA remapping faults - needs to cope with such. While at it also replace a few more plain numbers with suitable named constants. Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> Acked-by: Roger Pau Monné <roger.pau@xxxxxxxxxx> Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> Acked-by: Kevin Tian <kevin.tian@xxxxxxxxx> master commit: 92cf6c2456dc428694ed95b6b1dec5bb84319790 master date: 2015-03-09 14:00:19 +0100 --- xen/drivers/passthrough/vtd/iommu.h | 12 ++++++++---- xen/drivers/passthrough/vtd/utils.c | 2 ++ 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/xen/drivers/passthrough/vtd/iommu.h b/xen/drivers/passthrough/vtd/iommu.h index c3e5181..d6e6520 100644 --- a/xen/drivers/passthrough/vtd/iommu.h +++ b/xen/drivers/passthrough/vtd/iommu.h @@ -268,18 +268,22 @@ struct dma_pte { }; #define DMA_PTE_READ (1) #define DMA_PTE_WRITE (2) +#define DMA_PTE_PROT (DMA_PTE_READ | DMA_PTE_WRITE) +#define DMA_PTE_SP (1 << 7) #define DMA_PTE_SNP (1 << 11) #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_superpage(p) do {(p).val |= DMA_PTE_SP;} while(0) #define dma_set_pte_snp(p) do {(p).val |= DMA_PTE_SNP;} while(0) -#define dma_set_pte_prot(p, prot) \ - do {(p).val = ((p).val & ~3) | ((prot) & 3); } while (0) +#define dma_set_pte_prot(p, prot) do { \ + (p).val = ((p).val & ~DMA_PTE_PROT) | ((prot) & DMA_PTE_PROT); \ + } while (0) #define dma_pte_addr(p) ((p).val & PADDR_MASK & 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) +#define dma_pte_present(p) (((p).val & DMA_PTE_PROT) != 0) +#define dma_pte_superpage(p) (((p).val & DMA_PTE_SP) != 0) /* interrupt remap entry */ struct iremap_entry { diff --git a/xen/drivers/passthrough/vtd/utils.c b/xen/drivers/passthrough/vtd/utils.c index db4c326..bd14c02 100644 --- a/xen/drivers/passthrough/vtd/utils.c +++ b/xen/drivers/passthrough/vtd/utils.c @@ -179,6 +179,8 @@ void print_vtd_entries(struct iommu *iommu, int bus, int devfn, u64 gmfn) printk(" l%d[%x] not present\n", level, l_index); break; } + if ( dma_pte_superpage(pte) ) + break; val = dma_pte_addr(pte); } while ( --level ); } -- generated by git-patchbot for /home/xen/git/xen.git#stable-4.5 _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |