From: Mark Salter <msalter-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
To: Ard Biesheuvel <ard.biesheuvel-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
Cc: leif.lindholm-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org,
roy.franz-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org,
mark.rutland-5wv7dgnIgG8@public.gmane.org,
will.deacon-5wv7dgnIgG8@public.gmane.org,
catalin.marinas-5wv7dgnIgG8@public.gmane.org,
matt.fleming-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org,
linux-efi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org,
dyoung-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org,
yi.li-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org
Subject: Re: [PATCH 06/10] arm64/efi: use UEFI memory map unconditionally if available
Date: Wed, 22 Oct 2014 13:06:56 -0400 [thread overview]
Message-ID: <1413997616.2985.74.camel@deneb.redhat.com> (raw)
In-Reply-To: <1413987713-30528-7-git-send-email-ard.biesheuvel-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
On Wed, 2014-10-22 at 16:21 +0200, Ard Biesheuvel wrote:
> On systems that boot via UEFI, all memory nodes are deleted from the
> device tree, and instead, the size and location of system RAM is derived
> from the UEFI memory map. This is handled by reserve_regions, which not only
> reserves parts of memory that UEFI declares as reserved, but also installs
> the memblocks that cover the remaining usable memory.
>
> Currently, reserve_regions() is only called if uefi_init() succeeds.
> However, it does not actually depend on anything that uefi_init() does,
> and not calling reserve_regions() results in a broken boot, so it is
> better to just call it unconditionally.
>
> Signed-off-by: Ard Biesheuvel <ard.biesheuvel-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
> ---
> arch/arm64/kernel/efi.c | 11 ++++-------
> 1 file changed, 4 insertions(+), 7 deletions(-)
>
> diff --git a/arch/arm64/kernel/efi.c b/arch/arm64/kernel/efi.c
> index 51522ab0c6da..4cec21b1ecdd 100644
> --- a/arch/arm64/kernel/efi.c
> +++ b/arch/arm64/kernel/efi.c
> @@ -313,8 +313,7 @@ void __init efi_init(void)
> memmap.desc_size = params.desc_size;
> memmap.desc_version = params.desc_ver;
>
> - if (uefi_init() < 0)
> - return;
> + WARN_ON(uefi_init() < 0);
>
> reserve_regions();
> }
It also looks like EFI_BOOT flag will be set even if uefi_init fails.
If uefi_init fails, we only need reserve_regions() for the purpose
of adding memblocks. Otherwise, we end up wasting a lot of memory.
So, something like this would also be needed:
diff --git a/arch/arm64/kernel/efi.c b/arch/arm64/kernel/efi.c
index 03aaa99..5a6e189 100644
--- a/arch/arm64/kernel/efi.c
+++ b/arch/arm64/kernel/efi.c
@@ -81,9 +81,6 @@ static int __init uefi_init(void)
return -ENOMEM;
}
- set_bit(EFI_BOOT, &efi.flags);
- set_bit(EFI_64BIT, &efi.flags);
-
/*
* Verify the EFI Table
*/
@@ -109,6 +106,9 @@ static int __init uefi_init(void)
efi.systab->hdr.revision >> 16,
efi.systab->hdr.revision & 0xffff, vendor);
+ set_bit(EFI_BOOT, &efi.flags);
+ set_bit(EFI_64BIT, &efi.flags);
+
retval = efi_config_init(NULL);
if (retval == 0)
set_bit(EFI_CONFIG_TABLES, &efi.flags);
@@ -177,9 +177,10 @@ static __init void reserve_regions(void)
if (is_normal_ram(md))
early_init_dt_add_memory_arch(paddr, size);
- if (is_reserve_region(md) ||
- md->type == EFI_BOOT_SERVICES_CODE ||
- md->type == EFI_BOOT_SERVICES_DATA) {
+ if (efi_enabled(EFI_BOOT) &&
+ (is_reserve_region(md) ||
+ md->type == EFI_BOOT_SERVICES_CODE ||
+ md->type == EFI_BOOT_SERVICES_DATA)) {
memblock_reserve(paddr, size);
if (uefi_debug)
pr_cont("*");
> @@ -374,15 +373,13 @@ static int __init arm64_enter_virtual_mode(void)
> int count = 0;
> unsigned long flags;
>
> - if (!efi_enabled(EFI_BOOT)) {
> - pr_info("EFI services will not be available.\n");
> - return -1;
> - }
> + if (!efi_enabled(EFI_MEMMAP))
> + return 0;
>
> mapsize = memmap.map_end - memmap.map;
> early_memunmap(memmap.map, mapsize);
>
> - if (efi_runtime_disabled()) {
> + if (!efi_enabled(EFI_BOOT) || efi_runtime_disabled()) {
> pr_info("EFI runtime services will be disabled.\n");
> return -1;
> }
WARNING: multiple messages have this Message-ID (diff)
From: msalter@redhat.com (Mark Salter)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 06/10] arm64/efi: use UEFI memory map unconditionally if available
Date: Wed, 22 Oct 2014 13:06:56 -0400 [thread overview]
Message-ID: <1413997616.2985.74.camel@deneb.redhat.com> (raw)
In-Reply-To: <1413987713-30528-7-git-send-email-ard.biesheuvel@linaro.org>
On Wed, 2014-10-22 at 16:21 +0200, Ard Biesheuvel wrote:
> On systems that boot via UEFI, all memory nodes are deleted from the
> device tree, and instead, the size and location of system RAM is derived
> from the UEFI memory map. This is handled by reserve_regions, which not only
> reserves parts of memory that UEFI declares as reserved, but also installs
> the memblocks that cover the remaining usable memory.
>
> Currently, reserve_regions() is only called if uefi_init() succeeds.
> However, it does not actually depend on anything that uefi_init() does,
> and not calling reserve_regions() results in a broken boot, so it is
> better to just call it unconditionally.
>
> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
> ---
> arch/arm64/kernel/efi.c | 11 ++++-------
> 1 file changed, 4 insertions(+), 7 deletions(-)
>
> diff --git a/arch/arm64/kernel/efi.c b/arch/arm64/kernel/efi.c
> index 51522ab0c6da..4cec21b1ecdd 100644
> --- a/arch/arm64/kernel/efi.c
> +++ b/arch/arm64/kernel/efi.c
> @@ -313,8 +313,7 @@ void __init efi_init(void)
> memmap.desc_size = params.desc_size;
> memmap.desc_version = params.desc_ver;
>
> - if (uefi_init() < 0)
> - return;
> + WARN_ON(uefi_init() < 0);
>
> reserve_regions();
> }
It also looks like EFI_BOOT flag will be set even if uefi_init fails.
If uefi_init fails, we only need reserve_regions() for the purpose
of adding memblocks. Otherwise, we end up wasting a lot of memory.
So, something like this would also be needed:
diff --git a/arch/arm64/kernel/efi.c b/arch/arm64/kernel/efi.c
index 03aaa99..5a6e189 100644
--- a/arch/arm64/kernel/efi.c
+++ b/arch/arm64/kernel/efi.c
@@ -81,9 +81,6 @@ static int __init uefi_init(void)
return -ENOMEM;
}
- set_bit(EFI_BOOT, &efi.flags);
- set_bit(EFI_64BIT, &efi.flags);
-
/*
* Verify the EFI Table
*/
@@ -109,6 +106,9 @@ static int __init uefi_init(void)
efi.systab->hdr.revision >> 16,
efi.systab->hdr.revision & 0xffff, vendor);
+ set_bit(EFI_BOOT, &efi.flags);
+ set_bit(EFI_64BIT, &efi.flags);
+
retval = efi_config_init(NULL);
if (retval == 0)
set_bit(EFI_CONFIG_TABLES, &efi.flags);
@@ -177,9 +177,10 @@ static __init void reserve_regions(void)
if (is_normal_ram(md))
early_init_dt_add_memory_arch(paddr, size);
- if (is_reserve_region(md) ||
- md->type == EFI_BOOT_SERVICES_CODE ||
- md->type == EFI_BOOT_SERVICES_DATA) {
+ if (efi_enabled(EFI_BOOT) &&
+ (is_reserve_region(md) ||
+ md->type == EFI_BOOT_SERVICES_CODE ||
+ md->type == EFI_BOOT_SERVICES_DATA)) {
memblock_reserve(paddr, size);
if (uefi_debug)
pr_cont("*");
> @@ -374,15 +373,13 @@ static int __init arm64_enter_virtual_mode(void)
> int count = 0;
> unsigned long flags;
>
> - if (!efi_enabled(EFI_BOOT)) {
> - pr_info("EFI services will not be available.\n");
> - return -1;
> - }
> + if (!efi_enabled(EFI_MEMMAP))
> + return 0;
>
> mapsize = memmap.map_end - memmap.map;
> early_memunmap(memmap.map, mapsize);
>
> - if (efi_runtime_disabled()) {
> + if (!efi_enabled(EFI_BOOT) || efi_runtime_disabled()) {
> pr_info("EFI runtime services will be disabled.\n");
> return -1;
> }
next prev parent reply other threads:[~2014-10-22 17:06 UTC|newest]
Thread overview: 66+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-10-22 14:21 [PATCH 00/10] arm64 EFI patches for 3.19 Ard Biesheuvel
2014-10-22 14:21 ` Ard Biesheuvel
[not found] ` <1413987713-30528-1-git-send-email-ard.biesheuvel-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2014-10-22 14:21 ` [PATCH 01/10] arm64/efi: efistub: jump to 'stext' directly, not through the header Ard Biesheuvel
2014-10-22 14:21 ` Ard Biesheuvel
[not found] ` <1413987713-30528-2-git-send-email-ard.biesheuvel-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2014-10-22 14:47 ` Mark Rutland
2014-10-22 14:47 ` Mark Rutland
2014-10-22 14:21 ` [PATCH 02/10] arm64/efi: set PE/COFF section alignment to 4 KB Ard Biesheuvel
2014-10-22 14:21 ` Ard Biesheuvel
2014-10-22 14:49 ` Mark Rutland
2014-10-22 14:49 ` Mark Rutland
2014-10-22 14:21 ` [PATCH 03/10] arm64/efi: set PE/COFF file alignment to 512 bytes Ard Biesheuvel
2014-10-22 14:21 ` Ard Biesheuvel
2014-10-22 14:21 ` [PATCH 04/10] arm64/efi: reserve regions of type ACPI_MEMORY_NVS Ard Biesheuvel
2014-10-22 14:21 ` Ard Biesheuvel
[not found] ` <1413987713-30528-5-git-send-email-ard.biesheuvel-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2014-10-22 16:15 ` Mark Rutland
2014-10-22 16:15 ` Mark Rutland
2014-10-22 16:33 ` Ard Biesheuvel
2014-10-22 16:33 ` Ard Biesheuvel
[not found] ` <CAKv+Gu9pUY766Wf8cVfNtmjS8mXAB9PZswrRdgsKmz8+AOXrww-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-10-28 10:17 ` Ard Biesheuvel
2014-10-28 10:17 ` Ard Biesheuvel
2014-10-22 14:21 ` [PATCH 05/10] arm64/efi: drop redundant set_bit(EFI_CONFIG_TABLES) Ard Biesheuvel
2014-10-22 14:21 ` Ard Biesheuvel
[not found] ` <1413987713-30528-6-git-send-email-ard.biesheuvel-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2014-10-27 12:22 ` Will Deacon
2014-10-27 12:22 ` Will Deacon
2014-10-22 14:21 ` [PATCH 06/10] arm64/efi: use UEFI memory map unconditionally if available Ard Biesheuvel
2014-10-22 14:21 ` Ard Biesheuvel
[not found] ` <1413987713-30528-7-git-send-email-ard.biesheuvel-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2014-10-22 17:06 ` Mark Salter [this message]
2014-10-22 17:06 ` Mark Salter
[not found] ` <1413997616.2985.74.camel-PDpCo7skNiwAicBL8TP8PQ@public.gmane.org>
2014-10-22 17:20 ` Ard Biesheuvel
2014-10-22 17:20 ` Ard Biesheuvel
[not found] ` <CAKv+Gu-zy-3uGtq4a9EmRBLDsG5Q0vf32_=g7+x0p4HyrXEhxg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-10-22 17:29 ` Mark Salter
2014-10-22 17:29 ` Mark Salter
2014-10-23 15:54 ` Mark Rutland
2014-10-23 15:54 ` Mark Rutland
2014-10-23 16:19 ` Mark Salter
2014-10-23 16:19 ` Mark Salter
[not found] ` <1414081198.6829.12.camel-PDpCo7skNiwAicBL8TP8PQ@public.gmane.org>
2014-10-23 18:41 ` Ard Biesheuvel
2014-10-23 18:41 ` Ard Biesheuvel
2014-10-23 19:14 ` Mark Rutland
2014-10-23 19:14 ` Mark Rutland
2014-10-23 19:23 ` Ard Biesheuvel
2014-10-23 19:23 ` Ard Biesheuvel
2014-10-22 14:21 ` [PATCH 07/10] efi: dmi: add support for SMBIOS 3.0 UEFI configuration table Ard Biesheuvel
2014-10-22 14:21 ` Ard Biesheuvel
[not found] ` <1413987713-30528-8-git-send-email-ard.biesheuvel-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2014-10-27 15:26 ` Matt Fleming
2014-10-27 15:26 ` Matt Fleming
[not found] ` <20141027152611.GN12020-HNK1S37rvNbeXh+fF434Mdi2O/JbrIOy@public.gmane.org>
2014-10-27 15:33 ` Ard Biesheuvel
2014-10-27 15:33 ` Ard Biesheuvel
2014-10-22 14:21 ` [PATCH 08/10] dmi: add support for SMBIOS 3.0 64-bit entry point Ard Biesheuvel
2014-10-22 14:21 ` Ard Biesheuvel
2014-10-22 14:21 ` [PATCH 09/10] arm64: dmi: Add SMBIOS/DMI support Ard Biesheuvel
2014-10-22 14:21 ` Ard Biesheuvel
2014-10-22 14:21 ` [PATCH 10/10] arm64: dmi: set DMI string as dump stack arch description Ard Biesheuvel
2014-10-22 14:21 ` Ard Biesheuvel
[not found] ` <1413987713-30528-11-git-send-email-ard.biesheuvel-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2014-10-27 12:24 ` Will Deacon
2014-10-27 12:24 ` Will Deacon
[not found] ` <20141027122451.GT8768-5wv7dgnIgG8@public.gmane.org>
2014-10-27 12:57 ` Ard Biesheuvel
2014-10-27 12:57 ` Ard Biesheuvel
2014-10-27 11:50 ` [PATCH 00/10] arm64 EFI patches for 3.19 Will Deacon
2014-10-27 11:50 ` Will Deacon
[not found] ` <20141027115055.GM8768-5wv7dgnIgG8@public.gmane.org>
2014-10-27 12:03 ` Ard Biesheuvel
2014-10-27 12:03 ` Ard Biesheuvel
[not found] ` <CAKv+Gu_0uobUr2Ytzg7p8W4akK-c=qnFxhzuy4mbgfxnKjBG2Q-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-10-27 17:45 ` Matt Fleming
2014-10-27 17:45 ` Matt Fleming
[not found] ` <1414431927.7122.471.camel-ZqTwcBeJ+wsBof6jY8KHXm7IUlhRatedral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2014-10-28 12:38 ` Will Deacon
2014-10-28 12:38 ` Will Deacon
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1413997616.2985.74.camel@deneb.redhat.com \
--to=msalter-h+wxahxf7alqt0dzr+alfa@public.gmane.org \
--cc=ard.biesheuvel-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \
--cc=catalin.marinas-5wv7dgnIgG8@public.gmane.org \
--cc=dyoung-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
--cc=leif.lindholm-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \
--cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
--cc=linux-efi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=mark.rutland-5wv7dgnIgG8@public.gmane.org \
--cc=matt.fleming-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
--cc=roy.franz-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \
--cc=will.deacon-5wv7dgnIgG8@public.gmane.org \
--cc=yi.li-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.