[PATCH 5/8] KVM: SVM: Add VMCB fields for PMC virtualization
Sandipan Das <[email protected]>
| Newsgroups | org.kernel.vger.kvm |
|---|---|
| Message-ID | <661393b87a3fc91835cebe5f2149a62d25f46f83.1786345201.git.sandipan.das@amd.com> |
When PMC virtualization (X86_FEATURE_PERFCTR_VIRT) is supported and the feature is enabled, additional save slots are available in the VMCB for the following MSRs. * Performance Counter Global Control (MSR 0xc0000301) (Swap Type C) * Performance Counter Global Status (MSR 0xc0000300) (Swap Type A) * Performance Event Select (MSR 0xc0010200..0xc001020a) (Swap Type C) * Performance Event Counter (MSR 0xc0010201..0xc001020b) (Swap Type C) Define the additional VMCB fields that will be used by hardware to save and restore the guest PMU state. Signed-off-by: Sandipan Das <[email protected]> --- arch/x86/include/asm/svm.h | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/arch/x86/include/asm/svm.h b/arch/x86/include/asm/svm.h index aa63431ba92c..73f17af22d6c 100644 --- a/arch/x86/include/asm/svm.h +++ b/arch/x86/include/asm/svm.h @@ -338,7 +338,12 @@ struct vmcb_save_area { u8 cpl; u8 reserved_0xcc[4]; u64 efer; - u8 reserved_0xd8[112]; + u8 reserved_0xd8[8]; + struct { + u64 perf_ctl; + u64 perf_ctr; + } __packed pmc[6]; + u8 reserved_0x140[8]; u64 cr4; u64 cr3; u64 cr0; @@ -346,7 +351,9 @@ struct vmcb_save_area { u64 dr6; u64 rflags; u64 rip; - u8 reserved_0x180[88]; + u8 reserved_0x180[72]; + u64 perf_cntr_global_status; + u64 perf_cntr_global_control; u64 rsp; u64 s_cet; u64 ssp; @@ -575,6 +582,7 @@ static inline void __unused_size_checks(void) BUILD_BUG_RESERVED_OFFSET(vmcb_save_area, 0xa0); BUILD_BUG_RESERVED_OFFSET(vmcb_save_area, 0xcc); BUILD_BUG_RESERVED_OFFSET(vmcb_save_area, 0xd8); + BUILD_BUG_RESERVED_OFFSET(vmcb_save_area, 0x140); BUILD_BUG_RESERVED_OFFSET(vmcb_save_area, 0x180); BUILD_BUG_RESERVED_OFFSET(vmcb_save_area, 0x248); BUILD_BUG_RESERVED_OFFSET(vmcb_save_area, 0x298); -- 2.53.0