X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=alloc.c;fp=alloc.c;h=cd67c38e239f005091946fcd2aab72b3cad4895c;hb=4386d0ddc988a11e8f55d774f577e4ca4f83cea9;hp=6f463e4324e4e03199672ecaa6d321ef39f0ec25;hpb=90dc485b21e0c6b3417e22e86f637f45e62748f2;p=debian%2Felilo diff --git a/alloc.c b/alloc.c index 6f463e4..cd67c38 100644 --- a/alloc.c +++ b/alloc.c @@ -110,7 +110,7 @@ alloc(UINTN size, EFI_MEMORY_TYPE type) } alloc_add(tmp, size, ALLOC_POOL); #ifdef DEBUG_MEM - DBG_PRT((L"alloc: allocated %d bytes @[" PTR_FMT "-" PTR_FMT "]\n", size, tmp, tmp+size)); + DBG_PRT((L"alloc: allocated %d bytes @[" PTR_FMT "-" PTR_FMT "]", size, tmp, tmp+size)); #endif return tmp; } @@ -140,7 +140,7 @@ alloc_pages(UINTN pgcnt, EFI_MEMORY_TYPE type, EFI_ALLOCATE_TYPE where, VOID *ad alloc_add(addr, pgcnt, ALLOC_PAGES); - DBG_PRT((L"allocator: allocated %d pages @0x%lx\n", pgcnt, tmp)); + DBG_PRT((L"allocator: allocated %d pages @" PTR_FMT, pgcnt, tmp)); return addr; } @@ -162,7 +162,7 @@ free(VOID *addr) return; found: #ifdef DEBUG_MEM - DBG_PRT((L"free: %s @" PTR_FMT " size=%d\n", + DBG_PRT((L"free: %s @" PTR_FMT " size=%d", p->type == ALLOC_POOL ? L"Pool": L"Page", addr, p->size)); #endif @@ -196,7 +196,7 @@ free_all(VOID) while(used_allocs) { #ifdef DEBUG_MEM - DBG_PRT((L"free_all %a @ " PTR_FMT "\n", used_allocs->type == ALLOC_POOL ? "pool" : "pages", used_allocs->addr)); + DBG_PRT((L"free_all %a @ " PTR_FMT, used_allocs->type == ALLOC_POOL ? "pool" : "pages", used_allocs->addr)); #endif if (used_allocs->type == ALLOC_POOL) uefi_call_wrapper(BS->FreePool, 1, used_allocs->addr); @@ -217,7 +217,15 @@ INTN alloc_kmem_anywhere(VOID **start_addr, UINTN pgcnt) { void * tmp; - if ((tmp = alloc_pages(pgcnt, EfiLoaderData, AllocateAnyPages, *start_addr)) == 0) return -1; + /* + * During "AllocateAnyPages" *start_addr will be ignored. + * Therefore we can safely subvert it to reuse this function with + * an alloc_kmem_anyhwere_below() semantic... + */ + tmp = alloc_pages(pgcnt, EfiLoaderData, + (*start_addr) ? AllocateMaxAddress : AllocateAnyPages, + *start_addr); + if (tmp == NULL) return -1; kmem_addr = tmp; kmem_pgcnt = pgcnt; @@ -241,7 +249,7 @@ VOID free_kmem(VOID) { #ifdef DEBUG_MEM - DBG_PRT((L"free_kmem before (" PTR_FMT ", %d)\n", kmem_addr, kmem_pgcnt)); + DBG_PRT((L"free_kmem before (" PTR_FMT ", %d)", kmem_addr, kmem_pgcnt)); #endif if (kmem_addr && kmem_pgcnt != 0) { free(kmem_addr); @@ -249,7 +257,7 @@ free_kmem(VOID) kmem_pgcnt = 0; } #ifdef DEBUG_MEM - DBG_PRT((L"free_kmem after (" PTR_FMT ", %d)\n", kmem_addr, kmem_pgcnt)); + DBG_PRT((L"free_kmem after (" PTR_FMT ", %d)", kmem_addr, kmem_pgcnt)); #endif }