diff mbox

[v2] kvm: x86: IA32_ARCH_CAPABILITIES is always supported

Message ID 20180509212935.122395-1-jmattson@google.com (mailing list archive)
State New, archived
Headers show

Commit Message

Jim Mattson May 9, 2018, 9:29 p.m. UTC
If there is a possibility that a VM may migrate to a Skylake host,
then the hypervisor should report IA32_ARCH_CAPABILITIES.RSBA[bit 2]
as being set (future work, of course). This implies that
CPUID.(EAX=7,ECX=0):EDX.ARCH_CAPABILITIES[bit 29] should be
set. Therefore, kvm should report this CPUID bit as being supported
whether or not the host supports it.  Userspace is still free to clear
the bit if it chooses.

For more information on RSBA, see Intel's white paper, "Retpoline: A
Branch Target Injection Mitigation" (Document Number 337131-001),
currently available at https://bugzilla.kernel.org/show_bug.cgi?id=199511.

Since the IA32_ARCH_CAPABILITIES MSR is emulated in kvm, there is no
dependency on hardware support for this feature.

Signed-off-by: Jim Mattson <jmattson@google.com>
Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
---
 arch/x86/kvm/cpuid.c | 5 +++++
 1 file changed, 5 insertions(+)

Comments

Radim Krčmář May 24, 2018, 4:42 p.m. UTC | #1
2018-05-09 14:29-0700, Jim Mattson:
> If there is a possibility that a VM may migrate to a Skylake host,
> then the hypervisor should report IA32_ARCH_CAPABILITIES.RSBA[bit 2]
> as being set (future work, of course). This implies that
> CPUID.(EAX=7,ECX=0):EDX.ARCH_CAPABILITIES[bit 29] should be
> set. Therefore, kvm should report this CPUID bit as being supported
> whether or not the host supports it.  Userspace is still free to clear
> the bit if it chooses.
> 
> For more information on RSBA, see Intel's white paper, "Retpoline: A
> Branch Target Injection Mitigation" (Document Number 337131-001),
> currently available at https://bugzilla.kernel.org/show_bug.cgi?id=199511.
> 
> Since the IA32_ARCH_CAPABILITIES MSR is emulated in kvm, there is no
> dependency on hardware support for this feature.
> 
> Signed-off-by: Jim Mattson <jmattson@google.com>
> Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
> ---

Applied with Cc stable, thanks.
diff mbox

Patch

diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c
index 82055b90a8b3..beadfe6e6893 100644
--- a/arch/x86/kvm/cpuid.c
+++ b/arch/x86/kvm/cpuid.c
@@ -495,6 +495,11 @@  static inline int __do_cpuid_ent(struct kvm_cpuid_entry2 *entry, u32 function,
 				entry->ecx &= ~F(PKU);
 			entry->edx &= kvm_cpuid_7_0_edx_x86_features;
 			cpuid_mask(&entry->edx, CPUID_7_EDX);
+			/*
+			 * We emulate ARCH_CAPABILITIES in software even
+			 * if the host doesn't support it.
+			 */
+			entry->edx |= F(ARCH_CAPABILITIES);
 		} else {
 			entry->ebx = 0;
 			entry->ecx = 0;