On Mon, Mar 27, 2023 at 06:16:05AM -0700, Michael Kelley wrote: > The Hyper-V enlightened TLB remote flush function does not exclude > lazy TLB mode CPUs like the equivalent native function. Limited > telemetry shows that up to 80% of the CPUs being flushed are in > lazy mode, so flushing them is unnecessary and wasteful. > > The best place to exclude the lazy TLB mode CPUs is when copying > the Linux cpumask to the Hyper-V VPset data structure, since the > copying already processes CPUs one-by-one. Currently this copying > function has the capabilty to exclude the calling CPU. Generalize > this exclusion functionality to exclude CPUs based on a callback > function that is invoked for each CPU. Then for TLB flushing, > use this callback function to check the lazy TLB mode status of > each targeted CPU. > > Patch 1 of this series does the generalization, and fixes up the > one caller of the existing "exclude self" capability. > > Patch 2 then implements the exclusion based on lazy TLB mode, > using the generalization from Patch 1. > > Michael Kelley (2): > x86/hyperv: Add callback filter to cpumask_to_vpset() > x86/hyperv: Exclude lazy TLB mode CPUs from enlightened TLB flushes > > arch/x86/hyperv/hv_apic.c | 12 ++++++++---- > arch/x86/hyperv/mmu.c | 11 ++++++++++- > include/asm-generic/mshyperv.h | 22 ++++++++++++++-------- > 3 files changed, 32 insertions(+), 13 deletions(-) Applied to hyperv-next. Thanks. > > -- > 1.8.3.1 >