• Liran Alon's avatar
    KVM: VMX: Nop emulation of MSR_IA32_POWER_CTL · 6c6a2ab9
    Liran Alon authored
    Since commits 668fffa3 ("kvm: better MWAIT emulation for guestsâ€)
    and 4d5422ce ("KVM: X86: Provide a capability to disable MWAIT interceptsâ€),
    KVM was modified to allow an admin to configure certain guests to execute
    MONITOR/MWAIT inside guest without being intercepted by host.
    
    This is useful in case admin wishes to allocate a dedicated logical
    processor for each vCPU thread. Thus, making it safe for guest to
    completely control the power-state of the logical processor.
    
    The ability to use this new KVM capability was introduced to QEMU by
    commits 6f131f13e68d ("kvm: support -overcommit cpu-pm=on|offâ€) and
    2266d4431132 ("i386/cpu: make -cpu host support monitor/mwaitâ€).
    
    However, exposing MONITOR/MWAIT to a Linux guest may cause it's intel_idle
    kernel module to execute c1e_promotion_disable() which will attempt to
    RDMSR/WRMSR from/to MSR_IA32_POWER_CTL to manipulate the "C1E Enable"
    bit. This behaviour was introduced by commit
    32e95180 ("intel_idle: export both C1 and C1Eâ€).
    
    Becuase KVM doesn't emulate this MSR, running KVM with ignore_msrs=0
    will cause the above guest behaviour to raise a #GP which will cause
    guest to kernel panic.
    
    Therefore, add support for nop emulation of MSR_IA32_POWER_CTL to
    avoid #GP in guest in this scenario.
    
    Future commits can optimise emulation further by reflecting guest
    MSR changes to host MSR to provide guest with the ability to
    fine-tune the dedicated logical processor power-state.
    Reviewed-by: default avatarBoris Ostrovsky <boris.ostrovsky@oracle.com>
    Signed-off-by: default avatarLiran Alon <liran.alon@oracle.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    6c6a2ab9
x86.c 255 KB