summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNiklas Schnelle <schnelle@linux.ibm.com>2021-07-08 16:43:13 +0300
committerHeiko Carstens <hca@linux.ibm.com>2021-07-27 10:39:19 +0300
commit7e8403ecaf884f307b627f3c371475913dd29292 (patch)
tree5ecd9ac93b4b7e5f0308e6a04956a68daf338be7
parent3322ba0d7bea1e24ae464418626f6a15b69533ab (diff)
downloadlinux-7e8403ecaf884f307b627f3c371475913dd29292.tar.xz
s390: add HWCAP_S390_PCI_MIO to ELF hwcaps
In order to support the use of enhanced PCI instructions in both kernel- and userspace we need both hardware support and proper setup in the kernel. The latter can be toggled off with the pci=nomio command line option. Thus availability of this feature in userspace depends on all of kernel configuration (CONFIG_PCI), hardware support and the current kernel command line and can thus not rely solely on a facility bit. Instead let's introduce a new ELF hardware capability bit HWCAP_S390_PCI_MIO to tell userspace whether these PCI instructions can be used. Reviewed-by: Heiko Carstens <hca@linux.ibm.com> Signed-off-by: Niklas Schnelle <schnelle@linux.ibm.com> Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
-rw-r--r--arch/s390/include/asm/elf.h1
-rw-r--r--arch/s390/kernel/processor.c2
-rw-r--r--arch/s390/kernel/setup.c2
3 files changed, 4 insertions, 1 deletions
diff --git a/arch/s390/include/asm/elf.h b/arch/s390/include/asm/elf.h
index 6e55e4a2d6bd..0291d45566a9 100644
--- a/arch/s390/include/asm/elf.h
+++ b/arch/s390/include/asm/elf.h
@@ -113,6 +113,7 @@
#define HWCAP_S390_DFLT 262144
#define HWCAP_S390_VXRS_PDE2 524288
#define HWCAP_S390_NNPA 1048576
+#define HWCAP_S390_PCI_MIO 2097152
/* Internal bits, not exposed via elf */
#define HWCAP_INT_SIE 1UL
diff --git a/arch/s390/kernel/processor.c b/arch/s390/kernel/processor.c
index 9cd63efce1c1..e6c297ec3e1d 100644
--- a/arch/s390/kernel/processor.c
+++ b/arch/s390/kernel/processor.c
@@ -115,7 +115,7 @@ static void show_cpu_summary(struct seq_file *m, void *v)
static const char *hwcap_str[] = {
"esan3", "zarch", "stfle", "msa", "ldisp", "eimm", "dfp",
"edat", "etf3eh", "highgprs", "te", "vx", "vxd", "vxe", "gs",
- "vxe2", "vxp", "sort", "dflt", "vxp2", "nnpa"
+ "vxe2", "vxp", "sort", "dflt", "vxp2", "nnpa", "pcimio"
};
static const char * const int_hwcap_str[] = {
"sie"
diff --git a/arch/s390/kernel/setup.c b/arch/s390/kernel/setup.c
index 32ce8d40b2fb..1c0ab3030801 100644
--- a/arch/s390/kernel/setup.c
+++ b/arch/s390/kernel/setup.c
@@ -964,6 +964,8 @@ static int __init setup_hwcaps(void)
*/
if (MACHINE_HAS_GS)
elf_hwcap |= HWCAP_S390_GS;
+ if (MACHINE_HAS_PCI_MIO)
+ elf_hwcap |= HWCAP_S390_PCI_MIO;
get_cpu_id(&cpu_id);
add_device_randomness(&cpu_id, sizeof(cpu_id));