diff --git a/hypervisor/arch/x86/virq.c b/hypervisor/arch/x86/virq.c index e9c46f775..4d3cf35aa 100644 --- a/hypervisor/arch/x86/virq.c +++ b/hypervisor/arch/x86/virq.c @@ -104,8 +104,9 @@ void vcpu_make_request(struct vcpu *vcpu, uint16_t eventid) * scheduling, we need change here to determine it target vcpu is * VMX non-root or root mode */ - if ((int)get_cpu_id() != vcpu->pcpu_id) + if (get_cpu_id() != vcpu->pcpu_id) { send_single_ipi(vcpu->pcpu_id, VECTOR_NOTIFY_VCPU); + } } static int vcpu_do_pending_event(struct vcpu *vcpu) diff --git a/hypervisor/arch/x86/vmexit.c b/hypervisor/arch/x86/vmexit.c index 7f6eb4006..ac908d11e 100644 --- a/hypervisor/arch/x86/vmexit.c +++ b/hypervisor/arch/x86/vmexit.c @@ -157,7 +157,7 @@ int vmexit_handler(struct vcpu *vcpu) uint16_t basic_exit_reason; int ret; - if ((int)get_cpu_id() != vcpu->pcpu_id) { + if (get_cpu_id() != vcpu->pcpu_id) { pr_fatal("vcpu is not running on its pcpu!"); return -EINVAL; } diff --git a/hypervisor/common/schedule.c b/hypervisor/common/schedule.c index 1670d5ff5..1a516524e 100644 --- a/hypervisor/common/schedule.c +++ b/hypervisor/common/schedule.c @@ -101,7 +101,9 @@ void make_reschedule_request(struct vcpu *vcpu) struct sched_context *ctx = &per_cpu(sched_ctx, vcpu->pcpu_id); bitmap_set_lock(NEED_RESCHEDULE, &ctx->flags); - send_single_ipi(vcpu->pcpu_id, VECTOR_NOTIFY_VCPU); + if (get_cpu_id() != vcpu->pcpu_id) { + send_single_ipi(vcpu->pcpu_id, VECTOR_NOTIFY_VCPU); + } } int need_reschedule(uint16_t pcpu_id) @@ -153,7 +155,9 @@ void make_pcpu_offline(uint16_t pcpu_id) struct sched_context *ctx = &per_cpu(sched_ctx, pcpu_id); bitmap_set_lock(NEED_OFFLINE, &ctx->flags); - send_single_ipi(pcpu_id, VECTOR_NOTIFY_VCPU); + if (get_cpu_id() != pcpu_id) { + send_single_ipi(pcpu_id, VECTOR_NOTIFY_VCPU); + } } int need_offline(uint16_t pcpu_id)