mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-09-05 02:40:37 +00:00
hv: cpu_context is not only used by guest.
It could be also used by host as well. So we remove GUEST from MACRO name Signed-off-by: Yin Fengwei <fengwei.yin@intel.com> Acked-by: Eddie Dong <Eddie.dong@intel.com>
This commit is contained in:
@@ -376,55 +376,55 @@ void bsp_boot_init(void)
|
||||
|
||||
ASSERT(NR_WORLD == 2, "Only 2 Worlds supported!");
|
||||
ASSERT(offsetof(struct cpu_regs, rax) ==
|
||||
VMX_MACHINE_T_GUEST_RAX_OFFSET,
|
||||
CPU_CONTEXT_OFFSET_RAX,
|
||||
"cpu_regs rax offset not match");
|
||||
ASSERT(offsetof(struct cpu_regs, rbx) ==
|
||||
VMX_MACHINE_T_GUEST_RBX_OFFSET,
|
||||
CPU_CONTEXT_OFFSET_RBX,
|
||||
"cpu_regs rbx offset not match");
|
||||
ASSERT(offsetof(struct cpu_regs, rcx) ==
|
||||
VMX_MACHINE_T_GUEST_RCX_OFFSET,
|
||||
CPU_CONTEXT_OFFSET_RCX,
|
||||
"cpu_regs rcx offset not match");
|
||||
ASSERT(offsetof(struct cpu_regs, rdx) ==
|
||||
VMX_MACHINE_T_GUEST_RDX_OFFSET,
|
||||
CPU_CONTEXT_OFFSET_RDX,
|
||||
"cpu_regs rdx offset not match");
|
||||
ASSERT(offsetof(struct cpu_regs, rbp) ==
|
||||
VMX_MACHINE_T_GUEST_RBP_OFFSET,
|
||||
CPU_CONTEXT_OFFSET_RBP,
|
||||
"cpu_regs rbp offset not match");
|
||||
ASSERT(offsetof(struct cpu_regs, rsi) ==
|
||||
VMX_MACHINE_T_GUEST_RSI_OFFSET,
|
||||
CPU_CONTEXT_OFFSET_RSI,
|
||||
"cpu_regs rsi offset not match");
|
||||
ASSERT(offsetof(struct cpu_regs, rdi) ==
|
||||
VMX_MACHINE_T_GUEST_RDI_OFFSET,
|
||||
CPU_CONTEXT_OFFSET_RDI,
|
||||
"cpu_regs rdi offset not match");
|
||||
ASSERT(offsetof(struct cpu_regs, r8) ==
|
||||
VMX_MACHINE_T_GUEST_R8_OFFSET,
|
||||
CPU_CONTEXT_OFFSET_R8,
|
||||
"cpu_regs r8 offset not match");
|
||||
ASSERT(offsetof(struct cpu_regs, r9) ==
|
||||
VMX_MACHINE_T_GUEST_R9_OFFSET,
|
||||
CPU_CONTEXT_OFFSET_R9,
|
||||
"cpu_regs r9 offset not match");
|
||||
ASSERT(offsetof(struct cpu_regs, r10) ==
|
||||
VMX_MACHINE_T_GUEST_R10_OFFSET,
|
||||
CPU_CONTEXT_OFFSET_R10,
|
||||
"cpu_regs r10 offset not match");
|
||||
ASSERT(offsetof(struct cpu_regs, r11) ==
|
||||
VMX_MACHINE_T_GUEST_R11_OFFSET,
|
||||
CPU_CONTEXT_OFFSET_R11,
|
||||
"cpu_regs r11 offset not match");
|
||||
ASSERT(offsetof(struct cpu_regs, r12) ==
|
||||
VMX_MACHINE_T_GUEST_R12_OFFSET,
|
||||
CPU_CONTEXT_OFFSET_R12,
|
||||
"cpu_regs r12 offset not match");
|
||||
ASSERT(offsetof(struct cpu_regs, r13) ==
|
||||
VMX_MACHINE_T_GUEST_R13_OFFSET,
|
||||
CPU_CONTEXT_OFFSET_R13,
|
||||
"cpu_regs r13 offset not match");
|
||||
ASSERT(offsetof(struct cpu_regs, r14) ==
|
||||
VMX_MACHINE_T_GUEST_R14_OFFSET,
|
||||
CPU_CONTEXT_OFFSET_R14,
|
||||
"cpu_regs r14 offset not match");
|
||||
ASSERT(offsetof(struct cpu_regs, r15) ==
|
||||
VMX_MACHINE_T_GUEST_R15_OFFSET,
|
||||
CPU_CONTEXT_OFFSET_R15,
|
||||
"cpu_regs r15 offset not match");
|
||||
ASSERT(offsetof(struct run_context, cr2) ==
|
||||
VMX_MACHINE_T_GUEST_CR2_OFFSET,
|
||||
CPU_CONTEXT_OFFSET_CR2,
|
||||
"run_context cr2 offset not match");
|
||||
ASSERT(offsetof(struct run_context, ia32_spec_ctrl) ==
|
||||
VMX_MACHINE_T_GUEST_SPEC_CTRL_OFFSET,
|
||||
CPU_CONTEXT_OFFSET_IA32_SPEC_CTRL,
|
||||
"run_context ia32_spec_ctrl offset not match");
|
||||
|
||||
__bitmap_set(CPU_BOOT_ID, &pcpu_active_bitmap);
|
||||
|
@@ -240,22 +240,22 @@ int cr_access_vmexit_handler(struct vcpu *vcpu)
|
||||
struct run_context *cur_context =
|
||||
&vcpu->arch_vcpu.contexts[vcpu->arch_vcpu.cur_context];
|
||||
static const int reg_trans_tab[] = {
|
||||
[0] = VMX_MACHINE_T_GUEST_RAX_INDEX,
|
||||
[1] = VMX_MACHINE_T_GUEST_RCX_INDEX,
|
||||
[2] = VMX_MACHINE_T_GUEST_RDX_INDEX,
|
||||
[3] = VMX_MACHINE_T_GUEST_RBX_INDEX,
|
||||
[0] = CPU_CONTEXT_INDEX_RAX,
|
||||
[1] = CPU_CONTEXT_INDEX_RCX,
|
||||
[2] = CPU_CONTEXT_INDEX_RDX,
|
||||
[3] = CPU_CONTEXT_INDEX_RBX,
|
||||
[4] = 0xFF, /* for sp reg, should not be used, just for init */
|
||||
[5] = VMX_MACHINE_T_GUEST_RBP_INDEX,
|
||||
[6] = VMX_MACHINE_T_GUEST_RSI_INDEX,
|
||||
[7] = VMX_MACHINE_T_GUEST_RDI_INDEX,
|
||||
[8] = VMX_MACHINE_T_GUEST_R8_INDEX,
|
||||
[9] = VMX_MACHINE_T_GUEST_R9_INDEX,
|
||||
[10] = VMX_MACHINE_T_GUEST_R10_INDEX,
|
||||
[11] = VMX_MACHINE_T_GUEST_R11_INDEX,
|
||||
[12] = VMX_MACHINE_T_GUEST_R12_INDEX,
|
||||
[13] = VMX_MACHINE_T_GUEST_R13_INDEX,
|
||||
[14] = VMX_MACHINE_T_GUEST_R14_INDEX,
|
||||
[15] = VMX_MACHINE_T_GUEST_R15_INDEX
|
||||
[5] = CPU_CONTEXT_INDEX_RBP,
|
||||
[6] = CPU_CONTEXT_INDEX_RSI,
|
||||
[7] = CPU_CONTEXT_INDEX_RDI,
|
||||
[8] = CPU_CONTEXT_INDEX_R8,
|
||||
[9] = CPU_CONTEXT_INDEX_R9,
|
||||
[10] = CPU_CONTEXT_INDEX_R10,
|
||||
[11] = CPU_CONTEXT_INDEX_R11,
|
||||
[12] = CPU_CONTEXT_INDEX_R12,
|
||||
[13] = CPU_CONTEXT_INDEX_R13,
|
||||
[14] = CPU_CONTEXT_INDEX_R14,
|
||||
[15] = CPU_CONTEXT_INDEX_R15,
|
||||
};
|
||||
int idx = VM_EXIT_CR_ACCESS_REG_IDX(vcpu->arch_vcpu.exit_qualification);
|
||||
|
||||
|
@@ -59,7 +59,7 @@ vmx_vmrun:
|
||||
|
||||
/* 0x00000048 = MSR_IA32_SPEC_CTRL */
|
||||
movl $0x00000048,%ecx
|
||||
mov VMX_MACHINE_T_GUEST_SPEC_CTRL_OFFSET(%rdi),%rax
|
||||
mov CPU_CONTEXT_OFFSET_IA32_SPEC_CTRL(%rdi),%rax
|
||||
movl $0,%edx
|
||||
wrmsr
|
||||
|
||||
@@ -80,25 +80,25 @@ next:
|
||||
/* Compare the launch flag to see if launching (1) or resuming (0) */
|
||||
cmp $VM_LAUNCH, %rsi
|
||||
|
||||
mov VMX_MACHINE_T_GUEST_CR2_OFFSET(%rdi),%rax
|
||||
mov CPU_CONTEXT_OFFSET_CR2(%rdi),%rax
|
||||
mov %rax,%cr2
|
||||
|
||||
mov VMX_MACHINE_T_GUEST_RAX_OFFSET(%rdi),%rax
|
||||
mov VMX_MACHINE_T_GUEST_RBX_OFFSET(%rdi),%rbx
|
||||
mov VMX_MACHINE_T_GUEST_RCX_OFFSET(%rdi),%rcx
|
||||
mov VMX_MACHINE_T_GUEST_RDX_OFFSET(%rdi),%rdx
|
||||
mov VMX_MACHINE_T_GUEST_RBP_OFFSET(%rdi),%rbp
|
||||
mov VMX_MACHINE_T_GUEST_RSI_OFFSET(%rdi),%rsi
|
||||
mov VMX_MACHINE_T_GUEST_R8_OFFSET(%rdi),%r8
|
||||
mov VMX_MACHINE_T_GUEST_R9_OFFSET(%rdi),%r9
|
||||
mov VMX_MACHINE_T_GUEST_R10_OFFSET(%rdi),%r10
|
||||
mov VMX_MACHINE_T_GUEST_R11_OFFSET(%rdi),%r11
|
||||
mov VMX_MACHINE_T_GUEST_R12_OFFSET(%rdi),%r12
|
||||
mov VMX_MACHINE_T_GUEST_R13_OFFSET(%rdi),%r13
|
||||
mov VMX_MACHINE_T_GUEST_R14_OFFSET(%rdi),%r14
|
||||
mov VMX_MACHINE_T_GUEST_R15_OFFSET(%rdi),%r15
|
||||
mov CPU_CONTEXT_OFFSET_RAX(%rdi),%rax
|
||||
mov CPU_CONTEXT_OFFSET_RBX(%rdi),%rbx
|
||||
mov CPU_CONTEXT_OFFSET_RCX(%rdi),%rcx
|
||||
mov CPU_CONTEXT_OFFSET_RDX(%rdi),%rdx
|
||||
mov CPU_CONTEXT_OFFSET_RBP(%rdi),%rbp
|
||||
mov CPU_CONTEXT_OFFSET_RSI(%rdi),%rsi
|
||||
mov CPU_CONTEXT_OFFSET_R8(%rdi),%r8
|
||||
mov CPU_CONTEXT_OFFSET_R9(%rdi),%r9
|
||||
mov CPU_CONTEXT_OFFSET_R10(%rdi),%r10
|
||||
mov CPU_CONTEXT_OFFSET_R11(%rdi),%r11
|
||||
mov CPU_CONTEXT_OFFSET_R12(%rdi),%r12
|
||||
mov CPU_CONTEXT_OFFSET_R13(%rdi),%r13
|
||||
mov CPU_CONTEXT_OFFSET_R14(%rdi),%r14
|
||||
mov CPU_CONTEXT_OFFSET_R15(%rdi),%r15
|
||||
|
||||
mov VMX_MACHINE_T_GUEST_RDI_OFFSET(%rdi),%rdi
|
||||
mov CPU_CONTEXT_OFFSET_RDI(%rdi),%rdi
|
||||
|
||||
/* Execute appropriate VMX instruction */
|
||||
je vm_launch
|
||||
@@ -122,30 +122,30 @@ vm_exit:
|
||||
xchg 0(%rsp),%rdi
|
||||
|
||||
/* Save current GPRs to guest state area */
|
||||
mov %rax,VMX_MACHINE_T_GUEST_RAX_OFFSET(%rdi)
|
||||
mov %rax,CPU_CONTEXT_OFFSET_RAX(%rdi)
|
||||
|
||||
mov %cr2,%rax
|
||||
mov %rax,VMX_MACHINE_T_GUEST_CR2_OFFSET(%rdi)
|
||||
mov %rax,CPU_CONTEXT_OFFSET_CR2(%rdi)
|
||||
|
||||
mov %rbx,VMX_MACHINE_T_GUEST_RBX_OFFSET(%rdi)
|
||||
mov %rcx,VMX_MACHINE_T_GUEST_RCX_OFFSET(%rdi)
|
||||
mov %rdx,VMX_MACHINE_T_GUEST_RDX_OFFSET(%rdi)
|
||||
mov %rbp,VMX_MACHINE_T_GUEST_RBP_OFFSET(%rdi)
|
||||
mov %rsi,VMX_MACHINE_T_GUEST_RSI_OFFSET(%rdi)
|
||||
mov %r8,VMX_MACHINE_T_GUEST_R8_OFFSET(%rdi)
|
||||
mov %r9,VMX_MACHINE_T_GUEST_R9_OFFSET(%rdi)
|
||||
mov %r10,VMX_MACHINE_T_GUEST_R10_OFFSET(%rdi)
|
||||
mov %r11,VMX_MACHINE_T_GUEST_R11_OFFSET(%rdi)
|
||||
mov %r12,VMX_MACHINE_T_GUEST_R12_OFFSET(%rdi)
|
||||
mov %r13,VMX_MACHINE_T_GUEST_R13_OFFSET(%rdi)
|
||||
mov %r14,VMX_MACHINE_T_GUEST_R14_OFFSET(%rdi)
|
||||
mov %r15,VMX_MACHINE_T_GUEST_R15_OFFSET(%rdi)
|
||||
mov %rbx,CPU_CONTEXT_OFFSET_RBX(%rdi)
|
||||
mov %rcx,CPU_CONTEXT_OFFSET_RCX(%rdi)
|
||||
mov %rdx,CPU_CONTEXT_OFFSET_RDX(%rdi)
|
||||
mov %rbp,CPU_CONTEXT_OFFSET_RBP(%rdi)
|
||||
mov %rsi,CPU_CONTEXT_OFFSET_RSI(%rdi)
|
||||
mov %r8,CPU_CONTEXT_OFFSET_R8(%rdi)
|
||||
mov %r9,CPU_CONTEXT_OFFSET_R9(%rdi)
|
||||
mov %r10,CPU_CONTEXT_OFFSET_R10(%rdi)
|
||||
mov %r11,CPU_CONTEXT_OFFSET_R11(%rdi)
|
||||
mov %r12,CPU_CONTEXT_OFFSET_R12(%rdi)
|
||||
mov %r13,CPU_CONTEXT_OFFSET_R13(%rdi)
|
||||
mov %r14,CPU_CONTEXT_OFFSET_R14(%rdi)
|
||||
mov %r15,CPU_CONTEXT_OFFSET_R15(%rdi)
|
||||
|
||||
/* Load guest RDI off host stack and into RDX */
|
||||
mov 0(%rsp),%rdx
|
||||
|
||||
/* Save guest RDI to guest state area */
|
||||
mov %rdx,VMX_MACHINE_T_GUEST_RDI_OFFSET(%rdi)
|
||||
mov %rdx,CPU_CONTEXT_OFFSET_RDI(%rdi)
|
||||
|
||||
/* Save RDI to RSI for later SPEC_CTRL save*/
|
||||
mov %rdi,%rsi
|
||||
@@ -192,7 +192,7 @@ vm_eval_error:
|
||||
*/
|
||||
movl $0x00000048,%ecx
|
||||
rdmsr
|
||||
mov %rax,VMX_MACHINE_T_GUEST_SPEC_CTRL_OFFSET(%rsi)
|
||||
mov %rax,CPU_CONTEXT_OFFSET_IA32_SPEC_CTRL(%rsi)
|
||||
/* 0x1 = SPEC_ENABLE_IBRS */
|
||||
movl $0x1,%eax
|
||||
movl $0,%edx
|
||||
@@ -215,7 +215,7 @@ ibrs_opt:
|
||||
*/
|
||||
movl $0x00000048,%ecx
|
||||
rdmsr
|
||||
mov %rax,VMX_MACHINE_T_GUEST_SPEC_CTRL_OFFSET(%rsi)
|
||||
mov %rax,CPU_CONTEXT_OFFSET_IA32_SPEC_CTRL(%rsi)
|
||||
/* 0x2 = SPEC_ENABLE_STIBP */
|
||||
movl $0x2,%eax
|
||||
movl $0,%edx
|
||||
|
Reference in New Issue
Block a user