mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-05-04 22:47:00 +00:00
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>
37 lines
691 B
C
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");
|
|
}
|