[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] RE: [PATCH v4 20/21] VT-d: fold iommu_flush_iotlb{,_pages}()
> From: Jan Beulich <jbeulich@xxxxxxxx> > Sent: Monday, April 25, 2022 4:45 PM > > With iommu_flush_iotlb_all() gone, iommu_flush_iotlb_pages() is merely a > wrapper around the not otherwise called iommu_flush_iotlb(). Fold both > functions. > > No functional change intended. > > Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> Reviewed-by: Kevin Tian <kevin.tian@xxxxxxxxx> > --- > v4: New. > > --- a/xen/drivers/passthrough/vtd/iommu.c > +++ b/xen/drivers/passthrough/vtd/iommu.c > @@ -728,9 +728,9 @@ static int __must_check iommu_flush_all( > return rc; > } > > -static int __must_check iommu_flush_iotlb(struct domain *d, dfn_t dfn, > - bool_t dma_old_pte_present, > - unsigned long page_count) > +static int __must_check cf_check iommu_flush_iotlb(struct domain *d, > dfn_t dfn, > + unsigned long page_count, > + unsigned int flush_flags) > { > struct domain_iommu *hd = dom_iommu(d); > struct acpi_drhd_unit *drhd; > @@ -739,6 +739,17 @@ static int __must_check iommu_flush_iotl > int iommu_domid; > int ret = 0; > > + if ( flush_flags & IOMMU_FLUSHF_all ) > + { > + dfn = INVALID_DFN; > + page_count = 0; > + } > + else > + { > + ASSERT(page_count && !dfn_eq(dfn, INVALID_DFN)); > + ASSERT(flush_flags); > + } > + > /* > * No need pcideves_lock here because we have flush > * when assign/deassign device > @@ -765,7 +776,7 @@ static int __must_check iommu_flush_iotl > rc = iommu_flush_iotlb_psi(iommu, iommu_domid, > dfn_to_daddr(dfn), > get_order_from_pages(page_count), > - !dma_old_pte_present, > + !(flush_flags & > IOMMU_FLUSHF_modified), > flush_dev_iotlb); > > if ( rc > 0 ) > @@ -777,25 +788,6 @@ static int __must_check iommu_flush_iotl > return ret; > } > > -static int __must_check cf_check iommu_flush_iotlb_pages( > - struct domain *d, dfn_t dfn, unsigned long page_count, > - unsigned int flush_flags) > -{ > - if ( flush_flags & IOMMU_FLUSHF_all ) > - { > - dfn = INVALID_DFN; > - page_count = 0; > - } > - else > - { > - ASSERT(page_count && !dfn_eq(dfn, INVALID_DFN)); > - ASSERT(flush_flags); > - } > - > - return iommu_flush_iotlb(d, dfn, flush_flags & IOMMU_FLUSHF_modified, > - page_count); > -} > - > static void queue_free_pt(struct domain_iommu *hd, mfn_t mfn, unsigned > int level) > { > if ( level > 1 ) > @@ -3254,7 +3246,7 @@ static const struct iommu_ops __initcons > .suspend = vtd_suspend, > .resume = vtd_resume, > .crash_shutdown = vtd_crash_shutdown, > - .iotlb_flush = iommu_flush_iotlb_pages, > + .iotlb_flush = iommu_flush_iotlb, > .get_reserved_device_memory = > intel_iommu_get_reserved_device_memory, > .dump_page_tables = vtd_dump_page_tables, > };
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |