mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-06-26 07:21:37 +00:00
hv: sched_iorr: add init functions of sched_iorr
We set timeslice to 10ms as default, and set tick interval to 1ms. When init sched_iorr scheduler, we init a periodic timer as the tick and init the runqueue to maintain objects in the sched_control. Destroy the timer in deinit. Tracked-On: #4178 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:
parent
ed4008630d
commit
f44aa4e4c9
@ -8,6 +8,7 @@
|
|||||||
#include <per_cpu.h>
|
#include <per_cpu.h>
|
||||||
#include <schedule.h>
|
#include <schedule.h>
|
||||||
|
|
||||||
|
#define CONFIG_SLICE_MS 10UL
|
||||||
struct sched_iorr_data {
|
struct sched_iorr_data {
|
||||||
/* keep list as the first item */
|
/* keep list as the first item */
|
||||||
struct list_head list;
|
struct list_head list;
|
||||||
@ -17,17 +18,48 @@ struct sched_iorr_data {
|
|||||||
int64_t left_cycles;
|
int64_t left_cycles;
|
||||||
};
|
};
|
||||||
|
|
||||||
int sched_iorr_init(__unused struct sched_control *ctl)
|
static void sched_tick_handler(__unused void *param)
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void sched_iorr_deinit(__unused struct sched_control *ctl)
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void sched_iorr_init_data(__unused struct thread_object *obj)
|
/*
|
||||||
|
* @pre ctl->pcpu_id == get_pcpu_id()
|
||||||
|
*/
|
||||||
|
int sched_iorr_init(struct sched_control *ctl)
|
||||||
{
|
{
|
||||||
|
struct sched_iorr_control *iorr_ctl = &per_cpu(sched_iorr_ctl, ctl->pcpu_id);
|
||||||
|
uint64_t tick_period = CYCLES_PER_MS;
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
|
ASSERT(get_pcpu_id() == ctl->pcpu_id, "Init scheduler on wrong CPU!");
|
||||||
|
|
||||||
|
ctl->priv = iorr_ctl;
|
||||||
|
INIT_LIST_HEAD(&iorr_ctl->runqueue);
|
||||||
|
|
||||||
|
/* The tick_timer is periodically */
|
||||||
|
initialize_timer(&iorr_ctl->tick_timer, sched_tick_handler, ctl,
|
||||||
|
rdtsc() + tick_period, TICK_MODE_PERIODIC, tick_period);
|
||||||
|
|
||||||
|
if (add_timer(&iorr_ctl->tick_timer) < 0) {
|
||||||
|
pr_err("Failed to add schedule tick timer!");
|
||||||
|
ret = -1;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
void sched_iorr_deinit(struct sched_control *ctl)
|
||||||
|
{
|
||||||
|
struct sched_iorr_control *iorr_ctl = (struct sched_iorr_control *)ctl->priv;
|
||||||
|
del_timer(&iorr_ctl->tick_timer);
|
||||||
|
}
|
||||||
|
|
||||||
|
void sched_iorr_init_data(struct thread_object *obj)
|
||||||
|
{
|
||||||
|
struct sched_iorr_data *data;
|
||||||
|
|
||||||
|
data = (struct sched_iorr_data *)obj->data;
|
||||||
|
INIT_LIST_HEAD(&data->list);
|
||||||
|
data->left_cycles = data->slice_cycles = CONFIG_SLICE_MS * CYCLES_PER_MS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct thread_object *sched_iorr_pick_next(__unused struct sched_control *ctl)
|
static struct thread_object *sched_iorr_pick_next(__unused struct sched_control *ctl)
|
||||||
|
Loading…
Reference in New Issue
Block a user