2019-06-17 17:31:14 +08:00
|
|
|
/*
|
|
|
|
* Copyright (C) 2019 Intel Corporation. All rights reserved.
|
|
|
|
*
|
|
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
|
|
*/
|
|
|
|
|
2021-04-23 15:50:57 +08:00
|
|
|
#include <asm/per_cpu.h>
|
2019-06-17 17:31:14 +08:00
|
|
|
#include <schedule.h>
|
|
|
|
|
|
|
|
static int32_t sched_noop_init(struct sched_control *ctl)
|
|
|
|
{
|
|
|
|
struct sched_noop_control *noop_ctl = &per_cpu(sched_noop_ctl, ctl->pcpu_id);
|
|
|
|
ctl->priv = noop_ctl;
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
static struct thread_object *sched_noop_pick_next(struct sched_control *ctl)
|
|
|
|
{
|
|
|
|
struct sched_noop_control *noop_ctl = (struct sched_noop_control *)ctl->priv;
|
|
|
|
struct thread_object *next = NULL;
|
|
|
|
|
|
|
|
if (noop_ctl->noop_thread_obj != NULL) {
|
|
|
|
next = noop_ctl->noop_thread_obj;
|
|
|
|
} else {
|
|
|
|
next = &get_cpu_var(idle);
|
|
|
|
}
|
|
|
|
return next;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sched_noop_sleep(struct thread_object *obj)
|
|
|
|
{
|
|
|
|
struct sched_noop_control *noop_ctl = (struct sched_noop_control *)obj->sched_ctl->priv;
|
|
|
|
|
|
|
|
if (noop_ctl->noop_thread_obj == obj) {
|
|
|
|
noop_ctl->noop_thread_obj = NULL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sched_noop_wake(struct thread_object *obj)
|
|
|
|
{
|
|
|
|
struct sched_noop_control *noop_ctl = (struct sched_noop_control *)obj->sched_ctl->priv;
|
|
|
|
|
|
|
|
if (noop_ctl->noop_thread_obj == NULL) {
|
|
|
|
noop_ctl->noop_thread_obj = obj;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
struct acrn_scheduler sched_noop = {
|
|
|
|
.name = "sched_noop",
|
|
|
|
.init = sched_noop_init,
|
|
|
|
.pick_next = sched_noop_pick_next,
|
|
|
|
.sleep = sched_noop_sleep,
|
|
|
|
.wake = sched_noop_wake,
|
|
|
|
};
|