Merge branch 'upstream' of git://git.kernel.org/pub/scm/linux/kernel/git/linville...
[powerpc.git] / arch / powerpc / mm / lmb.c
index 9b5aa68..417d585 100644 (file)
 #include "mmu_decl.h"          /* for __max_low_memory */
 #endif
 
-struct lmb lmb;
-
 #undef DEBUG
 
+#ifdef DEBUG
+#include <asm/udbg.h>
+#define DBG(fmt...) udbg_printf(fmt)
+#else
+#define DBG(fmt...)
+#endif
+
+#define LMB_ALLOC_ANYWHERE     0
+
+struct lmb lmb;
+
 void lmb_dump_all(void)
 {
 #ifdef DEBUG
        unsigned long i;
 
-       udbg_printf("lmb_dump_all:\n");
-       udbg_printf("    memory.cnt               = 0x%lx\n",
-                   lmb.memory.cnt);
-       udbg_printf("    memory.size              = 0x%lx\n",
-                   lmb.memory.size);
+       DBG("lmb_dump_all:\n");
+       DBG("    memory.cnt               = 0x%lx\n", lmb.memory.cnt);
+       DBG("    memory.size              = 0x%lx\n", lmb.memory.size);
        for (i=0; i < lmb.memory.cnt ;i++) {
-               udbg_printf("    memory.region[0x%x].base       = 0x%lx\n",
+               DBG("    memory.region[0x%x].base       = 0x%lx\n",
                            i, lmb.memory.region[i].base);
-               udbg_printf("                 .size     = 0x%lx\n",
+               DBG("                 .size     = 0x%lx\n",
                            lmb.memory.region[i].size);
        }
 
-       udbg_printf("\n    reserved.cnt   = 0x%lx\n",
-                   lmb.reserved.cnt);
-       udbg_printf("    reserved.size    = 0x%lx\n",
-                   lmb.reserved.size);
+       DBG("\n    reserved.cnt   = 0x%lx\n", lmb.reserved.cnt);
+       DBG("    reserved.size    = 0x%lx\n", lmb.reserved.size);
        for (i=0; i < lmb.reserved.cnt ;i++) {
-               udbg_printf("    reserved.region[0x%x].base       = 0x%lx\n",
+               DBG("    reserved.region[0x%x].base       = 0x%lx\n",
                            i, lmb.reserved.region[i].base);
-               udbg_printf("                 .size     = 0x%lx\n",
+               DBG("                 .size     = 0x%lx\n",
                            lmb.reserved.region[i].size);
        }
 #endif /* DEBUG */
@@ -194,6 +199,8 @@ long __init lmb_reserve(unsigned long base, unsigned long size)
 {
        struct lmb_region *_rgn = &(lmb.reserved);
 
+       BUG_ON(0 == size);
+
        return lmb_add_region(_rgn, base, size);
 }
 
@@ -220,10 +227,26 @@ unsigned long __init lmb_alloc(unsigned long size, unsigned long align)
 
 unsigned long __init lmb_alloc_base(unsigned long size, unsigned long align,
                                    unsigned long max_addr)
+{
+       unsigned long alloc;
+
+       alloc = __lmb_alloc_base(size, align, max_addr);
+
+       if (alloc == 0)
+               panic("ERROR: Failed to allocate 0x%lx bytes below 0x%lx.\n",
+                               size, max_addr);
+
+       return alloc;
+}
+
+unsigned long __init __lmb_alloc_base(unsigned long size, unsigned long align,
+                                   unsigned long max_addr)
 {
        long i, j;
        unsigned long base = 0;
 
+       BUG_ON(0 == size);
+
 #ifdef CONFIG_PPC32
        /* On 32-bit, make sure we allocate lowmem */
        if (max_addr == LMB_ALLOC_ANYWHERE)