* Fix a boot crash reported by Mike Galbraith and Mike Krinkin. The
new EFI memory map reservation code didn't align reservations to EFI_PAGE_SIZE boundaries causing bogus regions to be inserted into the global EFI memory map - Matt Fleming -----BEGIN PGP SIGNATURE----- iQI2BAABCAAgBQJX4UshGRxtYXR0QGNvZGVibHVlcHJpbnQuY28udWsACgkQLzhZ wI0jPVX2RA/9HiT48K98R1fkiig/V3Wh8H8y7lQbwO+qA1WZ7q/D+DYau62qI3zM sLgTSoV2zzjBr+4JWuGIdbtpYBjhHci0HwEcOGp5EFSZmgJGOpc7VY2VdFaYyZ2X xhowGLXv2jgfKoAPt9MfgZX2Qh5Jt4CRlC+UcilUJp0wy1+uD4W7XmrLM1Rg7Ug2 8XTL/BA5QxQa3wx8+/z6xV/ADlhzf3DQ7BwI3qkx5RHSXSuy1/E2XGTnyuDt/7Oo KmMwQGGrrv92uSjyq5vJ53DuNxXDJ7nGtlXTT2u0WtcZbzJXsXIaCZItbCA5rqW/ wWGgsz5XSc406m1WNv8Zs8xx9NAEP/+KXQfftwuQHFqoylG4QqYuO060V5XOxQlh cdRuyVUgMONZAvTzEAUC+5SaN3c+WDCL8oEnrs/tdMxSzBL9Rj7yaHMW+ozVe5Nf GFxMnO0l5SG9+o8hSAkkn5RDfIDzSTC1W5imqWJQXhC2BXHEdmh4wVWIG4QgPM/K gqaTpX72Nu04lBjCXXpfKSK5Xqv67hZOzxUDkkjxtq1PtDbL1dPpzAF3s3GFdreI FfQgetg4jM4EPnWDQWqWVJxQUv+uCfpDV9g5y9kMinVb2OpyGjcZpNckGHKnqIXr hyntPYqyy793W6dPGEjTqfcVP751qisMjp6iIIqk3h+qr7HyJSF5nqs= =S9gJ -----END PGP SIGNATURE----- Merge tag 'efi-next' of git://git.kernel.org/pub/scm/linux/kernel/git/mfleming/efi into efi/core Pull EFI fix from Matt Fleming: * Fix a boot crash reported by Mike Galbraith and Mike Krinkin. The new EFI memory map reservation code didn't align reservations to EFI_PAGE_SIZE boundaries causing bogus regions to be inserted into the global EFI memory map (Matt Fleming) Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
commit
2ab78a724b
|
@ -201,8 +201,12 @@ void __init efi_arch_mem_reserve(phys_addr_t addr, u64 size)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
size += addr % EFI_PAGE_SIZE;
|
||||||
|
size = round_up(size, EFI_PAGE_SIZE);
|
||||||
|
addr = round_down(addr, EFI_PAGE_SIZE);
|
||||||
|
|
||||||
mr.range.start = addr;
|
mr.range.start = addr;
|
||||||
mr.range.end = addr + size;
|
mr.range.end = addr + size - 1;
|
||||||
mr.attribute = md.attribute | EFI_MEMORY_RUNTIME;
|
mr.attribute = md.attribute | EFI_MEMORY_RUNTIME;
|
||||||
|
|
||||||
num_entries = efi_memmap_split_count(&md, &mr.range);
|
num_entries = efi_memmap_split_count(&md, &mr.range);
|
||||||
|
|
|
@ -225,6 +225,17 @@ void __init efi_memmap_insert(struct efi_memory_map *old_memmap, void *buf,
|
||||||
m_end = mem->range.end;
|
m_end = mem->range.end;
|
||||||
m_attr = mem->attribute;
|
m_attr = mem->attribute;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The EFI memory map deals with regions in EFI_PAGE_SIZE
|
||||||
|
* units. Ensure that the region described by 'mem' is aligned
|
||||||
|
* correctly.
|
||||||
|
*/
|
||||||
|
if (!IS_ALIGNED(m_start, EFI_PAGE_SIZE) ||
|
||||||
|
!IS_ALIGNED(m_end + 1, EFI_PAGE_SIZE)) {
|
||||||
|
WARN_ON(1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
for (old = old_memmap->map, new = buf;
|
for (old = old_memmap->map, new = buf;
|
||||||
old < old_memmap->map_end;
|
old < old_memmap->map_end;
|
||||||
old += old_memmap->desc_size, new += old_memmap->desc_size) {
|
old += old_memmap->desc_size, new += old_memmap->desc_size) {
|
||||||
|
|
Loading…
Reference in New Issue