[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] iommu: Introduce iommu_flush and iommu_flush_all.
# HG changeset patch # User Jean Guyader <jean.guyader@xxxxxxxxxxxxx> # Date 1321623656 0 # Node ID 9a1a71f7bef2ca58d045d8067b965fcdc7c76cb2 # Parent aeb628c5af3fa0e21b04ca27508f742ffa2050e4 iommu: Introduce iommu_flush and iommu_flush_all. Signed-off-by: Jean Guyader <jean.guyader@xxxxxxxxxxxxx> Committed-by: Keir Fraser <keir@xxxxxxx> --- diff -r aeb628c5af3f -r 9a1a71f7bef2 xen/drivers/passthrough/iommu.c --- a/xen/drivers/passthrough/iommu.c Fri Nov 18 13:40:19 2011 +0000 +++ b/xen/drivers/passthrough/iommu.c Fri Nov 18 13:40:56 2011 +0000 @@ -301,6 +301,26 @@ return hd->platform_ops->unmap_page(d, gfn); } +void iommu_iotlb_flush(struct domain *d, unsigned long gfn, unsigned int page_count) +{ + struct hvm_iommu *hd = domain_hvm_iommu(d); + + if ( !iommu_enabled || !hd->platform_ops || !hd->platform_ops->iotlb_flush ) + return; + + hd->platform_ops->iotlb_flush(d, gfn, page_count); +} + +void iommu_iotlb_flush_all(struct domain *d) +{ + struct hvm_iommu *hd = domain_hvm_iommu(d); + + if ( !iommu_enabled || !hd->platform_ops || !hd->platform_ops->iotlb_flush_all ) + return; + + hd->platform_ops->iotlb_flush_all(d); +} + /* caller should hold the pcidevs_lock */ int deassign_device(struct domain *d, u16 seg, u8 bus, u8 devfn) { diff -r aeb628c5af3f -r 9a1a71f7bef2 xen/drivers/passthrough/vtd/iommu.c --- a/xen/drivers/passthrough/vtd/iommu.c Fri Nov 18 13:40:19 2011 +0000 +++ b/xen/drivers/passthrough/vtd/iommu.c Fri Nov 18 13:40:56 2011 +0000 @@ -622,6 +622,16 @@ } } +static void intel_iommu_iotlb_flush(struct domain *d, unsigned long gfn, unsigned int page_count) +{ + __intel_iommu_iotlb_flush(d, gfn, 1, page_count); +} + +static void intel_iommu_iotlb_flush_all(struct domain *d) +{ + __intel_iommu_iotlb_flush(d, 0, 0, 0); +} + /* clear one page's page table */ static void dma_pte_clear_one(struct domain *domain, u64 addr) { @@ -2343,6 +2353,8 @@ .resume = vtd_resume, .share_p2m = iommu_set_pgd, .crash_shutdown = vtd_crash_shutdown, + .iotlb_flush = intel_iommu_iotlb_flush, + .iotlb_flush_all = intel_iommu_iotlb_flush_all, }; /* diff -r aeb628c5af3f -r 9a1a71f7bef2 xen/include/xen/iommu.h --- a/xen/include/xen/iommu.h Fri Nov 18 13:40:19 2011 +0000 +++ b/xen/include/xen/iommu.h Fri Nov 18 13:40:56 2011 +0000 @@ -143,6 +143,8 @@ void (*resume)(void); void (*share_p2m)(struct domain *d); void (*crash_shutdown)(void); + void (*iotlb_flush)(struct domain *d, unsigned long gfn, unsigned int page_count); + void (*iotlb_flush_all)(struct domain *d); }; void iommu_update_ire_from_apic(unsigned int apic, unsigned int reg, unsigned int value); @@ -159,4 +161,7 @@ int iommu_do_domctl(struct xen_domctl *, XEN_GUEST_HANDLE(xen_domctl_t)); +void iommu_iotlb_flush(struct domain *d, unsigned long gfn, unsigned int page_count); +void iommu_iotlb_flush_all(struct domain *d); + #endif /* _IOMMU_H_ */ _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |