Imported Upstream version 3.14
[debian/elilo] / alloc.c
diff --git a/alloc.c b/alloc.c
index 6f463e4324e4e03199672ecaa6d321ef39f0ec25..cd67c38e239f005091946fcd2aab72b3cad4895c 100644 (file)
--- 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
 }