All of lore.kernel.org
 help / color / mirror / Atom feed
* [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.