Skip to content

Commit f45605d

Browse files
mgcaowenlingz
authored andcommitted
HV: modularization to separate CR related code
1. move the CR related code from vmcs/vcpu to vCR source files. 2. also add virtual_cr.h to acrn.doxyfile to avoid doc failure. Tracked-On: #1842 Signed-off-by: Minggui Cao <minggui.cao@intel.com> Reviewed-by: Jason Chen CJ <jason.cj.chen@intel.com>
1 parent 8265770 commit f45605d

File tree

10 files changed

+539
-500
lines changed

10 files changed

+539
-500
lines changed

doc/acrn.doxyfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -808,6 +808,7 @@ INPUT = custom-doxygen/mainpage.md \
808808
../hypervisor/include/public/acrn_common.h \
809809
../hypervisor/include/public/acrn_hv_defs.h \
810810
../hypervisor/include/arch/x86/guest/vcpu.h \
811+
../hypervisor/include/arch/x86/virtual_cr.h \
811812
../hypervisor/include/arch/x86/timer.h \
812813
../hypervisor/arch/x86/trusty.c \
813814
../devicemodel/include/virtio.h \

hypervisor/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,7 @@ C_SRCS += arch/x86/virq.c
154154
C_SRCS += arch/x86/vmexit.c
155155
C_SRCS += arch/x86/vmx.c
156156
C_SRCS += arch/x86/vmcs.c
157+
C_SRCS += arch/x86/virtual_cr.c
157158
C_SRCS += arch/x86/assign.c
158159
C_SRCS += arch/x86/trusty.c
159160
C_SRCS += arch/x86/cpu_state_tbl.c

hypervisor/arch/x86/guest/vcpu.c

Lines changed: 1 addition & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#include <schedule.h>
99
#include <vm0_boot.h>
1010
#include <security.h>
11+
#include <virtual_cr.h>
1112

1213
inline uint64_t vcpu_get_gpreg(const struct acrn_vcpu *vcpu, uint32_t reg)
1314
{
@@ -96,55 +97,6 @@ inline void vcpu_set_rflags(struct acrn_vcpu *vcpu, uint64_t val)
9697
bitmap_set_lock(CPU_REG_RFLAGS, &vcpu->reg_updated);
9798
}
9899

99-
inline uint64_t vcpu_get_cr0(struct acrn_vcpu *vcpu)
100-
{
101-
uint64_t mask;
102-
struct run_context *ctx =
103-
&vcpu->arch.contexts[vcpu->arch.cur_context].run_ctx;
104-
105-
if (bitmap_test_and_set_lock(CPU_REG_CR0, &vcpu->reg_cached) == 0) {
106-
mask = exec_vmread(VMX_CR0_MASK);
107-
ctx->cr0 = (exec_vmread(VMX_CR0_READ_SHADOW) & mask) |
108-
(exec_vmread(VMX_GUEST_CR0) & (~mask));
109-
}
110-
return ctx->cr0;
111-
}
112-
113-
inline void vcpu_set_cr0(struct acrn_vcpu *vcpu, uint64_t val)
114-
{
115-
vmx_write_cr0(vcpu, val);
116-
}
117-
118-
inline uint64_t vcpu_get_cr2(struct acrn_vcpu *vcpu)
119-
{
120-
return vcpu->
121-
arch.contexts[vcpu->arch.cur_context].run_ctx.cr2;
122-
}
123-
124-
inline void vcpu_set_cr2(struct acrn_vcpu *vcpu, uint64_t val)
125-
{
126-
vcpu->arch.contexts[vcpu->arch.cur_context].run_ctx.cr2 = val;
127-
}
128-
129-
inline uint64_t vcpu_get_cr4(struct acrn_vcpu *vcpu)
130-
{
131-
uint64_t mask;
132-
struct run_context *ctx =
133-
&vcpu->arch.contexts[vcpu->arch.cur_context].run_ctx;
134-
135-
if (bitmap_test_and_set_lock(CPU_REG_CR4, &vcpu->reg_cached) == 0) {
136-
mask = exec_vmread(VMX_CR4_MASK);
137-
ctx->cr4 = (exec_vmread(VMX_CR4_READ_SHADOW) & mask) |
138-
(exec_vmread(VMX_GUEST_CR4) & (~mask));
139-
}
140-
return ctx->cr4;
141-
}
142-
143-
inline void vcpu_set_cr4(struct acrn_vcpu *vcpu, uint64_t val)
144-
{
145-
vmx_write_cr4(vcpu, val);
146-
}
147-
148100
uint64_t vcpu_get_guest_msr(const struct acrn_vcpu *vcpu, uint32_t msr)
149101
{
150102
uint32_t index = vmsr_get_guest_msr_index(msr);

0 commit comments

Comments
 (0)