* [PATCH 0/2] efi/x86: Move runtime map sysfs code into arch/x86
@ 2022-11-07 8:31 Ard Biesheuvel
2022-11-07 8:31 ` [PATCH 1/2] efi: runtime-maps: Clarify purpose and enable by default for kexec Ard Biesheuvel
` (2 more replies)
0 siblings, 3 replies; 5+ messages in thread
From: Ard Biesheuvel @ 2022-11-07 8:31 UTC (permalink / raw)
To: linux-efi; +Cc: dyoung, Ard Biesheuvel
The EFI runtime map code is only used on x86, so let's move it out of
the generic code and into arch/x86. While at it, clarify the Kconfig
description so that it gets enabled automatically when required (i.e.,
when kexec is enabled), and can only be disabled when CONFIG_EXPERT=y
Ard Biesheuvel (2):
efi: runtime-maps: Clarify purpose and enable by default for kexec
efi: x86: Move EFI runtime map sysfs code to arch/x86
arch/x86/Kconfig | 11 ++++++++
arch/x86/include/asm/efi.h | 22 +++++++++++++++
arch/x86/platform/efi/Makefile | 1 +
{drivers/firmware => arch/x86/platform}/efi/runtime-map.c | 6 ++---
drivers/firmware/efi/Kconfig | 11 --------
drivers/firmware/efi/Makefile | 1 -
drivers/firmware/efi/efi.c | 5 +---
include/linux/efi.h | 28 --------------------
8 files changed, 38 insertions(+), 47 deletions(-)
rename {drivers/firmware => arch/x86/platform}/efi/runtime-map.c (97%)
--
2.35.1
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 1/2] efi: runtime-maps: Clarify purpose and enable by default for kexec
2022-11-07 8:31 [PATCH 0/2] efi/x86: Move runtime map sysfs code into arch/x86 Ard Biesheuvel
@ 2022-11-07 8:31 ` Ard Biesheuvel
2022-11-07 8:31 ` [PATCH 2/2] efi: x86: Move EFI runtime map sysfs code to arch/x86 Ard Biesheuvel
2022-11-08 3:46 ` [PATCH 0/2] efi/x86: Move runtime map sysfs code into arch/x86 Dave Young
2 siblings, 0 replies; 5+ messages in thread
From: Ard Biesheuvel @ 2022-11-07 8:31 UTC (permalink / raw)
To: linux-efi; +Cc: dyoung, Ard Biesheuvel
The current Kconfig logic for CONFIG_EFI_RUNTIME_MAPS does not convey
that without it, a kexec kernel is not able to boot in EFI mode at all.
So clarify this, and make the option only configurable via the menu
system if CONFIG_EXPERT is set.
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
---
drivers/firmware/efi/Kconfig | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/drivers/firmware/efi/Kconfig b/drivers/firmware/efi/Kconfig
index 0d5201e4984189bc..552512f211a1f5e7 100644
--- a/drivers/firmware/efi/Kconfig
+++ b/drivers/firmware/efi/Kconfig
@@ -27,13 +27,13 @@ config EFI_VARS_PSTORE_DEFAULT_DISABLE
using the efivars module's pstore_disable parameter.
config EFI_RUNTIME_MAP
- bool "Export efi runtime maps to sysfs"
- depends on X86 && EFI && KEXEC_CORE
- default y
+ bool "Export EFI runtime maps to sysfs" if EXPERT
+ depends on X86 && EFI
+ default KEXEC_CORE
help
- Export efi runtime memory maps to /sys/firmware/efi/runtime-map.
- That memory map is used for example by kexec to set up efi virtual
- mapping the 2nd kernel, but can also be used for debugging purposes.
+ 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.
--
2.35.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 2/2] efi: x86: Move EFI runtime map sysfs code to arch/x86
2022-11-07 8:31 [PATCH 0/2] efi/x86: Move runtime map sysfs code into arch/x86 Ard Biesheuvel
2022-11-07 8:31 ` [PATCH 1/2] efi: runtime-maps: Clarify purpose and enable by default for kexec Ard Biesheuvel
@ 2022-11-07 8:31 ` Ard Biesheuvel
2022-11-08 3:46 ` [PATCH 0/2] efi/x86: Move runtime map sysfs code into arch/x86 Dave Young
2 siblings, 0 replies; 5+ messages in thread
From: Ard Biesheuvel @ 2022-11-07 8:31 UTC (permalink / raw)
To: linux-efi; +Cc: dyoung, Ard Biesheuvel
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: Ard Biesheuvel <ardb@kernel.org>
---
arch/x86/Kconfig | 11 ++++++++
arch/x86/include/asm/efi.h | 22 +++++++++++++++
arch/x86/platform/efi/Makefile | 1 +
{drivers/firmware => arch/x86/platform}/efi/runtime-map.c | 6 ++---
drivers/firmware/efi/Kconfig | 11 --------
drivers/firmware/efi/Makefile | 1 -
drivers/firmware/efi/efi.c | 5 +---
include/linux/efi.h | 28 --------------------
8 files changed, 38 insertions(+), 47 deletions(-)
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index 99ece961c1010f53..79baff0cc7b9a181 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -2015,6 +2015,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
diff --git a/arch/x86/include/asm/efi.h b/arch/x86/include/asm/efi.h
index 011b710cc42cd060..47ebee3dffde9063 100644
--- a/arch/x86/include/asm/efi.h
+++ b/arch/x86/include/asm/efi.h
@@ -431,4 +431,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 */
diff --git a/arch/x86/platform/efi/Makefile b/arch/x86/platform/efi/Makefile
index ed5502a5185d4ead..543df9a1379d121c 100644
--- a/arch/x86/platform/efi/Makefile
+++ b/arch/x86/platform/efi/Makefile
@@ -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
diff --git a/drivers/firmware/efi/runtime-map.c b/arch/x86/platform/efi/runtime-map.c
similarity index 97%
rename from drivers/firmware/efi/runtime-map.c
rename to arch/x86/platform/efi/runtime-map.c
index 92a3d45a795cd5e4..cc35efaeaaa3b5eb 100644
--- a/drivers/firmware/efi/runtime-map.c
+++ b/arch/x86/platform/efi/runtime-map.c
@@ -1,6 +1,5 @@
// SPDX-License-Identifier: GPL-2.0
/*
- * linux/drivers/efi/runtime-map.c
* Copyright (C) 2013 Red Hat, Inc., Dave Young <dyoung@redhat.com>
*/
@@ -157,13 +156,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 +190,4 @@ int __init efi_runtime_map_init(struct kobject *efi_kobj)
out:
return ret;
}
+subsys_initcall_sync(efi_runtime_map_init);
diff --git a/drivers/firmware/efi/Kconfig b/drivers/firmware/efi/Kconfig
index 552512f211a1f5e7..08ed88e49ea307b0 100644
--- a/drivers/firmware/efi/Kconfig
+++ b/drivers/firmware/efi/Kconfig
@@ -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
diff --git a/drivers/firmware/efi/Makefile b/drivers/firmware/efi/Makefile
index 8e4f0d5b26e542c3..7d3b08cc8c5a2813 100644
--- a/drivers/firmware/efi/Makefile
+++ b/drivers/firmware/efi/Makefile
@@ -20,7 +20,6 @@ obj-$(CONFIG_EFI_PARAMS_FROM_FDT) += fdtparams.o
obj-$(CONFIG_EFI_ESRT) += esrt.o
obj-$(CONFIG_EFI_VARS_PSTORE) += efi-pstore.o
obj-$(CONFIG_UEFI_CPER) += cper.o
-obj-$(CONFIG_EFI_RUNTIME_MAP) += runtime-map.o
obj-$(CONFIG_EFI_RUNTIME_WRAPPERS) += runtime-wrappers.o
subdir-$(CONFIG_EFI_STUB) += libstub
obj-$(CONFIG_EFI_BOOTLOADER_CONTROL) += efibc.o
diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c
index 84a3e52fe8880311..4f2879cde0a51d57 100644
--- a/drivers/firmware/efi/efi.c
+++ b/drivers/firmware/efi/efi.c
@@ -394,10 +394,6 @@ static int __init efisubsys_init(void)
goto err_unregister;
}
- error = efi_runtime_map_init(efi_kobj);
- if (error)
- goto err_remove_group;
-
/* and the standard mountpoint for efivarfs */
error = sysfs_create_mount_point(efi_kobj, "efivars");
if (error) {
@@ -423,6 +419,7 @@ static int __init efisubsys_init(void)
generic_ops_unregister();
err_put:
kobject_put(efi_kobj);
+ efi_kobj = NULL;
destroy_workqueue(efi_rts_wq);
return error;
}
diff --git a/include/linux/efi.h b/include/linux/efi.h
index 16b7318957b0709f..13bf2574a5d76c9e 100644
--- a/include/linux/efi.h
+++ b/include/linux/efi.h
@@ -1091,34 +1091,6 @@ extern int efi_capsule_update(efi_capsule_header_t *capsule,
static inline bool efi_capsule_pending(int *reset_type) { return false; }
#endif
-#ifdef CONFIG_EFI_RUNTIME_MAP
-int efi_runtime_map_init(struct kobject *);
-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_runtime_map_init(struct kobject *kobj)
-{
- return 0;
-}
-
-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
-
#ifdef CONFIG_EFI
extern bool efi_runtime_disabled(void);
#else
--
2.35.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 0/2] efi/x86: Move runtime map sysfs code into arch/x86
2022-11-07 8:31 [PATCH 0/2] efi/x86: Move runtime map sysfs code into arch/x86 Ard Biesheuvel
2022-11-07 8:31 ` [PATCH 1/2] efi: runtime-maps: Clarify purpose and enable by default for kexec Ard Biesheuvel
2022-11-07 8:31 ` [PATCH 2/2] efi: x86: Move EFI runtime map sysfs code to arch/x86 Ard Biesheuvel
@ 2022-11-08 3:46 ` Dave Young
2022-11-09 8:56 ` Ard Biesheuvel
2 siblings, 1 reply; 5+ messages in thread
From: Dave Young @ 2022-11-08 3:46 UTC (permalink / raw)
To: Ard Biesheuvel; +Cc: linux-efi
Hi Ard,
On Mon, 7 Nov 2022 at 16:31, Ard Biesheuvel <ardb@kernel.org> wrote:
>
> The EFI runtime map code is only used on x86, so let's move it out of
> the generic code and into arch/x86. While at it, clarify the Kconfig
> description so that it gets enabled automatically when required (i.e.,
> when kexec is enabled), and can only be disabled when CONFIG_EXPERT=y
>
> Ard Biesheuvel (2):
> efi: runtime-maps: Clarify purpose and enable by default for kexec
> efi: x86: Move EFI runtime map sysfs code to arch/x86
For the series:
Reviewed-by: Dave Young <dyoung@redhat.com>
>
> arch/x86/Kconfig | 11 ++++++++
> arch/x86/include/asm/efi.h | 22 +++++++++++++++
> arch/x86/platform/efi/Makefile | 1 +
> {drivers/firmware => arch/x86/platform}/efi/runtime-map.c | 6 ++---
> drivers/firmware/efi/Kconfig | 11 --------
> drivers/firmware/efi/Makefile | 1 -
> drivers/firmware/efi/efi.c | 5 +---
> include/linux/efi.h | 28 --------------------
> 8 files changed, 38 insertions(+), 47 deletions(-)
> rename {drivers/firmware => arch/x86/platform}/efi/runtime-map.c (97%)
>
> --
> 2.35.1
>
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 0/2] efi/x86: Move runtime map sysfs code into arch/x86
2022-11-08 3:46 ` [PATCH 0/2] efi/x86: Move runtime map sysfs code into arch/x86 Dave Young
@ 2022-11-09 8:56 ` Ard Biesheuvel
0 siblings, 0 replies; 5+ messages in thread
From: Ard Biesheuvel @ 2022-11-09 8:56 UTC (permalink / raw)
To: Dave Young; +Cc: linux-efi
On Tue, 8 Nov 2022 at 04:47, Dave Young <dyoung@redhat.com> wrote:
>
> Hi Ard,
>
> On Mon, 7 Nov 2022 at 16:31, Ard Biesheuvel <ardb@kernel.org> wrote:
> >
> > The EFI runtime map code is only used on x86, so let's move it out of
> > the generic code and into arch/x86. While at it, clarify the Kconfig
> > description so that it gets enabled automatically when required (i.e.,
> > when kexec is enabled), and can only be disabled when CONFIG_EXPERT=y
> >
> > Ard Biesheuvel (2):
> > efi: runtime-maps: Clarify purpose and enable by default for kexec
> > efi: x86: Move EFI runtime map sysfs code to arch/x86
>
> For the series:
>
> Reviewed-by: Dave Young <dyoung@redhat.com>
>
Thanks Dave, I've queued these up now.
> >
> > arch/x86/Kconfig | 11 ++++++++
> > arch/x86/include/asm/efi.h | 22 +++++++++++++++
> > arch/x86/platform/efi/Makefile | 1 +
> > {drivers/firmware => arch/x86/platform}/efi/runtime-map.c | 6 ++---
> > drivers/firmware/efi/Kconfig | 11 --------
> > drivers/firmware/efi/Makefile | 1 -
> > drivers/firmware/efi/efi.c | 5 +---
> > include/linux/efi.h | 28 --------------------
> > 8 files changed, 38 insertions(+), 47 deletions(-)
> > rename {drivers/firmware => arch/x86/platform}/efi/runtime-map.c (97%)
> >
> > --
> > 2.35.1
> >
>
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2022-11-09 8:56 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-11-07 8:31 [PATCH 0/2] efi/x86: Move runtime map sysfs code into arch/x86 Ard Biesheuvel
2022-11-07 8:31 ` [PATCH 1/2] efi: runtime-maps: Clarify purpose and enable by default for kexec Ard Biesheuvel
2022-11-07 8:31 ` [PATCH 2/2] efi: x86: Move EFI runtime map sysfs code to arch/x86 Ard Biesheuvel
2022-11-08 3:46 ` [PATCH 0/2] efi/x86: Move runtime map sysfs code into arch/x86 Dave Young
2022-11-09 8:56 ` Ard Biesheuvel
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.