Commit 1fff234d authored by Ard Biesheuvel's avatar Ard Biesheuvel
Browse files

efi: x86: Move EFI runtime map sysfs code to arch/x86



The EFI runtime map code is only wired up on x86, which is the only
architecture that has a need for it in its implementation of kexec.

So let's move this code under arch/x86 and drop all references to it
from generic code. To ensure that the efi_runtime_map_init() is invoked
at the appropriate time use a 'sync' subsys_initcall() that will be
called right after the EFI initcall made from generic code where the
original invocation of efi_runtime_map_init() resided.

Signed-off-by: default avatarArd Biesheuvel <ardb@kernel.org>
Reviewed-by: default avatarDave Young <dyoung@redhat.com>
parent 8dfac4d8
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -2014,6 +2014,17 @@ config EFI_MAX_FAKE_MEM
	  Ranges can be set up to this value using comma-separated list.
	  The default value is 8.

config EFI_RUNTIME_MAP
	bool "Export EFI runtime maps to sysfs" if EXPERT
	depends on EFI
	default KEXEC_CORE
	help
	  Export EFI runtime memory regions to /sys/firmware/efi/runtime-map.
	  That memory map is required by the 2nd kernel to set up EFI virtual
	  mappings after kexec, but can also be used for debugging purposes.

	  See also Documentation/ABI/testing/sysfs-firmware-efi-runtime-map.

source "kernel/Kconfig.hz"

config KEXEC
+22 −0
Original line number Diff line number Diff line
@@ -432,4 +432,26 @@ extern void __init efi_memmap_insert(struct efi_memory_map *old_memmap,
#define arch_ima_efi_boot_mode	\
	({ extern struct boot_params boot_params; boot_params.secure_boot; })

#ifdef CONFIG_EFI_RUNTIME_MAP
int efi_get_runtime_map_size(void);
int efi_get_runtime_map_desc_size(void);
int efi_runtime_map_copy(void *buf, size_t bufsz);
#else
static inline int efi_get_runtime_map_size(void)
{
	return 0;
}

static inline int efi_get_runtime_map_desc_size(void)
{
	return 0;
}

static inline int efi_runtime_map_copy(void *buf, size_t bufsz)
{
	return 0;
}

#endif

#endif /* _ASM_X86_EFI_H */
+1 −0
Original line number Diff line number Diff line
@@ -6,3 +6,4 @@ obj-$(CONFIG_EFI) += memmap.o quirks.o efi.o efi_$(BITS).o \
				   efi_stub_$(BITS).o
obj-$(CONFIG_EFI_MIXED)		+= efi_thunk_$(BITS).o
obj-$(CONFIG_EFI_FAKE_MEMMAP)	+= fake_mem.o
obj-$(CONFIG_EFI_RUNTIME_MAP)	+= runtime-map.o
+4 −3
Original line number Diff line number Diff line
// SPDX-License-Identifier: GPL-2.0
/*
 * linux/drivers/efi/runtime-map.c
 * Copyright (C) 2013 Red Hat, Inc., Dave Young <dyoung@redhat.com>
 */

@@ -11,6 +10,7 @@
#include <linux/efi.h>
#include <linux/slab.h>

#include <asm/efi.h>
#include <asm/setup.h>

struct efi_runtime_map_entry {
@@ -157,13 +157,13 @@ int efi_runtime_map_copy(void *buf, size_t bufsz)
	return 0;
}

int __init efi_runtime_map_init(struct kobject *efi_kobj)
static int __init efi_runtime_map_init(void)
{
	int i, j, ret = 0;
	struct efi_runtime_map_entry *entry;
	efi_memory_desc_t *md;

	if (!efi_enabled(EFI_MEMMAP))
	if (!efi_enabled(EFI_MEMMAP) || !efi_kobj)
		return 0;

	map_entries = kcalloc(efi.memmap.nr_map, sizeof(entry), GFP_KERNEL);
@@ -191,3 +191,4 @@ int __init efi_runtime_map_init(struct kobject *efi_kobj)
out:
	return ret;
}
subsys_initcall_sync(efi_runtime_map_init);
+0 −11
Original line number Diff line number Diff line
@@ -26,17 +26,6 @@ config EFI_VARS_PSTORE_DEFAULT_DISABLE
	  backend for pstore by default. This setting can be overridden
	  using the efivars module's pstore_disable parameter.

config EFI_RUNTIME_MAP
	bool "Export EFI runtime maps to sysfs" if EXPERT
	depends on X86 && EFI
	default KEXEC_CORE
	help
	  Export EFI runtime memory regions to /sys/firmware/efi/runtime-map.
	  That memory map is required by the 2nd kernel to set up EFI virtual
	  mappings after kexec, but can also be used for debugging purposes.

	  See also Documentation/ABI/testing/sysfs-firmware-efi-runtime-map.

config EFI_SOFT_RESERVE
	bool "Reserve EFI Specific Purpose Memory"
	depends on EFI && EFI_STUB && ACPI_HMAT
Loading