2
0
mirror of https://github.com/edk2-porting/linux-next.git synced 2024-12-28 23:23:55 +08:00
linux-next/arch
Tao Xu e69e72faa3 KVM: x86: Add support for user wait instructions
UMONITOR, UMWAIT and TPAUSE are a set of user wait instructions.
This patch adds support for user wait instructions in KVM. Availability
of the user wait instructions is indicated by the presence of the CPUID
feature flag WAITPKG CPUID.0x07.0x0:ECX[5]. User wait instructions may
be executed at any privilege level, and use 32bit IA32_UMWAIT_CONTROL MSR
to set the maximum time.

The behavior of user wait instructions in VMX non-root operation is
determined first by the setting of the "enable user wait and pause"
secondary processor-based VM-execution control bit 26.
	If the VM-execution control is 0, UMONITOR/UMWAIT/TPAUSE cause
an invalid-opcode exception (#UD).
	If the VM-execution control is 1, treatment is based on the
setting of the “RDTSC exiting†VM-execution control. Because KVM never
enables RDTSC exiting, 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. If
IA32_UMWAIT_CONTROL[31:2] is zero, the virtual delay is the value in
EDX:EAX minus the value that RDTSC would return; if
IA32_UMWAIT_CONTROL[31:2] is not zero, the virtual delay is the minimum
of that difference and AND(IA32_UMWAIT_CONTROL,FFFFFFFCH).

Because umwait and tpause can put a (psysical) CPU into a power saving
state, by default we dont't expose it to kvm and enable it only when
guest CPUID has it.

Detailed information about user wait instructions can be found in the
latest Intel 64 and IA-32 Architectures Software Developer's Manual.

Co-developed-by: Jingqi Liu <jingqi.liu@intel.com>
Signed-off-by: Jingqi Liu <jingqi.liu@intel.com>
Signed-off-by: Tao Xu <tao3.xu@intel.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2019-09-24 14:34:20 +02:00
..
alpha Kbuild updates for v5.4 2019-09-20 08:36:47 -07:00
arc Kbuild updates for v5.4 2019-09-20 08:36:47 -07:00
arm pci-v5.4-changes 2019-09-23 19:16:01 -07:00
arm64 pci-v5.4-changes 2019-09-23 19:16:01 -07:00
c6x dma-mapping: remove CONFIG_ARCH_NO_COHERENT_DMA_MMAP 2019-09-04 11:13:18 +02:00
csky hmm related patches for 5.4 2019-09-21 10:07:42 -07:00
h8300 h8300 update for 5.3 2019-07-17 09:36:38 -07:00
hexagon hexagon: switch to generic version of pte allocation 2019-07-21 09:53:00 -07:00
ia64 Kbuild updates for v5.4 2019-09-20 08:36:47 -07:00
m68k Modules updates for v5.4 2019-09-22 10:34:46 -07:00
microblaze pci-v5.4-changes 2019-09-23 19:16:01 -07:00
mips pci-v5.4-changes 2019-09-23 19:16:01 -07:00
nds32 dma-mapping updates for 5.4: 2019-09-19 13:27:23 -07:00
nios2 nios2 update for v5.3-rc1 2019-07-12 15:38:05 -07:00
openrisc hmm related patches for 5.4 2019-09-21 10:07:42 -07:00
parisc Kbuild updates for v5.4 2019-09-20 08:36:47 -07:00
powerpc pci-v5.4-changes 2019-09-23 19:16:01 -07:00
riscv Kbuild updates for v5.4 2019-09-20 08:36:47 -07:00
s390 hmm related patches for 5.4 2019-09-21 10:07:42 -07:00
sh dma-mapping updates for 5.4: 2019-09-19 13:27:23 -07:00
sparc pci-v5.4-changes 2019-09-23 19:16:01 -07:00
um This pull request contains the following changes for UML: 2019-09-21 11:07:02 -07:00
unicore32 dma-mapping updates for 5.4: 2019-09-19 13:27:23 -07:00
x86 KVM: x86: Add support for user wait instructions 2019-09-24 14:34:20 +02:00
xtensa dma-mapping updates for 5.4: 2019-09-19 13:27:23 -07:00
.gitignore
Kconfig powerpc updates for 5.4 2019-09-20 11:48:06 -07:00