Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 245660
b: refs/heads/master
c: 202f9d0
h: refs/heads/master
v: v3
  • Loading branch information
Matthew Garrett authored and H. Peter Anvin committed May 9, 2011
1 parent 07e17a9 commit a405790
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 2 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 9cd2b07c197e3ff594fc04f5fb3d86efbeab6ad8
refs/heads/master: 202f9d0a41809e3424af5f61489b48b622824aed
30 changes: 29 additions & 1 deletion trunk/arch/x86/platform/efi/efi.c
Original file line number Diff line number Diff line change
Expand Up @@ -498,13 +498,41 @@ static void __init runtime_code_page_mkexec(void)
*/
void __init efi_enter_virtual_mode(void)
{
efi_memory_desc_t *md;
efi_memory_desc_t *md, *prev_md = NULL;
efi_status_t status;
unsigned long size;
u64 end, systab, addr, npages, end_pfn;
void *p, *va;

efi.systab = NULL;

/* Merge contiguous regions of the same type and attribute */
for (p = memmap.map; p < memmap.map_end; p += memmap.desc_size) {
u64 prev_size;
md = p;

if (!prev_md) {
prev_md = md;
continue;
}

if (prev_md->type != md->type ||
prev_md->attribute != md->attribute) {
prev_md = md;
continue;
}

prev_size = prev_md->num_pages << EFI_PAGE_SHIFT;

if (md->phys_addr == (prev_md->phys_addr + prev_size)) {
prev_md->num_pages += md->num_pages;
md->type = EFI_RESERVED_TYPE;
md->attribute = 0;
continue;
}
prev_md = md;
}

for (p = memmap.map; p < memmap.map_end; p += memmap.desc_size) {
md = p;
if (!(md->attribute & EFI_MEMORY_RUNTIME))
Expand Down

0 comments on commit a405790

Please sign in to comment.