X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=alloc.c;h=cd67c38e239f005091946fcd2aab72b3cad4895c;hb=refs%2Fheads%2Fupstream;hp=f0878044c1c7ad7b3fba24b1e1d95d6c1f0daef4;hpb=3384f0373c8758e5ddd08f489ad7110898dd5406;p=debian%2Felilo diff --git a/alloc.c b/alloc.c index f087804..cd67c38 100644 --- a/alloc.c +++ b/alloc.c @@ -109,9 +109,9 @@ alloc(UINTN size, EFI_MEMORY_TYPE type) return NULL; } alloc_add(tmp, size, ALLOC_POOL); - - DBG_PRT((L"alloc: allocated %d bytes @[" PTR_FMT "-" PTR_FMT "]\n", size, tmp, tmp+size)); - +#ifdef DEBUG_MEM + 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; } @@ -161,10 +161,11 @@ free(VOID *addr) VERB_PRT(1, Print(L"allocator: invalid free @ " PTR_FMT "\n", addr)); return; found: - DBG_PRT((L"free: %s @" PTR_FMT " size=%d\n", +#ifdef DEBUG_MEM + DBG_PRT((L"free: %s @" PTR_FMT " size=%d", p->type == ALLOC_POOL ? L"Pool": L"Page", addr, p->size)); - +#endif if (p->type == ALLOC_POOL) uefi_call_wrapper(BS->FreePool, 1, addr); else @@ -194,9 +195,9 @@ free_all(VOID) alloc_entry_t *tmp; while(used_allocs) { - - DBG_PRT((L"free_all %a @ " PTR_FMT "\n", used_allocs->type == ALLOC_POOL ? "pool" : "pages", used_allocs->addr)); - +#ifdef DEBUG_MEM + 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); else @@ -216,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; @@ -239,13 +248,17 @@ alloc_kmem(VOID *start_addr, UINTN pgcnt) VOID free_kmem(VOID) { - DBG_PRT((L"free_kmem before (" PTR_FMT ", %d)\n", kmem_addr, kmem_pgcnt)); +#ifdef DEBUG_MEM + DBG_PRT((L"free_kmem before (" PTR_FMT ", %d)", kmem_addr, kmem_pgcnt)); +#endif if (kmem_addr && kmem_pgcnt != 0) { free(kmem_addr); kmem_addr = NULL; kmem_pgcnt = 0; } - DBG_PRT((L"free_kmem after (" PTR_FMT ", %d)\n", kmem_addr, kmem_pgcnt)); +#ifdef DEBUG_MEM + DBG_PRT((L"free_kmem after (" PTR_FMT ", %d)", kmem_addr, kmem_pgcnt)); +#endif } VOID