[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v4 09/14] common/grant_table: batch flush I/O TLB
On 04.08.2020 15:42, Paul Durrant wrote: > From: Paul Durrant <pdurrant@xxxxxxxxxx> > > This patch avoids calling iommu_iotlb_flush() for each individual GNTTABOP and > insteads calls iommu_iotlb_flush_all() at the end of the hypercall. This > should mean batched map/unmap operations perform better but may be slightly > detrimental to singleton performance. I would strongly suggest keeping singleton operations do single-DFN flushes. > @@ -1329,20 +1326,30 @@ gnttab_map_grant_ref( > return i; This one line is part of a path which you can't bypass as far as flushing is concerned. In this regard the description is also slightly misleading: It's not just "at the end of the hypercall" when flushing needs doing, but also on every preemption. > if ( unlikely(__copy_from_guest_offset(&op, uop, i, 1)) ) > - return -EFAULT; > + { > + rc = -EFAULT; > + break; > + } > > - map_grant_ref(&op); > + map_grant_ref(&op, &flush_flags); > > if ( unlikely(__copy_to_guest_offset(uop, i, &op, 1)) ) > - return -EFAULT; > + { > + rc = -EFAULT; > + break; > + } > } > > - return 0; > + err = iommu_iotlb_flush_all(current->domain, flush_flags); > + if ( !rc ) > + rc = err; Not sure how important it is to retain performance upon errors: Strictly speaking there's no need to flush when i == 0 and rc != 0. Jan
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |