On 21/05/19 08:17, Wanpeng Li wrote: > From: Wanpeng Li <wanpengli@xxxxxxxxxxx> > > Allow guest reads CORE cstate when exposing host CPU power management capabilities > to the guest. PKG cstate is restricted to avoid a guest to get the whole package > information in multi-tenant scenario. > > Cc: Eduardo Habkost <ehabkost@xxxxxxxxxx> > Cc: Paolo Bonzini <pbonzini@xxxxxxxxxx> > Cc: Radim Krčmář <rkrcmar@xxxxxxxxxx> > Signed-off-by: Wanpeng Li <wanpengli@xxxxxxxxxxx> > --- > linux-headers/linux/kvm.h | 4 +++- > target/i386/kvm.c | 3 ++- > 2 files changed, 5 insertions(+), 2 deletions(-) > > diff --git a/linux-headers/linux/kvm.h b/linux-headers/linux/kvm.h > index b53ee59..d648fde 100644 > --- a/linux-headers/linux/kvm.h > +++ b/linux-headers/linux/kvm.h > @@ -696,9 +696,11 @@ struct kvm_ioeventfd { > #define KVM_X86_DISABLE_EXITS_MWAIT (1 << 0) > #define KVM_X86_DISABLE_EXITS_HLT (1 << 1) > #define KVM_X86_DISABLE_EXITS_PAUSE (1 << 2) > +#define KVM_X86_DISABLE_EXITS_CSTATE (1 << 3) > #define KVM_X86_DISABLE_VALID_EXITS (KVM_X86_DISABLE_EXITS_MWAIT | \ > KVM_X86_DISABLE_EXITS_HLT | \ > - KVM_X86_DISABLE_EXITS_PAUSE) > + KVM_X86_DISABLE_EXITS_PAUSE | \ > + KVM_X86_DISABLE_EXITS_CSTATE) > > /* for KVM_ENABLE_CAP */ > struct kvm_enable_cap { > diff --git a/target/i386/kvm.c b/target/i386/kvm.c > index 3b29ce5..49a0cc1 100644 > --- a/target/i386/kvm.c > +++ b/target/i386/kvm.c > @@ -1645,7 +1645,8 @@ int kvm_arch_init(MachineState *ms, KVMState *s) > if (disable_exits) { > disable_exits &= (KVM_X86_DISABLE_EXITS_MWAIT | > KVM_X86_DISABLE_EXITS_HLT | > - KVM_X86_DISABLE_EXITS_PAUSE); > + KVM_X86_DISABLE_EXITS_PAUSE | > + KVM_X86_DISABLE_EXITS_CSTATE); > } > > ret = kvm_vm_enable_cap(s, KVM_CAP_X86_DISABLE_EXITS, 0, > Hi, instead of this, with the new design I've proposed QEMU will have to save/restore the MSRs, but otherwise no change is needed to kvm_arch_init and to the KVM headers. Paolo