On Thursday 03 November 2011 17:19:47 Jan Beulich wrote:
> >>> On 03.11.11 at 16:48, Wei Wang <wei.wang2@xxxxxxx> wrote:
> >
> > # HG changeset patch
> > # User Wei Wang <wei.wang2@xxxxxxx>
> > # 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 <wei.wang2@xxxxxxx>
> >
> > 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@xxxxxxxxxxxxxxxxxxx
> > http://lists.xensource.com/xen-devel
ats_02.patch
Description: ats_02.patch
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|