From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Wang2 Subject: Re: [PATCH 2 of 5] amd iommu: Fix iommu page size encoding when page order > 0 Date: Thu, 3 Nov 2011 17:54:02 +0100 Message-ID: <201111031754.02201.wei.wang2@amd.com> References: <1bf06c8d2c70e9af610e.1320335329@gran.amd.com> <4EB2CD33020000780005ED24@nat28.tlf.novell.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="Boundary-00=_qcssO5S6WX3fLh3" Return-path: In-Reply-To: <4EB2CD33020000780005ED24@nat28.tlf.novell.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Jan Beulich Cc: "xen-devel@lists.xensource.com" List-Id: xen-devel@lists.xenproject.org --Boundary-00=_qcssO5S6WX3fLh3 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline On Thursday 03 November 2011 17:19:47 Jan Beulich wrote: > >>> On 03.11.11 at 16:48, Wei Wang wrote: > > > > # HG changeset patch > > # User Wei Wang > > # Date 1320334553 -3600 > > # Node ID 1bf06c8d2c70e9af610e12a7592c466a799b0de1 > > # Parent ef46c471a11f83d07e256ad2e0b868828f45ef63 > > amd iommu: Fix iommu page size encoding when page order > 0. > > Fix io address in invalid all pages command. > > > > Signed-off-by: Wei Wang > > > > diff -r ef46c471a11f -r 1bf06c8d2c70 > > xen/drivers/passthrough/amd/iommu_map.c --- > > a/xen/drivers/passthrough/amd/iommu_map.c Thu Nov 03 16:35:51 2011 +0100 > > +++ b/xen/drivers/passthrough/amd/iommu_map.c Thu Nov 03 16:35:53 2011 > > +0100 @@ -77,23 +77,24 @@ static void invalidate_iommu_pages(struc > > { > > 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 @@ static void _amd_iommu_flush_pages(struc > > > > 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 ef46c471a11f -r 1bf06c8d2c70 > > xen/include/asm-x86/hvm/svm/amd-iommu-defs.h --- > > a/xen/include/asm-x86/hvm/svm/amd-iommu-defs.h Thu Nov 03 16:35:51 2011 > > +0100 +++ b/xen/include/asm-x86/hvm/svm/amd-iommu-defs.h Thu Nov 03 > > 16:35:53 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 > > Please parenthesize this properly. Fixed, please see attachment. Thanks, Wei > > + > > #endif /* _ASM_X86_64_AMD_IOMMU_DEFS_H */ > > > > > > _______________________________________________ > > Xen-devel mailing list > > Xen-devel@lists.xensource.com > > http://lists.xensource.com/xen-devel --Boundary-00=_qcssO5S6WX3fLh3 Content-Type: text/x-diff; charset="iso-8859-1"; name="ats_02.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="ats_02.patch" Content-Description: ats_02.patch # HG changeset patch # Parent ef46c471a11f83d07e256ad2e0b868828f45ef63 # User Wei Wang amd iommu: Fix iommu page size encoding when page order > 0. Fix io address in invalid all pages command. Signed-off-by: Wei Wang diff -r ef46c471a11f xen/drivers/passthrough/amd/iommu_map.c --- a/xen/drivers/passthrough/amd/iommu_map.c Thu Nov 03 16:35:51 2011 +0100 +++ b/xen/drivers/passthrough/amd/iommu_map.c Thu Nov 03 17:51:16 2011 +0100 @@ -77,23 +77,24 @@ static void invalidate_iommu_pages(struc { 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 @@ static void _amd_iommu_flush_pages(struc 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 ef46c471a11f xen/include/asm-x86/hvm/svm/amd-iommu-defs.h --- a/xen/include/asm-x86/hvm/svm/amd-iommu-defs.h Thu Nov 03 16:35:51 2011 +0100 +++ b/xen/include/asm-x86/hvm/svm/amd-iommu-defs.h Thu Nov 03 17:51:16 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 */ --Boundary-00=_qcssO5S6WX3fLh3 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --Boundary-00=_qcssO5S6WX3fLh3--