[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH for-4.14 v3] x86/tlb: fix assisted flush usage
On 26.06.2020 16:16, Roger Pau Monné wrote: > On Fri, Jun 26, 2020 at 02:58:21PM +0100, Julien Grall wrote: >> On 26/06/2020 14:21, Paul Durrant wrote: >>>> -----Original Message----- >>>> From: Jan Beulich <jbeulich@xxxxxxxx> >>>> Sent: 26 June 2020 14:11 >>>> To: Roger Pau Monné <roger.pau@xxxxxxxxxx>; paul@xxxxxxx; Andrew Cooper >>>> <andrew.cooper3@xxxxxxxxxx> >>>> Cc: Julien Grall <julien@xxxxxxx>; xen-devel@xxxxxxxxxxxxxxxxxxxx; Wei Liu >>>> <wl@xxxxxxx>; George Dunlap >>>> <george.dunlap@xxxxxxxxxx>; Ian Jackson <ian.jackson@xxxxxxxxxxxxx>; >>>> Stefano Stabellini >>>> <sstabellini@xxxxxxxxxx>; Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx> >>>> Subject: Re: [PATCH for-4.14 v3] x86/tlb: fix assisted flush usage >>>> >>>> On 26.06.2020 12:07, Roger Pau Monné wrote: >>>>> On Fri, Jun 26, 2020 at 10:38:11AM +0100, Julien Grall wrote: >>>>>> Hi Roger, >>>>>> >>>>>> Sorry I didn't manage to answer to your question before you sent v3. >>>>>> >>>>>> On 25/06/2020 12:30, Roger Pau Monne wrote: >>>>>>> diff --git a/xen/include/asm-arm/flushtlb.h >>>>>>> b/xen/include/asm-arm/flushtlb.h >>>>>>> index ab1aae5c90..7ae0543885 100644 >>>>>>> --- a/xen/include/asm-arm/flushtlb.h >>>>>>> +++ b/xen/include/asm-arm/flushtlb.h >>>>>>> @@ -27,6 +27,7 @@ static inline void page_set_tlbflush_timestamp(struct >>>>>>> page_info *page) >>>>>>> /* Flush specified CPUs' TLBs */ >>>>>>> void flush_tlb_mask(const cpumask_t *mask); >>>>>>> +#define flush_tlb_mask_sync flush_tlb_mask >>>>>> >>>>>> Dropping the parameter 'sync' from filtered_flush_tlb_mask() is a nice >>>>>> improvement, but it unfortunately doesn't fully address my concern. >>>>>> >>>>>> After this patch there is exactly one use of flush_tlb_mask() in common >>>>>> code >>>>>> (see grant_table.c). But without looking at the x86 code, it is not clear >>>>>> why this requires a different flush compare to the two other sites. >>>>> >>>>> It's not dealing with page allocation or page type changes directly, >>>>> and hence doesn't need to use an IPI in order to prevent races with >>>>> spurious_page_fault. >>>>> >>>>>> IOW, if I want to modify the common code in the future, how do I know >>>>>> which >>>>>> flush to call? >>>>> >>>>> Unless you modify one of the specific areas mentioned above (page >>>>> allocation or page type changes) you should use flush_tlb_mask. >>>>> >>>>> This is not ideal, and my aim will be to be able to use the assisted >>>>> flush everywhere if possible, so I would really like to get rid of the >>>>> interrupt disabling done in spurious_page_fault and this model where >>>>> x86 relies on blocking interrupts in order to prevent page type >>>>> changes or page freeing. >>>>> >>>>> Such change however doesn't feel appropriate for a release freeze >>>>> period, and hence went with something smaller that restores the >>>>> previous behavior. Another option is to just disable assisted flushes >>>>> for the time being and re-enable them when a suitable solution is >>>>> found. >>>> >>>> As I can understand Julien's concern, maybe this would indeed be >>>> the better approach for now? Andrew, Paul - thoughts? >>>> >>> >>> Julien's concern seems to be about long term usage whereas IIUC this patch >>> does fix the issue at hand, so can we put this patch in now on the basis >>> that Roger will do the re-work described after 4.14 (which I think will >>> address Julien's concern)? >> Bear in mind that while this may be properly fixed in the next release, the >> hack will stay forever in Xen 4.14. >> >> While I understand that disabling assisted flush is going to have a >> performance impact, we also need to make sure the interface make senses. >> >> From a generic perspective, a TLB flush should have the exact same guarantee >> regardless where we call it in common/. So I would still strongly prefer if >> we have a single helper. >> >> Is it possible to consider to replace all the flush_tlb_mask() in common >> code by arch_flush_tlb_mask()? On Arm, this would just be a rename. On x86, >> this would be an alias to flush_tlb_mask_sync()? > > The TLB flush call in grant_table.c could still use a flush_tlb_mask, > but it will also work fine with a flush_tlb_mask_sync. > > I can prepare a patch if that's acceptable, I guess it would be > slightly better than fully disabling assisted flush. Fine with me, fwiw. Jan
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |