Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

x86/irq: Let interrupt handlers set kvm_cpu_l1tf_flush_l1d

The last missing piece to having vmx_l1d_flush() take interrupts after
VMEXIT into account is to set the kvm_cpu_l1tf_flush_l1d per-cpu flag on
irq entry.

Issue calls to kvm_set_cpu_l1tf_flush_l1d() from entering_irq(),
ipi_entering_ack_irq(), smp_reschedule_interrupt() and
uv_bau_message_interrupt().

Suggested-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Nicolai Stange <nstange@suse.de>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>

authored by

Nicolai Stange and committed by
Thomas Gleixner
ffcba43f 447ae316

+5
+3
arch/x86/include/asm/apic.h
··· 10 10 #include <asm/fixmap.h> 11 11 #include <asm/mpspec.h> 12 12 #include <asm/msr.h> 13 + #include <asm/hardirq.h> 13 14 14 15 #define ARCH_APICTIMER_STOPS_ON_C3 1 15 16 ··· 515 514 static inline void entering_irq(void) 516 515 { 517 516 irq_enter(); 517 + kvm_set_cpu_l1tf_flush_l1d(); 518 518 } 519 519 520 520 static inline void entering_ack_irq(void) ··· 528 526 { 529 527 irq_enter(); 530 528 ack_APIC_irq(); 529 + kvm_set_cpu_l1tf_flush_l1d(); 531 530 } 532 531 533 532 static inline void exiting_irq(void)
+1
arch/x86/kernel/smp.c
··· 261 261 { 262 262 ack_APIC_irq(); 263 263 inc_irq_stat(irq_resched_count); 264 + kvm_set_cpu_l1tf_flush_l1d(); 264 265 265 266 if (trace_resched_ipi_enabled()) { 266 267 /*
+1
arch/x86/platform/uv/tlb_uv.c
··· 1285 1285 struct msg_desc msgdesc; 1286 1286 1287 1287 ack_APIC_irq(); 1288 + kvm_set_cpu_l1tf_flush_l1d(); 1288 1289 time_start = get_cycles(); 1289 1290 1290 1291 bcp = &per_cpu(bau_control, smp_processor_id());