I'll apply this when Jan Acks it.
-- Keir
On 07/01/2011 18:55, "Kay, Allen M" <allen.m.kay@xxxxxxxxx> wrote:
> Thanks for catching this. After I change the iommu_flush_iotlb_psi()
> parameter from page_shift to order, I forgot revisit the callers for non
> shared cases.
>
> I have fixed them in attached patch.
>
> Allen
>
> -----Original Message-----
> From: Jan Beulich [mailto:JBeulich@xxxxxxxxxx]
> Sent: Friday, January 07, 2011 12:25 AM
> To: Kay, Allen M
> Cc: Tim Deegan; xen-devel@xxxxxxxxxxxxxxxxxxx; Keir Fraser
> Subject: RE: [Xen-devel] [PATCH][VTD] bug fix for EPT/VT-d table sharing
>
>>>> On 07.01.11 at 03:49, "Kay, Allen M" <allen.m.kay@xxxxxxxxx> wrote:
>
> With this
>
>> @@ -548,17 +533,12 @@ static int inline iommu_flush_iotlb_psi(
>> if ( !cap_pgsel_inv(iommu->cap) )
>> return iommu_flush_iotlb_dsi(iommu, did, flush_non_present_entry,
>> flush_dev_iotlb);
>>
>> - /*
>> - * PSI requires page size is 2 ^ x, and the base address is naturally
>> - * aligned to the size
>> - */
>> - align = get_alignment(addr >> PAGE_SHIFT_4K, pages);
>> /* Fallback to domain selective flush if size is too big */
>> - if ( align > cap_max_amask_val(iommu->cap) )
>> + if ( order > cap_max_amask_val(iommu->cap) )
>> return iommu_flush_iotlb_dsi(iommu, did, flush_non_present_entry,
>> flush_dev_iotlb);
>>
>> - addr >>= PAGE_SHIFT_4K + align;
>> - addr <<= PAGE_SHIFT_4K + align;
>> + addr >>= PAGE_SHIFT_4K + order;
>> + addr <<= PAGE_SHIFT_4K + order;
>>
>> /* apply platform specific errata workarounds */
>> vtd_ops_preamble_quirk(iommu);
>
> I suppose that here
>
>> @@ -635,7 +615,8 @@ static void dma_pte_clear_one(struct dom
>> if ( iommu_domid == -1 )
>> continue;
>> if ( iommu_flush_iotlb_psi(iommu, iommu_domid,
>> - addr, 1, 0, flush_dev_iotlb) )
>> + addr, 1, PAGE_SHIFT_4K,
>> + 0, flush_dev_iotlb) )
>> iommu_flush_write_buffer(iommu);
>> }
>> }
>> @@ -1711,6 +1692,7 @@ static int intel_iommu_map_page(
>> continue;
>> if ( iommu_flush_iotlb_psi(iommu, iommu_domid,
>> (paddr_t)gfn << PAGE_SHIFT_4K, 1,
>> + PAGE_SHIFT_4K,
>> !dma_pte_present(old), flush_dev_iotlb) )
>> iommu_flush_write_buffer(iommu);
>> }
>
> you need to pass 0 instead of PAGE_SHIFT_4K.
>
> Jan
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxxxxxxxx
> http://lists.xensource.com/xen-devel
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|