[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] amd iommu: Fix iommu page size encoding when page order > 0.
# HG changeset patch # User Wei Wang <wei.wang2@xxxxxxx> # Date 1320747919 -3600 # Node ID 4de6a56b7b5d0da75e380ecf55d8fbb2541f946b # Parent d9d336238e772a1c32935dd02e3017d403606095 amd iommu: Fix iommu page size encoding when page order > 0. Fix io address in invalid all pages command. Signed-off-by: Wei Wang <wei.wang2@xxxxxxx> Committed-by: Jan Beulich <jbeulich@xxxxxxxx> --- diff -r d9d336238e77 -r 4de6a56b7b5d xen/drivers/passthrough/amd/iommu_map.c --- a/xen/drivers/passthrough/amd/iommu_map.c Tue Nov 08 11:24:11 2011 +0100 +++ b/xen/drivers/passthrough/amd/iommu_map.c Tue Nov 08 11:25:19 2011 +0100 @@ -77,23 +77,24 @@ { u64 addr_lo, addr_hi; u32 cmd[4], entry; - u64 mask = 0; int sflag = 0, pde = 0; + ASSERT ( order == 0 || order == 9 || order == 18 ); + + /* All pages associated with the domainID are invalidated */ + if ( order || (io_addr == INV_IOMMU_ALL_PAGES_ADDRESS ) ) + { + sflag = 1; + pde = 1; + } + /* If sflag == 1, the size of the invalidate command is determined by the first zero bit in the address starting from Address[12] */ - if ( order == 9 || order == 18 ) + if ( order ) { - mask = ((1ULL << (order - 1)) - 1) << PAGE_SHIFT; - io_addr |= mask; - sflag = 1; - } - - /* All pages associated with the domainID are invalidated */ - else if ( io_addr == 0x7FFFFFFFFFFFF000ULL ) - { - sflag = 1; - pde = 1; + u64 mask = 1ULL << (order - 1 + PAGE_SHIFT); + io_addr &= ~mask; + io_addr |= mask - 1; } addr_lo = io_addr & DMA_32BIT_MASK; @@ -917,7 +918,7 @@ void amd_iommu_flush_all_pages(struct domain *d) { - _amd_iommu_flush_pages(d, 0x7FFFFFFFFFFFFULL, 0); + _amd_iommu_flush_pages(d, INV_IOMMU_ALL_PAGES_ADDRESS, 0); } void amd_iommu_flush_pages(struct domain *d, diff -r d9d336238e77 -r 4de6a56b7b5d xen/include/asm-x86/hvm/svm/amd-iommu-defs.h --- a/xen/include/asm-x86/hvm/svm/amd-iommu-defs.h Tue Nov 08 11:24:11 2011 +0100 +++ b/xen/include/asm-x86/hvm/svm/amd-iommu-defs.h Tue Nov 08 11:25:19 2011 +0100 @@ -407,4 +407,6 @@ #define INT_REMAP_ENTRY_VECTOR_MASK 0x00FF0000 #define INT_REMAP_ENTRY_VECTOR_SHIFT 16 +#define INV_IOMMU_ALL_PAGES_ADDRESS ((1ULL << 63) - 1) + #endif /* _ASM_X86_64_AMD_IOMMU_DEFS_H */ _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |