Add the ppc_capabilities ELF note to the powerpc kernel binary. It is a bitmap that can be used to advertise kernel capabilities to userland. This patch also defines PPCCAP_ULTRAVISOR_BIT as being the bit zero. Suggested-by: Paul Mackerras <paulus@xxxxxxxxxx> Signed-off-by: Claudio Carvalho <cclaudio@xxxxxxxxxxxxx> --- arch/powerpc/kernel/Makefile | 2 +- arch/powerpc/kernel/note.S | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 arch/powerpc/kernel/note.S diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile index 0ea6c4aa3a20..4ec36fe4325b 100644 --- a/arch/powerpc/kernel/Makefile +++ b/arch/powerpc/kernel/Makefile @@ -49,7 +49,7 @@ obj-y := cputable.o ptrace.o syscalls.o \ signal.o sysfs.o cacheinfo.o time.o \ prom.o traps.o setup-common.o \ udbg.o misc.o io.o misc_$(BITS).o \ - of_platform.o prom_parse.o + of_platform.o prom_parse.o note.o obj-$(CONFIG_PPC64) += setup_64.o sys_ppc32.o \ signal_64.o ptrace32.o \ paca.o nvram_64.o firmware.o diff --git a/arch/powerpc/kernel/note.S b/arch/powerpc/kernel/note.S new file mode 100644 index 000000000000..721bf8ce9eb7 --- /dev/null +++ b/arch/powerpc/kernel/note.S @@ -0,0 +1,36 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * PowerPC ELF notes. + * + * Copyright 2019, IBM Corporation + */ +#include <linux/elfnote.h> + +/* + * Ultravisor-capable bit (PowerNV only). + * + * Indicate that the powerpc kernel binary knows how to run in an + * ultravisor-enabled system. + * + * In an ultravisor-enabled system, some machine resources are now controlled + * by the ultravisor. If the kernel is not ultravisor-capable, but it ends up + * being run on a machine with ultravisor, the kernel will probably crash + * trying to access ultravisor resources. For instance, it may crash in early + * boot trying to set the partition table entry 0. + * + * In an ultravisor-enabled system, petitboot can warn the user or prevent the + * kernel from being run if the ppc_capabilities doesn't exist or the + * Ultravisor-capable bit is not set. + */ +#if defined(CONFIG_PPC_POWERNV) +#define PPCCAP_ULTRAVISOR_BIT (1 << 0) +#else +#define PPCCAP_ULTRAVISOR_BIT 0 +#endif + +/* + * Add the ppc_capabilities ELF note to the powerpc kernel binary. It is a + * bitmap that can be used to advertise kernel capabilities to userland. + */ +ELFNOTE(ppc_capabilities, 3, + .long PPCCAP_ULTRAVISOR_BIT) -- 2.20.1