schedule: add full context switch support

this patch added full context switch support for scheduling, it make sure
each VCPU has its own stack, and added host_sp field in struct sched_object
to record host stack pointer for each switch out object.

Arch related function arch_switch_to is added for context switch.

To benefit debugging, a name[] field is also added into struct sched_object.

Tracked-On: #2394
Signed-off-by: Jason Chen CJ <jason.cj.chen@intel.com>
Acked-by: Xu, Anthony <anthony.xu@intel.com>
This commit is contained in:
Jason Chen CJ
2019-01-18 16:30:25 +08:00
committed by wenlingz
parent 21092e6f6d
commit 4fc54f952e
7 changed files with 93 additions and 43 deletions

View File

@@ -0,0 +1,36 @@
/*
* Copyright (C) 2019 Intel Corporation. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include <types.h>
#include <spinlock.h>
#include <list.h>
#include <schedule.h>
void arch_switch_to(struct sched_object *prev, struct sched_object *next)
{
asm volatile ("pushf\n"
"pushq %%rbx\n"
"pushq %%rbp\n"
"pushq %%r12\n"
"pushq %%r13\n"
"pushq %%r14\n"
"pushq %%r15\n"
"pushq %%rdi\n"
"movq %%rsp, %0\n"
"movq %1, %%rsp\n"
"popq %%rdi\n"
"popq %%r15\n"
"popq %%r14\n"
"popq %%r13\n"
"popq %%r12\n"
"popq %%rbp\n"
"popq %%rbx\n"
"popf\n"
"retq\n"
: "=m"(prev->host_sp)
: "r"(next->host_sp)
: "memory");
}