On Fri, 24 May 2019 16:18:38 +0800 Tao Xu <tao3.xu@xxxxxxxxx> wrote: > UMONITOR, UMWAIT and TPAUSE are a set of user wait instructions. > Availability of the user wait instructions is indicated by the presence > of the CPUID feature flag WAITPKG CPUID.0x07.0x0:ECX[5]. > > The patch enable the umonitor, umwait and tpause features in KVM. > Because umwait and tpause can put a (psysical) CPU into a power saving > state, by default we dont't expose it in kvm and provide a capability to > enable it. Use kvm capability to enable UMONITOR, UMWAIT and TPAUSE when > QEMU use "-overcommit cpu-pm=on, a VM can use UMONITOR, UMWAIT and TPAUSE > instructions. If the instruction causes a delay, the amount of time > delayed is called here the physical delay. The physical delay is first > computed by determining the virtual delay (the time to delay relative to > the VM’s timestamp counter). Otherwise, UMONITOR, UMWAIT and TPAUSE cause > an invalid-opcode exception(#UD). > > The release document ref below link: > https://software.intel.com/sites/default/files/\ > managed/39/c5/325462-sdm-vol-1-2abcd-3abcd.pdf > > Co-developed-by: Jingqi Liu <jingqi.liu@xxxxxxxxx> > Signed-off-by: Jingqi Liu <jingqi.liu@xxxxxxxxx> > Signed-off-by: Tao Xu <tao3.xu@xxxxxxxxx> > --- > linux-headers/linux/kvm.h | 1 + > target/i386/cpu.c | 3 ++- > target/i386/cpu.h | 1 + > target/i386/kvm.c | 13 +++++++++++++ > 4 files changed, 17 insertions(+), 1 deletion(-) > > diff --git a/linux-headers/linux/kvm.h b/linux-headers/linux/kvm.h > index c8423e760c..86cc2dbdd0 100644 > --- a/linux-headers/linux/kvm.h > +++ b/linux-headers/linux/kvm.h > @@ -993,6 +993,7 @@ struct kvm_ppc_resize_hpt { > #define KVM_CAP_ARM_SVE 170 > #define KVM_CAP_ARM_PTRAUTH_ADDRESS 171 > #define KVM_CAP_ARM_PTRAUTH_GENERIC 172 > +#define KVM_CAP_ENABLE_USR_WAIT_PAUSE 173 > > #ifdef KVM_CAP_IRQ_ROUTING > No comment on the actual change, but please split out any linux-header changes so they can be replaced with a proper headers update when the code is merged.