Message ID | 20180917024512.58088-1-agraf@suse.de |
---|---|
State | Superseded |
Headers | show |
Series | efi_loader: Align runtime section to 64kb | expand |
On 09/17/2018 04:45 AM, Alexander Graf wrote: > The UEFI spec mandates that runtime sections are 64kb aligned to enable %s/kb/ kiB/g The spec requires a multiple of 64,000 not of 65,536. > support for 64kb page size OSs. > > This patch ensures that we extend the runtime section to 64kb to be spec > compliant. > > Signed-off-by: Alexander Graf <agraf@suse.de> > --- > lib/efi_loader/efi_memory.c | 7 ++++--- > 1 file changed, 4 insertions(+), 3 deletions(-) > > diff --git a/lib/efi_loader/efi_memory.c b/lib/efi_loader/efi_memory.c > index 4f8cb545ad..66ad54a152 100644 > --- a/lib/efi_loader/efi_memory.c > +++ b/lib/efi_loader/efi_memory.c > @@ -11,6 +11,7 @@ > #include <mapmem.h> > #include <watchdog.h> > #include <linux/list_sort.h> > +#include <linux/sizes.h> > > DECLARE_GLOBAL_DATA_PTR; > > @@ -526,10 +527,10 @@ static void add_u_boot_and_runtime(void) > uboot_pages = (gd->ram_top - uboot_start) >> EFI_PAGE_SHIFT; > efi_add_memory_map(uboot_start, uboot_pages, EFI_LOADER_DATA, false); > > - /* Add Runtime Services */ > - runtime_start = (ulong)&__efi_runtime_start & ~EFI_PAGE_MASK; > + /* Add Runtime Services,must be 64kb aligned */ > + runtime_start = (ulong)&__efi_runtime_start & ~(SZ_64K - 1); Please, add a comment in the code referring to the requirement in the UEFI spec. Best regards Heinrich > runtime_end = (ulong)&__efi_runtime_stop; > - runtime_end = (runtime_end + EFI_PAGE_MASK) & ~EFI_PAGE_MASK; > + runtime_end = (runtime_end + SZ_64K - 1) & ~(SZ_64K - 1); > runtime_pages = (runtime_end - runtime_start) >> EFI_PAGE_SHIFT; > efi_add_memory_map(runtime_start, runtime_pages, > EFI_RUNTIME_SERVICES_CODE, false); >
On 09/17/2018 04:45 AM, Alexander Graf wrote: > The UEFI spec mandates that runtime sections are 64kb aligned to enable > support for 64kb page size OSs. Where in the spec did you find this? I could neither find the term "runtime section" nor "64kb" in the text. Best regards Heinrich > > This patch ensures that we extend the runtime section to 64kb to be spec > compliant. > > Signed-off-by: Alexander Graf <agraf@suse.de> > --- > lib/efi_loader/efi_memory.c | 7 ++++--- > 1 file changed, 4 insertions(+), 3 deletions(-) > > diff --git a/lib/efi_loader/efi_memory.c b/lib/efi_loader/efi_memory.c > index 4f8cb545ad..66ad54a152 100644 > --- a/lib/efi_loader/efi_memory.c > +++ b/lib/efi_loader/efi_memory.c > @@ -11,6 +11,7 @@ > #include <mapmem.h> > #include <watchdog.h> > #include <linux/list_sort.h> > +#include <linux/sizes.h> > > DECLARE_GLOBAL_DATA_PTR; > > @@ -526,10 +527,10 @@ static void add_u_boot_and_runtime(void) > uboot_pages = (gd->ram_top - uboot_start) >> EFI_PAGE_SHIFT; > efi_add_memory_map(uboot_start, uboot_pages, EFI_LOADER_DATA, false); > > - /* Add Runtime Services */ > - runtime_start = (ulong)&__efi_runtime_start & ~EFI_PAGE_MASK; > + /* Add Runtime Services,must be 64kb aligned */ > + runtime_start = (ulong)&__efi_runtime_start & ~(SZ_64K - 1); > runtime_end = (ulong)&__efi_runtime_stop; > - runtime_end = (runtime_end + EFI_PAGE_MASK) & ~EFI_PAGE_MASK; > + runtime_end = (runtime_end + SZ_64K - 1) & ~(SZ_64K - 1); > runtime_pages = (runtime_end - runtime_start) >> EFI_PAGE_SHIFT; > efi_add_memory_map(runtime_start, runtime_pages, > EFI_RUNTIME_SERVICES_CODE, false); >
On 16.09.18 22:42, Heinrich Schuchardt wrote: > On 09/17/2018 04:45 AM, Alexander Graf wrote: >> The UEFI spec mandates that runtime sections are 64kb aligned to enable > %s/kb/ kiB/g > The spec requires a multiple of 64,000 not of 65,536. The other way around you mean I guess? We do usually use "kb" for multiples of 1024 though, no? > >> support for 64kb page size OSs. >> >> This patch ensures that we extend the runtime section to 64kb to be spec >> compliant. >> >> Signed-off-by: Alexander Graf <agraf@suse.de> >> --- >> lib/efi_loader/efi_memory.c | 7 ++++--- >> 1 file changed, 4 insertions(+), 3 deletions(-) >> >> diff --git a/lib/efi_loader/efi_memory.c b/lib/efi_loader/efi_memory.c >> index 4f8cb545ad..66ad54a152 100644 >> --- a/lib/efi_loader/efi_memory.c >> +++ b/lib/efi_loader/efi_memory.c >> @@ -11,6 +11,7 @@ >> #include <mapmem.h> >> #include <watchdog.h> >> #include <linux/list_sort.h> >> +#include <linux/sizes.h> >> >> DECLARE_GLOBAL_DATA_PTR; >> >> @@ -526,10 +527,10 @@ static void add_u_boot_and_runtime(void) >> uboot_pages = (gd->ram_top - uboot_start) >> EFI_PAGE_SHIFT; >> efi_add_memory_map(uboot_start, uboot_pages, EFI_LOADER_DATA, false); >> >> - /* Add Runtime Services */ >> - runtime_start = (ulong)&__efi_runtime_start & ~EFI_PAGE_MASK; >> + /* Add Runtime Services,must be 64kb aligned */ >> + runtime_start = (ulong)&__efi_runtime_start & ~(SZ_64K - 1); > > Please, add a comment in the code referring to the requirement in the > UEFI spec. Sure, it's part of 2.6.3 (AArch64 Platforms) in the 2.7 spec. Alex
diff --git a/lib/efi_loader/efi_memory.c b/lib/efi_loader/efi_memory.c index 4f8cb545ad..66ad54a152 100644 --- a/lib/efi_loader/efi_memory.c +++ b/lib/efi_loader/efi_memory.c @@ -11,6 +11,7 @@ #include <mapmem.h> #include <watchdog.h> #include <linux/list_sort.h> +#include <linux/sizes.h> DECLARE_GLOBAL_DATA_PTR; @@ -526,10 +527,10 @@ static void add_u_boot_and_runtime(void) uboot_pages = (gd->ram_top - uboot_start) >> EFI_PAGE_SHIFT; efi_add_memory_map(uboot_start, uboot_pages, EFI_LOADER_DATA, false); - /* Add Runtime Services */ - runtime_start = (ulong)&__efi_runtime_start & ~EFI_PAGE_MASK; + /* Add Runtime Services,must be 64kb aligned */ + runtime_start = (ulong)&__efi_runtime_start & ~(SZ_64K - 1); runtime_end = (ulong)&__efi_runtime_stop; - runtime_end = (runtime_end + EFI_PAGE_MASK) & ~EFI_PAGE_MASK; + runtime_end = (runtime_end + SZ_64K - 1) & ~(SZ_64K - 1); runtime_pages = (runtime_end - runtime_start) >> EFI_PAGE_SHIFT; efi_add_memory_map(runtime_start, runtime_pages, EFI_RUNTIME_SERVICES_CODE, false);
The UEFI spec mandates that runtime sections are 64kb aligned to enable support for 64kb page size OSs. This patch ensures that we extend the runtime section to 64kb to be spec compliant. Signed-off-by: Alexander Graf <agraf@suse.de> --- lib/efi_loader/efi_memory.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)