[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [Patch RFC 04/13] vt-d: Clear invalidation table in invaidation interrupt handler
if it has no in-flight Device-TLB invalidation request. Signed-off-by: Quan Xu <quan.xu@xxxxxxxxx> --- xen/drivers/passthrough/vtd/iommu.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/xen/drivers/passthrough/vtd/iommu.c b/xen/drivers/passthrough/vtd/iommu.c index db6e3a2..0e912fb 100644 --- a/xen/drivers/passthrough/vtd/iommu.c +++ b/xen/drivers/passthrough/vtd/iommu.c @@ -1098,6 +1098,28 @@ static void _qi_msi_mask(struct iommu *iommu) static void _do_iommu_qi(struct iommu *iommu) { + unsigned long nr_dom, i; + struct domain *d = NULL; + + nr_dom = cap_ndoms(iommu->cap); + i = find_first_bit(iommu->domid_bitmap, nr_dom); + while ( i < nr_dom ) + { + if ( iommu->domid_map[i] > 0 ) + { + d = rcu_lock_domain_by_id(iommu->domid_map[i]); + if ( d == NULL ) + continue; + + if ( qi_table_pollslot(d) == qi_table_data(d) ) + { + qi_table_data(d) = 0; + qi_table_pollslot(d) = 0; + } + rcu_unlock_domain(d); + } + i = find_next_bit(iommu->domid_bitmap, nr_dom, i+1); + } } static void do_iommu_qi_completion(unsigned long data) -- 1.8.3.2 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |