Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 16 Jan 2012 22:46:18 GMT
From:      Lyubomir Grigorov <lyubomir@grigorovl.eu>
To:        freebsd-gnats-submit@FreeBSD.org
Subject:   powerpc/164225: Boot fails on IBM 7028-6E1 (heap memory claim failed)
Message-ID:  <201201162246.q0GMkIns083748@red.freebsd.org>
Resent-Message-ID: <201201162250.q0GMo6Yo005565@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         164225
>Category:       powerpc
>Synopsis:       Boot fails on IBM 7028-6E1 (heap memory claim failed)
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-ppc
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Mon Jan 16 22:50:06 UTC 2012
>Closed-Date:
>Last-Modified:
>Originator:     Lyubomir Grigorov
>Release:        9.0-RELEASE
>Organization:
>Environment:
n/a
>Description:
When booting 9.0-RELEASE (32bit ppc) on IBM pSeries 610 (7028-6E1), going to SMS, choosing install device CD-ROM, choosing FreeBSD 9.0, it fails with:
Heap memory claim failed!

I traced the source to the following 3 files:

sys/boot/ofw/common/main.c
..
..
48 #define HEAP_SIZE       0x80000
..
52 void
53 init_heap(void)
54 {
55         void    *base;
56         ihandle_t stdout;
57 
58         if ((base = ofw_alloc_heap(HEAP_SIZE)) == (void *)0xffffffff) {
59                 OF_getprop(chosen, "stdout", &stdout, sizeof(stdout));
60                 OF_puts(stdout, "Heap memory claim failed!\n");
61                 OF_enter();
62         }
63 
64         setheap(base, (void *)((int)base + HEAP_SIZE));
65 }
..
..

sys/boot/ofw/libofw/ofw_memory.c
..
..
119 ofw_alloc_heap(unsigned int size)
120 {
121         phandle_t       memoryp, root;
122         cell_t          available[4];
123         cell_t          acells;
124 
125         root = OF_finddevice("/");
126         acells = 1;
127         OF_getprop(root, "#address-cells", &acells, sizeof(acells));
128 
129         memoryp = OF_instance_to_package(memory);
130         OF_getprop(memoryp, "available", available, sizeof(available));
131 
132         heap_base = OF_claim((void *)available[acells-1], size,
133             sizeof(register_t));
134 
135         if (heap_base != (void *)-1) {
136                 heap_size = size;
137         }
138 
139         return (heap_base);
140 }
..
..


sys/boot/ofw/libofw/openfirm.c
..
..
617 /* Claim an area of memory. */
618 void *
619 OF_claim(void *virt, u_int size, u_int align)
620 {
621         static struct {
622                 cell_t name;
623                 cell_t nargs;
624                 cell_t nreturns;
625                 cell_t virt;
626                 cell_t size;
627                 cell_t align;
628                 cell_t baseaddr;
629         } args = {
630                 (cell_t)"claim",
631                 3,
632                 1,
633         };
634 
635         args.virt = (cell_t)virt;
636         args.size = size;
637         args.align = align;
638         if (openfirmware(&args) == -1)
639                 return ((void *)-1);
640         return ((void *)args.baseaddr);
641 }
..
..

I noticed that the NetBSD version only does:
sys/arch/macppc/stand/ofwboot/Locore.c
..
442 return args.baseaddr;
..
>How-To-Repeat:
Boot from FreeBSD 9.0 CD on an IBM 7028-6E1 or 7028-6C1.
>Fix:


>Release-Note:
>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201201162246.q0GMkIns083748>