hv: signal_event after make_request
make_request sets the request bit, and signal_event wakes the vcpu thread. If we signal_event comes first, the target vCPU has a chance to sleep again before processing the request bit. Tracked-On: #8507 Signed-off-by: Wu Zhou <wu.zhou@intel.com> Reviewed-by: Junjie Mao <junjie.mao@intel.com>
This commit is contained in:
parent
064be1e3e6
commit
9a6e940849
|
@ -1049,8 +1049,8 @@ void vcpu_handle_pi_notification(uint32_t vcpu_index)
|
|||
* Record this request as ACRN_REQUEST_EVENT,
|
||||
* so that vlapic_inject_intr() will sync PIR to vIRR
|
||||
*/
|
||||
signal_event(&vcpu->events[VCPU_EVENT_VIRTUAL_INTERRUPT]);
|
||||
vcpu_make_request(vcpu, ACRN_REQUEST_EVENT);
|
||||
signal_event(&vcpu->events[VCPU_EVENT_VIRTUAL_INTERRUPT]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -532,8 +532,8 @@ static void vlapic_accept_intr(struct acrn_vlapic *vlapic, uint32_t vector, bool
|
|||
if ((lapic->svr.v & APIC_SVR_ENABLE) == 0U) {
|
||||
dev_dbg(DBG_LEVEL_VLAPIC, "vlapic is software disabled, ignoring interrupt %u", vector);
|
||||
} else {
|
||||
signal_event(&vlapic2vcpu(vlapic)->events[VCPU_EVENT_VIRTUAL_INTERRUPT]);
|
||||
vlapic->ops->accept_intr(vlapic, vector, level);
|
||||
signal_event(&vlapic2vcpu(vlapic)->events[VCPU_EVENT_VIRTUAL_INTERRUPT]);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue