lkml.org 
[lkml]   [2019]   [Aug]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH 3.16 055/157] kvm: x86: IA32_ARCH_CAPABILITIES is always supported
    3.16.72-rc1 review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Jim Mattson <jmattson@google.com>

    commit 1eaafe91a0df4157521b6417b3dd8430bf5f52f0 upstream.

    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>
    Fixes: 28c1c9fabf48 ("KVM/VMX: Emulate MSR_IA32_ARCH_CAPABILITIES")
    Signed-off-by: Radim Krčmář <rkrcmar@redhat.com>
    [bwh: Backported to 3.16: adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
    ---
    arch/x86/kvm/cpuid.c | 5 +++++
    1 file changed, 5 insertions(+)

    --- a/arch/x86/kvm/cpuid.c
    +++ b/arch/x86/kvm/cpuid.c
    @@ -395,6 +395,11 @@ static inline int __do_cpuid_ent(struct
    entry->ebx |= F(TSC_ADJUST);
    entry->edx &= kvm_cpuid_7_0_edx_x86_features;
    cpuid_mask(&entry->edx, 10);
    + /*
    + * We emulate ARCH_CAPABILITIES in software even
    + * if the host doesn't support it.
    + */
    + entry->edx |= F(ARCH_CAPABILITIES);
    } else {
    entry->ebx = 0;
    entry->edx = 0;
    \
     
     \ /
      Last update: 2019-08-10 22:52    [W:8.909 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site