mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2026-06-08 18:14:53 +00:00
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:
36
hypervisor/arch/x86/sched.c
Normal file
36
hypervisor/arch/x86/sched.c
Normal 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");
|
||||
}
|
||||
Reference in New Issue
Block a user