Skip to content

Commit 7e96bf4

Browse files
committed
Merge tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm
Pull kvm fixes from Paolo Bonzini: "ARM: - Fix MTE shared page detection - Enable selftest's use of PMU registers when asked to s390: - restore 5.13 debugfs names x86: - fix sizes for vcpu-id indexed arrays - fixes for AMD virtualized LAPIC (AVIC) - other small bugfixes Generic: - access tracking performance test - dirty_log_perf_test command line parsing fix - Fix selftest use of obsolete pthread_yield() in favour of sched_yield() - use cpu_relax when halt polling - fixed missing KVM_CLEAR_DIRTY_LOG compat ioctl" * tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm: KVM: add missing compat KVM_CLEAR_DIRTY_LOG KVM: use cpu_relax when halt polling KVM: SVM: use vmcb01 in svm_refresh_apicv_exec_ctrl KVM: SVM: tweak warning about enabled AVIC on nested entry KVM: SVM: svm_set_vintr don't warn if AVIC is active but is about to be deactivated KVM: s390: restore old debugfs names KVM: SVM: delay svm_vcpu_init_msrpm after svm->vmcb is initialized KVM: selftests: Introduce access_tracking_perf_test KVM: selftests: Fix missing break in dirty_log_perf_test arg parsing x86/kvm: fix vcpu-id indexed array sizes KVM: x86: Check the right feature bit for MSR_KVM_ASYNC_PF_ACK access docs: virt: kvm: api.rst: replace some characters KVM: Documentation: Fix KVM_CAP_ENFORCE_PV_FEATURE_CPUID name KVM: nSVM: Swap the parameter order for svm_copy_vmrun_state()/svm_copy_vmloadsave_state() KVM: nSVM: Rename nested_svm_vmloadsave() to svm_copy_vmloadsave_state() KVM: arm64: selftests: get-reg-list: actually enable pmu regs in pmu sublist KVM: selftests: change pthread_yield to sched_yield KVM: arm64: Fix detection of shared VMAs on guest fault
2 parents 2b99c47 + 8750f9b commit 7e96bf4

File tree

20 files changed

+537
-71
lines changed

20 files changed

+537
-71
lines changed

Documentation/virt/kvm/api.rst

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -855,7 +855,7 @@ in-kernel irqchip (GIC), and for in-kernel irqchip can tell the GIC to
855855
use PPIs designated for specific cpus. The irq field is interpreted
856856
like this::
857857

858-
 bits: | 31 ... 28 | 27 ... 24 | 23 ... 16 | 15 ... 0 |
858+
bits: | 31 ... 28 | 27 ... 24 | 23 ... 16 | 15 ... 0 |
859859
field: | vcpu2_index | irq_type | vcpu_index | irq_id |
860860

861861
The irq_type field has the following values:
@@ -2149,10 +2149,10 @@ prior to calling the KVM_RUN ioctl.
21492149
Errors:
21502150

21512151
====== ============================================================
2152-
 ENOENT   no such register
2153-
 EINVAL   invalid register ID, or no such register or used with VMs in
2152+
ENOENT no such register
2153+
EINVAL invalid register ID, or no such register or used with VMs in
21542154
protected virtualization mode on s390
2155-
 EPERM    (arm64) register access not allowed before vcpu finalization
2155+
EPERM (arm64) register access not allowed before vcpu finalization
21562156
====== ============================================================
21572157

21582158
(These error codes are indicative only: do not rely on a specific error
@@ -2590,10 +2590,10 @@ following id bit patterns::
25902590
Errors include:
25912591

25922592
======== ============================================================
2593-
 ENOENT   no such register
2594-
 EINVAL   invalid register ID, or no such register or used with VMs in
2593+
ENOENT no such register
2594+
EINVAL invalid register ID, or no such register or used with VMs in
25952595
protected virtualization mode on s390
2596-
 EPERM    (arm64) register access not allowed before vcpu finalization
2596+
EPERM (arm64) register access not allowed before vcpu finalization
25972597
======== ============================================================
25982598

25992599
(These error codes are indicative only: do not rely on a specific error
@@ -3112,13 +3112,13 @@ current state. "addr" is ignored.
31123112
Errors:
31133113

31143114
====== =================================================================
3115-
 EINVAL    the target is unknown, or the combination of features is invalid.
3116-
 ENOENT    a features bit specified is unknown.
3115+
EINVAL the target is unknown, or the combination of features is invalid.
3116+
ENOENT a features bit specified is unknown.
31173117
====== =================================================================
31183118

31193119
This tells KVM what type of CPU to present to the guest, and what
3120-
optional features it should have.  This will cause a reset of the cpu
3121-
registers to their initial values.  If this is not called, KVM_RUN will
3120+
optional features it should have. This will cause a reset of the cpu
3121+
registers to their initial values. If this is not called, KVM_RUN will
31223122
return ENOEXEC for that vcpu.
31233123

31243124
The initial values are defined as:
@@ -3239,8 +3239,8 @@ VCPU matching underlying host.
32393239
Errors:
32403240

32413241
===== ==============================================================
3242-
 E2BIG     the reg index list is too big to fit in the array specified by
3243-
            the user (the number required will be written into n).
3242+
E2BIG the reg index list is too big to fit in the array specified by
3243+
the user (the number required will be written into n).
32443244
===== ==============================================================
32453245

32463246
::
@@ -3288,7 +3288,7 @@ specific device.
32883288
ARM/arm64 divides the id field into two parts, a device id and an
32893289
address type id specific to the individual device::
32903290

3291-
 bits: | 63 ... 32 | 31 ... 16 | 15 ... 0 |
3291+
bits: | 63 ... 32 | 31 ... 16 | 15 ... 0 |
32923292
field: | 0x00000000 | device id | addr type id |
32933293

32943294
ARM/arm64 currently only require this when using the in-kernel GIC
@@ -7049,7 +7049,7 @@ In combination with KVM_CAP_X86_USER_SPACE_MSR, this allows user space to
70497049
trap and emulate MSRs that are outside of the scope of KVM as well as
70507050
limit the attack surface on KVM's MSR emulation code.
70517051

7052-
8.28 KVM_CAP_ENFORCE_PV_CPUID
7052+
8.28 KVM_CAP_ENFORCE_PV_FEATURE_CPUID
70537053
-----------------------------
70547054

70557055
Architectures: x86

arch/arm64/kvm/mmu.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -947,7 +947,7 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa,
947947
vma_shift = get_vma_page_shift(vma, hva);
948948
}
949949

950-
shared = (vma->vm_flags & VM_PFNMAP);
950+
shared = (vma->vm_flags & VM_SHARED);
951951

952952
switch (vma_shift) {
953953
#ifndef __PAGETABLE_PMD_FOLDED

arch/s390/include/asm/kvm_host.h

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -445,15 +445,15 @@ struct kvm_vcpu_stat {
445445
u64 instruction_sigp_init_cpu_reset;
446446
u64 instruction_sigp_cpu_reset;
447447
u64 instruction_sigp_unknown;
448-
u64 diagnose_10;
449-
u64 diagnose_44;
450-
u64 diagnose_9c;
451-
u64 diagnose_9c_ignored;
452-
u64 diagnose_9c_forward;
453-
u64 diagnose_258;
454-
u64 diagnose_308;
455-
u64 diagnose_500;
456-
u64 diagnose_other;
448+
u64 instruction_diagnose_10;
449+
u64 instruction_diagnose_44;
450+
u64 instruction_diagnose_9c;
451+
u64 diag_9c_ignored;
452+
u64 diag_9c_forward;
453+
u64 instruction_diagnose_258;
454+
u64 instruction_diagnose_308;
455+
u64 instruction_diagnose_500;
456+
u64 instruction_diagnose_other;
457457
u64 pfault_sync;
458458
};
459459

arch/s390/kvm/diag.c

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ static int diag_release_pages(struct kvm_vcpu *vcpu)
2424

2525
start = vcpu->run->s.regs.gprs[(vcpu->arch.sie_block->ipa & 0xf0) >> 4];
2626
end = vcpu->run->s.regs.gprs[vcpu->arch.sie_block->ipa & 0xf] + PAGE_SIZE;
27-
vcpu->stat.diagnose_10++;
27+
vcpu->stat.instruction_diagnose_10++;
2828

2929
if (start & ~PAGE_MASK || end & ~PAGE_MASK || start >= end
3030
|| start < 2 * PAGE_SIZE)
@@ -74,7 +74,7 @@ static int __diag_page_ref_service(struct kvm_vcpu *vcpu)
7474

7575
VCPU_EVENT(vcpu, 3, "diag page reference parameter block at 0x%llx",
7676
vcpu->run->s.regs.gprs[rx]);
77-
vcpu->stat.diagnose_258++;
77+
vcpu->stat.instruction_diagnose_258++;
7878
if (vcpu->run->s.regs.gprs[rx] & 7)
7979
return kvm_s390_inject_program_int(vcpu, PGM_SPECIFICATION);
8080
rc = read_guest(vcpu, vcpu->run->s.regs.gprs[rx], rx, &parm, sizeof(parm));
@@ -145,7 +145,7 @@ static int __diag_page_ref_service(struct kvm_vcpu *vcpu)
145145
static int __diag_time_slice_end(struct kvm_vcpu *vcpu)
146146
{
147147
VCPU_EVENT(vcpu, 5, "%s", "diag time slice end");
148-
vcpu->stat.diagnose_44++;
148+
vcpu->stat.instruction_diagnose_44++;
149149
kvm_vcpu_on_spin(vcpu, true);
150150
return 0;
151151
}
@@ -169,7 +169,7 @@ static int __diag_time_slice_end_directed(struct kvm_vcpu *vcpu)
169169
int tid;
170170

171171
tid = vcpu->run->s.regs.gprs[(vcpu->arch.sie_block->ipa & 0xf0) >> 4];
172-
vcpu->stat.diagnose_9c++;
172+
vcpu->stat.instruction_diagnose_9c++;
173173

174174
/* yield to self */
175175
if (tid == vcpu->vcpu_id)
@@ -192,7 +192,7 @@ static int __diag_time_slice_end_directed(struct kvm_vcpu *vcpu)
192192
VCPU_EVENT(vcpu, 5,
193193
"diag time slice end directed to %d: yield forwarded",
194194
tid);
195-
vcpu->stat.diagnose_9c_forward++;
195+
vcpu->stat.diag_9c_forward++;
196196
return 0;
197197
}
198198

@@ -203,7 +203,7 @@ static int __diag_time_slice_end_directed(struct kvm_vcpu *vcpu)
203203
return 0;
204204
no_yield:
205205
VCPU_EVENT(vcpu, 5, "diag time slice end directed to %d: ignored", tid);
206-
vcpu->stat.diagnose_9c_ignored++;
206+
vcpu->stat.diag_9c_ignored++;
207207
return 0;
208208
}
209209

@@ -213,7 +213,7 @@ static int __diag_ipl_functions(struct kvm_vcpu *vcpu)
213213
unsigned long subcode = vcpu->run->s.regs.gprs[reg] & 0xffff;
214214

215215
VCPU_EVENT(vcpu, 3, "diag ipl functions, subcode %lx", subcode);
216-
vcpu->stat.diagnose_308++;
216+
vcpu->stat.instruction_diagnose_308++;
217217
switch (subcode) {
218218
case 3:
219219
vcpu->run->s390_reset_flags = KVM_S390_RESET_CLEAR;
@@ -245,7 +245,7 @@ static int __diag_virtio_hypercall(struct kvm_vcpu *vcpu)
245245
{
246246
int ret;
247247

248-
vcpu->stat.diagnose_500++;
248+
vcpu->stat.instruction_diagnose_500++;
249249
/* No virtio-ccw notification? Get out quickly. */
250250
if (!vcpu->kvm->arch.css_support ||
251251
(vcpu->run->s.regs.gprs[1] != KVM_S390_VIRTIO_CCW_NOTIFY))
@@ -299,7 +299,7 @@ int kvm_s390_handle_diag(struct kvm_vcpu *vcpu)
299299
case 0x500:
300300
return __diag_virtio_hypercall(vcpu);
301301
default:
302-
vcpu->stat.diagnose_other++;
302+
vcpu->stat.instruction_diagnose_other++;
303303
return -EOPNOTSUPP;
304304
}
305305
}

arch/s390/kvm/kvm-s390.c

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -163,15 +163,15 @@ const struct _kvm_stats_desc kvm_vcpu_stats_desc[] = {
163163
STATS_DESC_COUNTER(VCPU, instruction_sigp_init_cpu_reset),
164164
STATS_DESC_COUNTER(VCPU, instruction_sigp_cpu_reset),
165165
STATS_DESC_COUNTER(VCPU, instruction_sigp_unknown),
166-
STATS_DESC_COUNTER(VCPU, diagnose_10),
167-
STATS_DESC_COUNTER(VCPU, diagnose_44),
168-
STATS_DESC_COUNTER(VCPU, diagnose_9c),
169-
STATS_DESC_COUNTER(VCPU, diagnose_9c_ignored),
170-
STATS_DESC_COUNTER(VCPU, diagnose_9c_forward),
171-
STATS_DESC_COUNTER(VCPU, diagnose_258),
172-
STATS_DESC_COUNTER(VCPU, diagnose_308),
173-
STATS_DESC_COUNTER(VCPU, diagnose_500),
174-
STATS_DESC_COUNTER(VCPU, diagnose_other),
166+
STATS_DESC_COUNTER(VCPU, instruction_diagnose_10),
167+
STATS_DESC_COUNTER(VCPU, instruction_diagnose_44),
168+
STATS_DESC_COUNTER(VCPU, instruction_diagnose_9c),
169+
STATS_DESC_COUNTER(VCPU, diag_9c_ignored),
170+
STATS_DESC_COUNTER(VCPU, diag_9c_forward),
171+
STATS_DESC_COUNTER(VCPU, instruction_diagnose_258),
172+
STATS_DESC_COUNTER(VCPU, instruction_diagnose_308),
173+
STATS_DESC_COUNTER(VCPU, instruction_diagnose_500),
174+
STATS_DESC_COUNTER(VCPU, instruction_diagnose_other),
175175
STATS_DESC_COUNTER(VCPU, pfault_sync)
176176
};
177177
static_assert(ARRAY_SIZE(kvm_vcpu_stats_desc) ==

arch/x86/kvm/ioapic.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ static unsigned long ioapic_read_indirect(struct kvm_ioapic *ioapic,
9696
static void rtc_irq_eoi_tracking_reset(struct kvm_ioapic *ioapic)
9797
{
9898
ioapic->rtc_status.pending_eoi = 0;
99-
bitmap_zero(ioapic->rtc_status.dest_map.map, KVM_MAX_VCPU_ID);
99+
bitmap_zero(ioapic->rtc_status.dest_map.map, KVM_MAX_VCPU_ID + 1);
100100
}
101101

102102
static void kvm_rtc_eoi_tracking_restore_all(struct kvm_ioapic *ioapic);

arch/x86/kvm/ioapic.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,13 +43,13 @@ struct kvm_vcpu;
4343

4444
struct dest_map {
4545
/* vcpu bitmap where IRQ has been sent */
46-
DECLARE_BITMAP(map, KVM_MAX_VCPU_ID);
46+
DECLARE_BITMAP(map, KVM_MAX_VCPU_ID + 1);
4747

4848
/*
4949
* Vector sent to a given vcpu, only valid when
5050
* the vcpu's bit in map is set
5151
*/
52-
u8 vectors[KVM_MAX_VCPU_ID];
52+
u8 vectors[KVM_MAX_VCPU_ID + 1];
5353
};
5454

5555

arch/x86/kvm/svm/avic.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -646,7 +646,7 @@ static int svm_set_pi_irte_mode(struct kvm_vcpu *vcpu, bool activate)
646646
void svm_refresh_apicv_exec_ctrl(struct kvm_vcpu *vcpu)
647647
{
648648
struct vcpu_svm *svm = to_svm(vcpu);
649-
struct vmcb *vmcb = svm->vmcb;
649+
struct vmcb *vmcb = svm->vmcb01.ptr;
650650
bool activated = kvm_vcpu_apicv_active(vcpu);
651651

652652
if (!enable_apicv)

arch/x86/kvm/svm/nested.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -515,7 +515,7 @@ static void nested_vmcb02_prepare_control(struct vcpu_svm *svm)
515515
* Also covers avic_vapic_bar, avic_backing_page, avic_logical_id,
516516
* avic_physical_id.
517517
*/
518-
WARN_ON(svm->vmcb01.ptr->control.int_ctl & AVIC_ENABLE_MASK);
518+
WARN_ON(kvm_apicv_activated(svm->vcpu.kvm));
519519

520520
/* Copied from vmcb01. msrpm_base can be overwritten later. */
521521
svm->vmcb->control.nested_ctl = svm->vmcb01.ptr->control.nested_ctl;
@@ -702,8 +702,8 @@ int nested_svm_vmrun(struct kvm_vcpu *vcpu)
702702
}
703703

704704
/* Copy state save area fields which are handled by VMRUN */
705-
void svm_copy_vmrun_state(struct vmcb_save_area *from_save,
706-
struct vmcb_save_area *to_save)
705+
void svm_copy_vmrun_state(struct vmcb_save_area *to_save,
706+
struct vmcb_save_area *from_save)
707707
{
708708
to_save->es = from_save->es;
709709
to_save->cs = from_save->cs;
@@ -722,7 +722,7 @@ void svm_copy_vmrun_state(struct vmcb_save_area *from_save,
722722
to_save->cpl = 0;
723723
}
724724

725-
void nested_svm_vmloadsave(struct vmcb *from_vmcb, struct vmcb *to_vmcb)
725+
void svm_copy_vmloadsave_state(struct vmcb *to_vmcb, struct vmcb *from_vmcb)
726726
{
727727
to_vmcb->save.fs = from_vmcb->save.fs;
728728
to_vmcb->save.gs = from_vmcb->save.gs;
@@ -1385,7 +1385,7 @@ static int svm_set_nested_state(struct kvm_vcpu *vcpu,
13851385

13861386
svm->nested.vmcb12_gpa = kvm_state->hdr.svm.vmcb_pa;
13871387

1388-
svm_copy_vmrun_state(save, &svm->vmcb01.ptr->save);
1388+
svm_copy_vmrun_state(&svm->vmcb01.ptr->save, save);
13891389
nested_load_control_from_vmcb12(svm, ctl);
13901390

13911391
svm_switch_vmcb(svm, &svm->nested.vmcb02);

arch/x86/kvm/svm/svm.c

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1406,8 +1406,6 @@ static int svm_create_vcpu(struct kvm_vcpu *vcpu)
14061406
goto error_free_vmsa_page;
14071407
}
14081408

1409-
svm_vcpu_init_msrpm(vcpu, svm->msrpm);
1410-
14111409
svm->vmcb01.ptr = page_address(vmcb01_page);
14121410
svm->vmcb01.pa = __sme_set(page_to_pfn(vmcb01_page) << PAGE_SHIFT);
14131411

@@ -1419,6 +1417,8 @@ static int svm_create_vcpu(struct kvm_vcpu *vcpu)
14191417
svm_switch_vmcb(svm, &svm->vmcb01);
14201418
init_vmcb(vcpu);
14211419

1420+
svm_vcpu_init_msrpm(vcpu, svm->msrpm);
1421+
14221422
svm_init_osvw(vcpu);
14231423
vcpu->arch.microcode_version = 0x01000065;
14241424

@@ -1568,8 +1568,11 @@ static void svm_set_vintr(struct vcpu_svm *svm)
15681568
{
15691569
struct vmcb_control_area *control;
15701570

1571-
/* The following fields are ignored when AVIC is enabled */
1572-
WARN_ON(kvm_vcpu_apicv_active(&svm->vcpu));
1571+
/*
1572+
* The following fields are ignored when AVIC is enabled
1573+
*/
1574+
WARN_ON(kvm_apicv_activated(svm->vcpu.kvm));
1575+
15731576
svm_set_intercept(svm, INTERCEPT_VINTR);
15741577

15751578
/*
@@ -2147,11 +2150,12 @@ static int vmload_vmsave_interception(struct kvm_vcpu *vcpu, bool vmload)
21472150
ret = kvm_skip_emulated_instruction(vcpu);
21482151

21492152
if (vmload) {
2150-
nested_svm_vmloadsave(vmcb12, svm->vmcb);
2153+
svm_copy_vmloadsave_state(svm->vmcb, vmcb12);
21512154
svm->sysenter_eip_hi = 0;
21522155
svm->sysenter_esp_hi = 0;
2153-
} else
2154-
nested_svm_vmloadsave(svm->vmcb, vmcb12);
2156+
} else {
2157+
svm_copy_vmloadsave_state(vmcb12, svm->vmcb);
2158+
}
21552159

21562160
kvm_vcpu_unmap(vcpu, &map, true);
21572161

@@ -4344,8 +4348,8 @@ static int svm_enter_smm(struct kvm_vcpu *vcpu, char *smstate)
43444348

43454349
BUILD_BUG_ON(offsetof(struct vmcb, save) != 0x400);
43464350

4347-
svm_copy_vmrun_state(&svm->vmcb01.ptr->save,
4348-
map_save.hva + 0x400);
4351+
svm_copy_vmrun_state(map_save.hva + 0x400,
4352+
&svm->vmcb01.ptr->save);
43494353

43504354
kvm_vcpu_unmap(vcpu, &map_save, true);
43514355
}
@@ -4393,8 +4397,8 @@ static int svm_leave_smm(struct kvm_vcpu *vcpu, const char *smstate)
43934397
&map_save) == -EINVAL)
43944398
return 1;
43954399

4396-
svm_copy_vmrun_state(map_save.hva + 0x400,
4397-
&svm->vmcb01.ptr->save);
4400+
svm_copy_vmrun_state(&svm->vmcb01.ptr->save,
4401+
map_save.hva + 0x400);
43984402

43994403
kvm_vcpu_unmap(vcpu, &map_save, true);
44004404
}

arch/x86/kvm/svm/svm.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -464,9 +464,9 @@ void svm_leave_nested(struct vcpu_svm *svm);
464464
void svm_free_nested(struct vcpu_svm *svm);
465465
int svm_allocate_nested(struct vcpu_svm *svm);
466466
int nested_svm_vmrun(struct kvm_vcpu *vcpu);
467-
void svm_copy_vmrun_state(struct vmcb_save_area *from_save,
468-
struct vmcb_save_area *to_save);
469-
void nested_svm_vmloadsave(struct vmcb *from_vmcb, struct vmcb *to_vmcb);
467+
void svm_copy_vmrun_state(struct vmcb_save_area *to_save,
468+
struct vmcb_save_area *from_save);
469+
void svm_copy_vmloadsave_state(struct vmcb *to_vmcb, struct vmcb *from_vmcb);
470470
int nested_svm_vmexit(struct vcpu_svm *svm);
471471

472472
static inline int nested_svm_simple_vmexit(struct vcpu_svm *svm, u32 exit_code)

arch/x86/kvm/svm/svm_onhyperv.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ static inline void svm_hv_vmcb_dirty_nested_enlightenments(
8989
* as we mark it dirty unconditionally towards end of vcpu
9090
* init phase.
9191
*/
92-
if (vmcb && vmcb_is_clean(vmcb, VMCB_HV_NESTED_ENLIGHTENMENTS) &&
92+
if (vmcb_is_clean(vmcb, VMCB_HV_NESTED_ENLIGHTENMENTS) &&
9393
hve->hv_enlightenments_control.msr_bitmap)
9494
vmcb_mark_dirty(vmcb, VMCB_HV_NESTED_ENLIGHTENMENTS);
9595
}

0 commit comments

Comments
 (0)