x86/delay: Introduce TPAUSE delay
authorKyung Min Park <kyung.min.park@intel.com>
Fri, 24 Apr 2020 19:37:56 +0000 (12:37 -0700)
committerThomas Gleixner <tglx@linutronix.de>
Thu, 7 May 2020 14:06:20 +0000 (16:06 +0200)
commitcec5f268cd02d25d2d74807843d8ae0292fe0fb7
tree917947f6e242b5f1c21e136cf3916dd09c3473ce
parent46f90c7aad62be1af76588108c730d826308a801
x86/delay: Introduce TPAUSE delay

TPAUSE instructs the processor to enter an implementation-dependent
optimized state. The instruction execution wakes up when the time-stamp
counter reaches or exceeds the implicit EDX:EAX 64-bit input value.
The instruction execution also wakes up due to the expiration of
the operating system time-limit or by an external interrupt
or exceptions such as a debug exception or a machine check exception.

TPAUSE offers a choice of two lower power states:
 1. Light-weight power/performance optimized state C0.1
 2. Improved power/performance optimized state C0.2

This way, it can save power with low wake-up latency in comparison to
spinloop based delay. The selection between the two is governed by the
input register.

TPAUSE is available on processors with X86_FEATURE_WAITPKG.

Co-developed-by: Fenghua Yu <fenghua.yu@intel.com>
Signed-off-by: Fenghua Yu <fenghua.yu@intel.com>
Signed-off-by: Kyung Min Park <kyung.min.park@intel.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Tony Luck <tony.luck@intel.com>
Link: https://lkml.kernel.org/r/1587757076-30337-4-git-send-email-kyung.min.park@intel.com
arch/x86/Kconfig.assembler
arch/x86/include/asm/delay.h
arch/x86/include/asm/mwait.h
arch/x86/kernel/time.c
arch/x86/lib/delay.c