From 6d1f63aef0f0b9df3506f7066ae2e75e601aca18 Mon Sep 17 00:00:00 2001 From: Kaige Fu Date: Fri, 6 Dec 2019 09:43:37 +0000 Subject: [PATCH] HV: Use NMI to replace INIT signal for lapic-pt VMs S5 We have implemented a new notification method using NMI. So replace the INIT notification method with the NMI one. Then we can remove INIT notification related code later. Tracked-On: #3886 Signed-off-by: Kaige Fu --- hypervisor/arch/x86/guest/vmcs.c | 7 ++++--- hypervisor/common/schedule.c | 4 ++-- hypervisor/include/common/schedule.h | 1 + 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/hypervisor/arch/x86/guest/vmcs.c b/hypervisor/arch/x86/guest/vmcs.c index 7dd2d806f..a125e2dee 100644 --- a/hypervisor/arch/x86/guest/vmcs.c +++ b/hypervisor/arch/x86/guest/vmcs.c @@ -606,10 +606,11 @@ void switch_apicv_mode_x2apic(struct acrn_vcpu *vcpu) update_msr_bitmap_x2apic_passthru(vcpu); /* - * After passthroughing lapic to guest, we should use INIT signal to - * notify vcpu thread instead of IPI + * After passthroughing lapic to guest, we should use NMI signal to + * notify vcpu thread instead of IPI. Because the IPI will be delivered + * the guest directly without vmexit. */ - vcpu->thread_obj.notify_mode = SCHED_NOTIFY_INIT; + vcpu->thread_obj.notify_mode = SCHED_NOTIFY_NMI; } else { value32 = exec_vmread32(VMX_PROC_VM_EXEC_CONTROLS2); value32 &= ~VMX_PROCBASED_CTLS2_VAPIC; diff --git a/hypervisor/common/schedule.c b/hypervisor/common/schedule.c index da6c785be..73a6eda06 100644 --- a/hypervisor/common/schedule.c +++ b/hypervisor/common/schedule.c @@ -202,8 +202,8 @@ void sleep_thread(struct thread_object *obj) scheduler->sleep(obj); } if (is_running(obj)) { - if (obj->notify_mode == SCHED_NOTIFY_INIT) { - make_reschedule_request(pcpu_id, DEL_MODE_INIT); + if (obj->notify_mode == SCHED_NOTIFY_NMI) { + make_reschedule_request(pcpu_id, DEL_MODE_NMI); } else { make_reschedule_request(pcpu_id, DEL_MODE_IPI); } diff --git a/hypervisor/include/common/schedule.h b/hypervisor/include/common/schedule.h index 164e34410..809be6869 100644 --- a/hypervisor/include/common/schedule.h +++ b/hypervisor/include/common/schedule.h @@ -26,6 +26,7 @@ enum thread_object_state { enum sched_notify_mode { SCHED_NOTIFY_INIT, + SCHED_NOTIFY_NMI, SCHED_NOTIFY_IPI };