acrn-hypervisor/hypervisor/arch/x86/sched.c
Jason Chen CJ 4fc54f952e 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>
2019-01-23 16:21:17 +08:00

37 lines
691 B
C

/*
* 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");
}