This commit doesn't change semantics. It is done as a preparation for future commits. Signed-off-by: Liran Alon <liran.alon@xxxxxxxxxx> Reviewed-by: Nikita Leshenko <nikita.leshchenko@xxxxxxxxxx> Reviewed-by: Liam Merwick <liam.merwick@xxxxxxxxxx> Signed-off-by: Liam Merwick <liam.merwick@xxxxxxxxxx> --- arch/x86/include/asm/irq.h | 4 +++- arch/x86/kernel/irq.c | 26 ++++++++++++++++++-------- arch/x86/kvm/vmx.c | 13 +++++++++++-- 3 files changed, 32 insertions(+), 11 deletions(-) diff --git a/arch/x86/include/asm/irq.h b/arch/x86/include/asm/irq.h index 2395bb794c7b..1a3f5cb27453 100644 --- a/arch/x86/include/asm/irq.h +++ b/arch/x86/include/asm/irq.h @@ -29,7 +29,9 @@ static inline int irq_canonicalize(int irq) extern void fixup_irqs(void); #ifdef CONFIG_HAVE_KVM -extern void kvm_set_posted_intr_wakeup_handler(void (*handler)(void)); +extern void kvm_set_posted_intr_handlers( + void (*handler)(void), + void (*nested_handler)(void)); #endif extern void (*x86_platform_ipi_callback)(void); diff --git a/arch/x86/kernel/irq.c b/arch/x86/kernel/irq.c index 49cfd9fe7589..1cfe7856eea3 100644 --- a/arch/x86/kernel/irq.c +++ b/arch/x86/kernel/irq.c @@ -279,16 +279,25 @@ __visible void __irq_entry smp_x86_platform_ipi(struct pt_regs *regs) #ifdef CONFIG_HAVE_KVM static void dummy_handler(void) {} -static void (*kvm_posted_intr_wakeup_handler)(void) = dummy_handler; +static void (*kvm_posted_intr_handler)(void) = dummy_handler; +static void (*kvm_nested_posted_intr_handler)(void) = dummy_handler; -void kvm_set_posted_intr_wakeup_handler(void (*handler)(void)) +void kvm_set_posted_intr_handlers( + void (*handler)(void), + void (*nested_handler)(void)) { if (handler) - kvm_posted_intr_wakeup_handler = handler; + kvm_posted_intr_handler = handler; else - kvm_posted_intr_wakeup_handler = dummy_handler; + kvm_posted_intr_handler = dummy_handler; + + if (nested_handler) + kvm_nested_posted_intr_handler = nested_handler; + else + kvm_nested_posted_intr_handler = dummy_handler; + } -EXPORT_SYMBOL_GPL(kvm_set_posted_intr_wakeup_handler); +EXPORT_SYMBOL_GPL(kvm_set_posted_intr_handlers); /* * Handler for POSTED_INTERRUPT_VECTOR. @@ -304,7 +313,7 @@ __visible void smp_kvm_posted_intr_ipi(struct pt_regs *regs) } /* - * Handler for POSTED_INTERRUPT_WAKEUP_VECTOR. + * Handler for POSTED_INTR_VECTOR. */ __visible void smp_kvm_posted_intr_wakeup_ipi(struct pt_regs *regs) { @@ -312,13 +321,13 @@ __visible void smp_kvm_posted_intr_wakeup_ipi(struct pt_regs *regs) entering_ack_irq(); inc_irq_stat(kvm_posted_intr_wakeup_ipis); - kvm_posted_intr_wakeup_handler(); + kvm_posted_intr_handler(); exiting_irq(); set_irq_regs(old_regs); } /* - * Handler for POSTED_INTERRUPT_NESTED_VECTOR. + * Handler for POSTED_INTR_NESTED_VECTOR. */ __visible void smp_kvm_posted_intr_nested_ipi(struct pt_regs *regs) { @@ -326,6 +335,7 @@ __visible void smp_kvm_posted_intr_nested_ipi(struct pt_regs *regs) entering_ack_irq(); inc_irq_stat(kvm_posted_intr_nested_ipis); + kvm_nested_posted_intr_handler(); exiting_irq(); set_irq_regs(old_regs); } diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c index 34ffe929fb41..cb8c52fb0591 100644 --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c @@ -6706,7 +6706,8 @@ static void update_ple_window_actual_max(void) } /* - * Handler for POSTED_INTERRUPT_WAKEUP_VECTOR. + * Wake-up sleeping vCPUs on current physical CPU as a result + * of handling POSTED_INTR_VECTOR at host-side. */ static void wakeup_handler(void) { @@ -6724,6 +6725,13 @@ static void wakeup_handler(void) spin_unlock(&per_cpu(blocked_vcpu_on_cpu_lock, cpu)); } +/* + * Handler for POSTED_INTR_NESTED_VECTOR. + */ +static void nested_posted_intr_handler(void) +{ +} + void vmx_enable_tdp(void) { kvm_mmu_set_mask_ptes(VMX_EPT_READABLE_MASK, @@ -6898,7 +6906,8 @@ static __init int hardware_setup(void) kvm_x86_ops->cancel_hv_timer = NULL; } - kvm_set_posted_intr_wakeup_handler(wakeup_handler); + kvm_set_posted_intr_handlers( + wakeup_handler, nested_posted_intr_handler); kvm_mce_cap_supported |= MCG_LMCE_P; -- 1.9.1