hv: sched: move schedule initialization to each pcpu init

schedule infrastructure is per pcpu, so move its initialization to each
pcpu's initialization.

Tracked-On: #3813
Signed-off-by: Jason Chen CJ <jason.cj.chen@intel.com>
Signed-off-by: Yu Wang <yu1.wang@intel.com>
Signed-off-by: Shuo A Liu <shuo.a.liu@intel.com>
Acked-by: Eddie Dong <eddie.dong@intel.com>
This commit is contained in:
Shuo A Liu 2019-06-12 18:31:44 +08:00 committed by ACRN System Integration
parent dadcdcefa0
commit fafd5cf063
3 changed files with 8 additions and 14 deletions

View File

@ -218,8 +218,6 @@ void init_pcpu_post(uint16_t pcpu_id)
pr_fatal("Please apply the latest CPU uCode patch!"); pr_fatal("Please apply the latest CPU uCode patch!");
} }
init_scheduler();
/* Initialize interrupts */ /* Initialize interrupts */
init_interrupt(BOOT_CPU_ID); init_interrupt(BOOT_CPU_ID);
@ -258,6 +256,8 @@ void init_pcpu_post(uint16_t pcpu_id)
wait_sync_change(&pcpu_sync, 0UL); wait_sync_change(&pcpu_sync, 0UL);
} }
init_sched(pcpu_id);
setup_clos(pcpu_id); setup_clos(pcpu_id);
enable_smep(); enable_smep();

View File

@ -27,19 +27,13 @@ uint16_t sched_get_pcpuid(const struct thread_object *obj)
return obj->pcpu_id; return obj->pcpu_id;
} }
void init_scheduler(void) void init_sched(uint16_t pcpu_id)
{ {
struct sched_control *ctl; struct sched_control *ctl = &per_cpu(sched_ctl, pcpu_id);
uint32_t i;
uint16_t pcpu_nums = get_pcpu_nums();
for (i = 0U; i < pcpu_nums; i++) { spinlock_init(&ctl->scheduler_lock);
ctl = &per_cpu(sched_ctl, i); ctl->flags = 0UL;
ctl->curr_obj = NULL;
spinlock_init(&ctl->scheduler_lock);
ctl->flags = 0UL;
ctl->curr_obj = NULL;
}
} }
void get_schedule_lock(uint16_t pcpu_id) void get_schedule_lock(uint16_t pcpu_id)

View File

@ -39,7 +39,7 @@ bool is_idle_thread(const struct thread_object *obj);
uint16_t sched_get_pcpuid(const struct thread_object *obj); uint16_t sched_get_pcpuid(const struct thread_object *obj);
struct thread_object *sched_get_current(uint16_t pcpu_id); struct thread_object *sched_get_current(uint16_t pcpu_id);
void init_scheduler(void); void init_sched(uint16_t pcpu_id);
void switch_to_idle(thread_entry_t idle_thread); void switch_to_idle(thread_entry_t idle_thread);
void get_schedule_lock(uint16_t pcpu_id); void get_schedule_lock(uint16_t pcpu_id);
void release_schedule_lock(uint16_t pcpu_id); void release_schedule_lock(uint16_t pcpu_id);