[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen stable-4.12] x86/pv: Drop FLUSH_TLB_GLOBAL in do_mmu_update() for XPTI
commit b1d6f37aa5aa9f3fc5a269b9dd21b7feb7444be0 Author: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> AuthorDate: Thu Oct 22 11:28:58 2020 +0100 Commit: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> CommitDate: Tue Oct 27 18:03:32 2020 +0000 x86/pv: Drop FLUSH_TLB_GLOBAL in do_mmu_update() for XPTI c/s 9d1d31ad9498 "x86: slightly reduce Meltdown band-aid overhead" removed the use of Global TLB flushes on the Xen entry path, but added a FLUSH_TLB_GLOBAL to the L4 path in do_mmu_update(). However, this was unnecessary. It is the guests responsibility to perform appropriate TLB flushing if the L4 modification altered an established mapping in a flush-relevant way. In this case, an MMUEXT_OP hypercall will follow. The case which Xen needs to cover is when new mappings are created, and the resync on the exit-to-guest path covers this correctly. There is a corner case with multiple vCPUs in hypercalls at the same time, which 9d1d31ad9498 changed, and this patch changes back to its original XPTI behaviour. Architecturally, established TLB entries can continue to be used until the broadcast flush has completed. Therefore, even with concurrent hypercalls, the guest cannot depend on older mappings not being used until an MMUEXT_OP hypercall completes. Xen's implementation of guest-initiated flushes will take correct effect on top of an in-progress hypercall, picking up new mapping setting before the other vCPU's MMUEXT_OP completes. Note: The correctness of this change is not impacted by whether XPTI uses global mappings or not. Correctness there depends on the behaviour of Xen on the entry/exit paths when switching two/from the XPTI "shadow" pagetables. This is (not really) XSA-286 (but necessary to simplify the logic). Fixes: 9d1d31ad9498 ("x86: slightly reduce Meltdown band-aid overhead") Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx> (cherry picked from commit 055e1c3a3d95b1e753148369fbc4ba48782dd602) --- xen/arch/x86/mm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c index e7b8f4ee4b..86f31b334f 100644 --- a/xen/arch/x86/mm.c +++ b/xen/arch/x86/mm.c @@ -4301,7 +4301,7 @@ long do_mmu_update( cpumask_andnot(mask, pt_owner->dirty_cpumask, cpumask_of(cpu)); if ( !cpumask_empty(mask) ) - flush_mask(mask, FLUSH_TLB_GLOBAL | FLUSH_ROOT_PGTBL); + flush_mask(mask, FLUSH_ROOT_PGTBL); } perfc_add(num_page_updates, i); -- generated by git-patchbot for /home/xen/git/xen.git#stable-4.12
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |