x86/elf: Add HWCAP2 to expose ring 3 MONITOR/MWAIT
authorGrzegorz Andrejczuk <grzegorz.andrejczuk@intel.com>
Fri, 20 Jan 2017 13:22:34 +0000 (14:22 +0100)
committerThomas Gleixner <tglx@linutronix.de>
Sat, 4 Feb 2017 07:51:09 +0000 (08:51 +0100)
commit0274f9551eff55dbd63b5f5f3efe30fe5d4c801c
tree138572ec24630ee131d41911b2abb9df1d82dd49
parentae47eda905e61ef6ba0b6f79b967c9de15ca4f8e
x86/elf: Add HWCAP2 to expose ring 3 MONITOR/MWAIT

Introduce ELF_HWCAP2 variable for x86 and reserve its bit 0 to expose the
ring 3 MONITOR/MWAIT.

HWCAP variables contain bitmasks which can be used by userspace
applications to detect which instruction sets are supported by CPU.  On x86
architecture information about CPU capabilities can be checked via CPUID
instructions, unfortunately presence of ring 3 MONITOR/MWAIT feature cannot
be checked this way. ELF_HWCAP cannot be used as well, because on x86 it is
set to CPUID[1].EDX which means that all bits are reserved there.

HWCAP2 approach was chosen because it reuses existing solution present
in other architectures, so only minor modifications are required to the
kernel and userspace applications. When ELF_HWCAP2 is defined
kernel maps it to AT_HWCAP2 during the start of the application.
This way the ring 3 MONITOR/MWAIT feature can be detected using getauxval()
API in a simple and fast manner. ELF_HWCAP2 type is u32 to be consistent
with x86 ELF_HWCAP type.

Signed-off-by: Grzegorz Andrejczuk <grzegorz.andrejczuk@intel.com>
Cc: Piotr.Luc@intel.com
Cc: dave.hansen@linux.intel.com
Link: http://lkml.kernel.org/r/1484918557-15481-3-git-send-email-grzegorz.andrejczuk@intel.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
arch/x86/include/asm/elf.h
arch/x86/include/uapi/asm/hwcap2.h [new file with mode: 0644]
arch/x86/kernel/cpu/common.c