Booting on EFI with ESRT table has been stop since commit:
8e80632 efi/esrt: Use efi_mem_reserve() and avoid a kmalloc()
This is caused by this commit:
816e761 efi: Allow drivers to reserve boot services forever
Problem is, that efi_memmap_insert need memory aligned
on EFI_PAGE_SIZE. If memory not aligned, efi_memmap_insert
just return and let efi.memmap in inconsistent state.
This breaking boot.
Tested in my machine, which stop booting
after upgrade to 4.9
Signed-off-by: Petr Oros <[email protected]>
---
arch/x86/platform/efi/quirks.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/x86/platform/efi/quirks.c b/arch/x86/platform/efi/quirks.c
index 10aca63..7678857 100644
--- a/arch/x86/platform/efi/quirks.c
+++ b/arch/x86/platform/efi/quirks.c
@@ -214,7 +214,7 @@ void __init efi_arch_mem_reserve(phys_addr_t addr, u64 size)
new_size = efi.memmap.desc_size * num_entries;
- new_phys = memblock_alloc(new_size, 0);
+ new_phys = memblock_alloc(new_size, EFI_PAGE_SIZE);
if (!new_phys) {
pr_err("Could not allocate boot services memmap\n");
return;
--
2.10.2
On Wed, 21 Dec, at 02:11:38PM, Petr Oros wrote:
> Booting on EFI with ESRT table has been stop since commit:
> 8e80632 efi/esrt: Use efi_mem_reserve() and avoid a kmalloc()
>
> This is caused by this commit:
> 816e761 efi: Allow drivers to reserve boot services forever
>
> Problem is, that efi_memmap_insert need memory aligned
> on EFI_PAGE_SIZE. If memory not aligned, efi_memmap_insert
> just return and let efi.memmap in inconsistent state.
> This breaking boot.
>
> Tested in my machine, which stop booting
> after upgrade to 4.9
>
> Signed-off-by: Petr Oros <[email protected]>
> ---
> arch/x86/platform/efi/quirks.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
Could you provide some more information? Why does efi_memmap_insert()
require this alignment? How does booting "break"? If you see an Oops,
please post it here.
Matt Fleming píše v Wed 21. 12. 2016 v 22:30 +0000:
> On Wed, 21 Dec, at 02:11:38PM, Petr Oros wrote:
> >
> > Booting on EFI with ESRT table has been stop since commit:
> > 8e80632 efi/esrt: Use efi_mem_reserve() and avoid a kmalloc()
> >
> > This is caused by this commit:
> > 816e761 efi: Allow drivers to reserve boot services forever
> >
> > Problem is, that efi_memmap_insert need memory aligned
> > on EFI_PAGE_SIZE. If memory not aligned, efi_memmap_insert
> > just return and let efi.memmap in inconsistent state.
> > This breaking boot.
> >
> > Tested in my machine, which stop booting
> > after upgrade to 4.9
> >
> > Signed-off-by: Petr Oros <[email protected]>
> > ---
> > arch/x86/platform/efi/quirks.c | 2 +-
> > 1 file changed, 1 insertion(+), 1 deletion(-)
>
> Could you provide some more information? Why does efi_memmap_insert()
> require this alignment? How does booting "break"? If you see an Oops,
> please post it here.
Ooops, sorry, please ignore this patch. I overlooked efi_memmap_insert
argument order. I bisected kernel and this patch breaking kernel boot
but from other reason. Provided patch fixed kernel booting issue by
mistake.
-Petr