# HG changeset patch
# User Jimi Xenidis <[EMAIL PROTECTED]>
# Node ID 7855f2e8074882ae27ac2e2a700124bcc3f9c579
# Parent  d16b31d3998a29adeea7bb6f892636181ae6eaf4
[POWERPC] workaround for broken claim is insufficient

Ifdef'ed out so we can revisit, maybe.
Also add a check to make sure we allocated enough for the devtree.

Signed-off-by: Jimi Xenidis <[EMAIL PROTECTED]>
---
 xen/arch/powerpc/boot_of.c |   34 +++++++++++++++++++++++-----------
 1 files changed, 23 insertions(+), 11 deletions(-)

diff -r d16b31d3998a -r 7855f2e80748 xen/arch/powerpc/boot_of.c
--- a/xen/arch/powerpc/boot_of.c        Thu Aug 17 19:03:06 2006 -0400
+++ b/xen/arch/powerpc/boot_of.c        Thu Aug 17 20:38:08 2006 -0400
@@ -685,7 +685,6 @@ static int boot_of_fixup_chosen(void *me
 }
 
 static ulong space_base;
-static int broken_claim;
 
 /*
  * The following function is necessary because we cannot depend on all
@@ -706,14 +705,20 @@ static ulong find_space(u32 size, u32 al
     if (align == 0)
         of_panic("cannot call %s() with align of 0\n", __func__);
 
-    if (!broken_claim) {
-        /* just try and claim it to the FW chosen address */
-        base = of_claim(0, size, align);
-        if (base != OF_FAILURE)
-            return base;
-        of_printf("%s: Firmware does not allocate memory for you\n", __func__);
-        broken_claim = 1;
-    }
+#ifdef BROKEN_CLAIM_WORKAROUND
+    {
+        static int broken_claim;
+        if (!broken_claim) {
+            /* just try and claim it to the FW chosen address */
+            base = of_claim(0, size, align);
+            if (base != OF_FAILURE)
+                return base;
+            of_printf("%s: Firmware does not allocate memory for you\n",
+                      __func__);
+            broken_claim = 1;
+        }
+    }
+#endif
 
     of_printf("%s base=0x%016lx  eomem=0x%016lx  size=0x%08x  align=0x%x\n",
                     __func__, space_base, eomem, size, align);
@@ -915,15 +920,22 @@ static void boot_of_module(ulong r3, ulo
 
     /* snapshot the tree */
     oftree = (void*)find_space(oftree_sz, PAGE_SIZE, mbi);
-    if (oftree == 0) of_panic("Could not allocate OFD tree\n");
+    if (oftree == 0)
+        of_panic("Could not allocate OFD tree\n");
 
     of_printf("creating oftree\n");
     of_test("package-to-path");
-    ofd_create(oftree, oftree_sz);
+    oftree = ofd_create(oftree, oftree_sz);
     pkg_save(oftree);
+
+    if (ofd_size(oftree) > oftree_sz)
+         of_panic("Could not fit all of native devtree\n");
 
     boot_of_fixup_refs(oftree);
     boot_of_fixup_chosen(oftree);
+
+    if (ofd_size(oftree) > oftree_sz)
+         of_panic("Could not fit all devtree fixups\n");
 
     ofd_walk(oftree, OFD_ROOT, /* add_hype_props */ NULL, 2);
 

_______________________________________________
Xen-ppc-devel mailing list
Xen-ppc-devel@lists.xensource.com
http://lists.xensource.com/xen-ppc-devel

Reply via email to