diff --git a/hypervisor/arch/x86/guest/vcpu.c b/hypervisor/arch/x86/guest/vcpu.c index d77f13f1b..6a55b79e0 100644 --- a/hypervisor/arch/x86/guest/vcpu.c +++ b/hypervisor/arch/x86/guest/vcpu.c @@ -620,7 +620,7 @@ void pause_vcpu(struct acrn_vcpu *vcpu, enum vcpu_state new_state) vcpu->state = new_state; if (atomic_load32(&vcpu->running) == 1U) { - remove_from_cpu_runqueue(&vcpu->sched_obj, vcpu->pcpu_id); + remove_from_cpu_runqueue(&vcpu->sched_obj); if (is_lapic_pt_enabled(vcpu)) { make_reschedule_request(vcpu->pcpu_id, DEL_MODE_INIT); @@ -636,7 +636,7 @@ void pause_vcpu(struct acrn_vcpu *vcpu, enum vcpu_state new_state) } } } else { - remove_from_cpu_runqueue(&vcpu->sched_obj, vcpu->pcpu_id); + remove_from_cpu_runqueue(&vcpu->sched_obj); release_schedule_lock(vcpu->pcpu_id); } } diff --git a/hypervisor/common/schedule.c b/hypervisor/common/schedule.c index 3c7237512..b5c7ed88a 100644 --- a/hypervisor/common/schedule.c +++ b/hypervisor/common/schedule.c @@ -24,7 +24,6 @@ void init_scheduler(void) for (i = 0U; i < pcpu_nums; i++) { ctx = &per_cpu(sched_ctx, i); - spinlock_init(&ctx->runqueue_lock); spinlock_init(&ctx->scheduler_lock); INIT_LIST_HEAD(&ctx->runqueue); ctx->flags = 0UL; @@ -74,33 +73,25 @@ void add_to_cpu_runqueue(struct sched_object *obj, uint16_t pcpu_id) { struct sched_context *ctx = &per_cpu(sched_ctx, pcpu_id); - spinlock_obtain(&ctx->runqueue_lock); if (list_empty(&obj->run_list)) { list_add_tail(&obj->run_list, &ctx->runqueue); } - spinlock_release(&ctx->runqueue_lock); } -void remove_from_cpu_runqueue(struct sched_object *obj, uint16_t pcpu_id) +void remove_from_cpu_runqueue(struct sched_object *obj) { - struct sched_context *ctx = &per_cpu(sched_ctx, pcpu_id); - - spinlock_obtain(&ctx->runqueue_lock); list_del_init(&obj->run_list); - spinlock_release(&ctx->runqueue_lock); } static struct sched_object *get_next_sched_obj(struct sched_context *ctx) { struct sched_object *obj = NULL; - spinlock_obtain(&ctx->runqueue_lock); if (!list_empty(&ctx->runqueue)) { obj = get_first_item(&ctx->runqueue, struct sched_object, run_list); } else { obj = &get_cpu_var(idle); } - spinlock_release(&ctx->runqueue_lock); return obj; } diff --git a/hypervisor/include/common/schedule.h b/hypervisor/include/common/schedule.h index 3cd45a915..dbfc2f4db 100644 --- a/hypervisor/include/common/schedule.h +++ b/hypervisor/include/common/schedule.h @@ -28,11 +28,10 @@ struct sched_object { }; struct sched_context { - spinlock_t runqueue_lock; struct list_head runqueue; uint64_t flags; struct sched_object *curr_obj; - spinlock_t scheduler_lock; + spinlock_t scheduler_lock; /* to protect sched_context and sched_object */ }; void init_scheduler(void); @@ -45,7 +44,7 @@ uint16_t allocate_pcpu(void); void free_pcpu(uint16_t pcpu_id); void add_to_cpu_runqueue(struct sched_object *obj, uint16_t pcpu_id); -void remove_from_cpu_runqueue(struct sched_object *obj, uint16_t pcpu_id); +void remove_from_cpu_runqueue(struct sched_object *obj); void make_reschedule_request(uint16_t pcpu_id, uint16_t delmode); bool need_reschedule(uint16_t pcpu_id);