[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen staging-4.10] x86: move invocations of hvm_flush_guest_tlbs()
commit 2a0913ede5753c1358de43a4f4a420cc7f846f5a Author: Jan Beulich <jbeulich@xxxxxxxx> AuthorDate: Tue Jan 23 10:43:39 2018 +0100 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Tue May 29 09:32:01 2018 +0200 x86: move invocations of hvm_flush_guest_tlbs() Their need is not tied to the actual flushing of TLBs, but the ticking of the TLB clock. Make this more obvious by folding the two invocations into a single one in pre_flush(). Also defer the latching of CR4 in write_cr3() until after pre_flush() (and hence implicitly until after IRQs are off), making operation sequence the same in both cases (eliminating the theoretical risk of pre_flush() altering CR4). This then also improves register allocation, as the compiler doesn't need to use a callee-saved register for "cr4" anymore. Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> --- xen/arch/x86/flushtlb.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/xen/arch/x86/flushtlb.c b/xen/arch/x86/flushtlb.c index f6d7ad1650..8a7a76b8ff 100644 --- a/xen/arch/x86/flushtlb.c +++ b/xen/arch/x86/flushtlb.c @@ -49,6 +49,8 @@ static u32 pre_flush(void) raise_softirq(NEW_TLBFLUSH_CLOCK_PERIOD_SOFTIRQ); skip_clocktick: + hvm_flush_guest_tlbs(); + return t2; } @@ -71,15 +73,14 @@ static void post_flush(u32 t) void write_cr3(unsigned long cr3) { - unsigned long flags, cr4 = read_cr4(); + unsigned long flags, cr4; u32 t; /* This non-reentrant function is sometimes called in interrupt context. */ local_irq_save(flags); t = pre_flush(); - - hvm_flush_guest_tlbs(); + cr4 = read_cr4(); write_cr4(cr4 & ~X86_CR4_PGE); asm volatile ( "mov %0, %%cr3" : : "r" (cr3) : "memory" ); @@ -121,8 +122,6 @@ unsigned int flush_area_local(const void *va, unsigned int flags) u32 t = pre_flush(); unsigned long cr4 = read_cr4(); - hvm_flush_guest_tlbs(); - write_cr4(cr4 & ~X86_CR4_PGE); barrier(); write_cr4(cr4); -- generated by git-patchbot for /home/xen/git/xen.git#staging-4.10 _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |