update patch
[debian/elilo] / alloc.c
diff --git a/alloc.c b/alloc.c
index f0878044c1c7ad7b3fba24b1e1d95d6c1f0daef4..cd67c38e239f005091946fcd2aab72b3cad4895c 100644 (file)
--- 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