Skip to content

Commit

Permalink
vtd: improve IOMMU TLB flush
Browse files Browse the repository at this point in the history
Do not limit PSI flushes to order 0 pages, in order to avoid doing a
full TLB flush if the passed in page has an order greater than 0 and
is aligned. Should increase the performance of IOMMU TLB flushes when
dealing with page orders greater than 0.

This is part of XSA-321.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Roger Pau Monné <roger.pau@citrix.com>
  • Loading branch information
jbeulich committed Jul 7, 2020
1 parent bc3d9f9 commit 5fe515a
Showing 1 changed file with 3 additions and 2 deletions.
5 changes: 3 additions & 2 deletions xen/drivers/passthrough/vtd/iommu.c
Original file line number Diff line number Diff line change
Expand Up @@ -576,13 +576,14 @@ static int __must_check iommu_flush_iotlb(struct domain *d, dfn_t dfn,
if ( iommu_domid == -1 )
continue;

if ( page_count != 1 || dfn_eq(dfn, INVALID_DFN) )
if ( !page_count || (page_count & (page_count - 1)) ||
dfn_eq(dfn, INVALID_DFN) || !IS_ALIGNED(dfn_x(dfn), page_count) )
rc = iommu_flush_iotlb_dsi(iommu, iommu_domid,
0, flush_dev_iotlb);
else
rc = iommu_flush_iotlb_psi(iommu, iommu_domid,
dfn_to_daddr(dfn),
PAGE_ORDER_4K,
get_order_from_pages(page_count),
!dma_old_pte_present,
flush_dev_iotlb);

Expand Down

0 comments on commit 5fe515a

Please sign in to comment.