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 <kaige.fu@intel.com>
This commit is contained in:
Kaige Fu 2019-12-06 09:43:37 +00:00 committed by wenlingz
parent 29b7aff59f
commit d7eb14c511
3 changed files with 7 additions and 5 deletions

View File

@ -606,10 +606,11 @@ void switch_apicv_mode_x2apic(struct acrn_vcpu *vcpu)
update_msr_bitmap_x2apic_passthru(vcpu); update_msr_bitmap_x2apic_passthru(vcpu);
/* /*
* After passthroughing lapic to guest, we should use INIT signal to * After passthroughing lapic to guest, we should use NMI signal to
* notify vcpu thread instead of IPI * 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 { } else {
value32 = exec_vmread32(VMX_PROC_VM_EXEC_CONTROLS2); value32 = exec_vmread32(VMX_PROC_VM_EXEC_CONTROLS2);
value32 &= ~VMX_PROCBASED_CTLS2_VAPIC; value32 &= ~VMX_PROCBASED_CTLS2_VAPIC;

View File

@ -202,8 +202,8 @@ void sleep_thread(struct thread_object *obj)
scheduler->sleep(obj); scheduler->sleep(obj);
} }
if (is_running(obj)) { if (is_running(obj)) {
if (obj->notify_mode == SCHED_NOTIFY_INIT) { if (obj->notify_mode == SCHED_NOTIFY_NMI) {
make_reschedule_request(pcpu_id, DEL_MODE_INIT); make_reschedule_request(pcpu_id, DEL_MODE_NMI);
} else { } else {
make_reschedule_request(pcpu_id, DEL_MODE_IPI); make_reschedule_request(pcpu_id, DEL_MODE_IPI);
} }

View File

@ -26,6 +26,7 @@ enum thread_object_state {
enum sched_notify_mode { enum sched_notify_mode {
SCHED_NOTIFY_INIT, SCHED_NOTIFY_INIT,
SCHED_NOTIFY_NMI,
SCHED_NOTIFY_IPI SCHED_NOTIFY_IPI
}; };