Page MenuHomeFreeBSD

D18846.1777007810.diff
No OneTemporary

Size
2 KB
Referenced Files
None
Subscribers
None

D18846.1777007810.diff

Index: sys/amd64/vmm/amd/svm_softc.h
===================================================================
--- sys/amd64/vmm/amd/svm_softc.h
+++ sys/amd64/vmm/amd/svm_softc.h
@@ -54,11 +54,15 @@
struct asid asid;
} __aligned(PAGE_SIZE);
+struct apic_page {
+ uint8_t byte[PAGE_SIZE];
+} __aligned(PAGE_SIZE);
+
/*
* SVM softc, one per virtual machine.
*/
struct svm_softc {
- uint8_t apic_page[VM_MAXCPU][PAGE_SIZE];
+ struct apic_page apic_page[VM_MAXCPU];
struct svm_vcpu vcpu[VM_MAXCPU];
vm_offset_t nptp; /* nested page table */
uint8_t *iopm_bitmap; /* shared by all vcpus */
Index: sys/amd64/vmm/intel/vmx.h
===================================================================
--- sys/amd64/vmm/intel/vmx.h
+++ sys/amd64/vmm/intel/vmx.h
@@ -119,13 +119,18 @@
GUEST_MSR_NUM /* must be the last enumeration */
};
+/* per vcpu msrs */
+struct vmx_msrs {
+ uint64_t reg[GUEST_MSR_NUM];
+};
+
/* virtual machine softc */
struct vmx {
struct vmcs vmcs[VM_MAXCPU]; /* one vmcs per virtual cpu */
struct apic_page apic_page[VM_MAXCPU]; /* one apic page per vcpu */
char msr_bitmap[PAGE_SIZE];
struct pir_desc pir_desc[VM_MAXCPU];
- uint64_t guest_msrs[VM_MAXCPU][GUEST_MSR_NUM];
+ struct vmx_msrs guest_msrs[VM_MAXCPU];
struct vmxctx ctx[VM_MAXCPU];
struct vmxcap cap[VM_MAXCPU];
struct vmxstate state[VM_MAXCPU];
Index: sys/amd64/vmm/intel/vmx_msr.c
===================================================================
--- sys/amd64/vmm/intel/vmx_msr.c
+++ sys/amd64/vmm/intel/vmx_msr.c
@@ -326,7 +326,7 @@
{
uint64_t *guest_msrs;
- guest_msrs = vmx->guest_msrs[vcpuid];
+ guest_msrs = &vmx->guest_msrs[vcpuid].reg[0];
/*
* The permissions bitmap is shared between all vcpus so initialize it
@@ -358,7 +358,7 @@
void
vmx_msr_guest_enter(struct vmx *vmx, int vcpuid)
{
- uint64_t *guest_msrs = vmx->guest_msrs[vcpuid];
+ uint64_t *guest_msrs = &vmx->guest_msrs[vcpuid].reg[0];
/* Save host MSRs (in particular, KGSBASE) and restore guest MSRs */
update_pcb_bases(curpcb);
@@ -372,7 +372,7 @@
void
vmx_msr_guest_exit(struct vmx *vmx, int vcpuid)
{
- uint64_t *guest_msrs = vmx->guest_msrs[vcpuid];
+ uint64_t *guest_msrs = &vmx->guest_msrs[vcpuid].reg[0];
/* Save guest MSRs */
guest_msrs[IDX_MSR_LSTAR] = rdmsr(MSR_LSTAR);
@@ -396,7 +396,7 @@
const uint64_t *guest_msrs;
int error;
- guest_msrs = vmx->guest_msrs[vcpuid];
+ guest_msrs = &vmx->guest_msrs[vcpuid].reg[0];
error = 0;
switch (num) {
@@ -438,7 +438,7 @@
uint64_t changed;
int error;
- guest_msrs = vmx->guest_msrs[vcpuid];
+ guest_msrs = &vmx->guest_msrs[vcpuid].reg[0];
error = 0;
switch (num) {

File Metadata

Mime Type
text/plain
Expires
Fri, Apr 24, 5:16 AM (2 h, 29 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28420482
Default Alt Text
D18846.1777007810.diff (2 KB)

Event Timeline