[OpenBIOS] Getting Closer With Booting AIX? I Would Like to Help Please.

Kenneth Salerno kennethsalerno at yahoo.com
Tue May 24 15:17:55 CEST 2011


----- Original Message -----

> From: Mark Cave-Ayland <mark.cave-ayland at siriusit.co.uk>
> To: openbios at openbios.org
> Cc: 
> Sent: Tuesday, May 24, 2011 5:56 AM
> Subject: Re: [OpenBIOS] Getting Closer With Booting AIX? I Would Like to Help Please.
> 
> On 23/05/11 22:36, Kenneth Salerno wrote:
> 
>>  Andreas, here is the behavior I'm seeing: if I set the memory 
> allocation to 259M, I get this fatal error just as it finishes reading 
> cd:,\ppc\bootinfo.txt:
>> 
>>>>  OFMEM: ofmem_claim 0000412c 00000040 00000000
>>>>  OFMEM: ofmem_map_page_range 00004000 ->  0000000000004000 
> 00001000 mode 00000002
>>>>  OFMEM: ofmem_claim 0000416c 00ecc600 00000000
>>>>  OFMEM: ofmem_map_page_range 00004000 ->  0000000000004000 
> 00ecd000 mode 00000002
>>>>  OFMEM: ofmem_claim 0fe00000 00200000 00000000
>>>>  OFMEM: **** ofmem_claim failure ***!
> 
> Now that's interesting. The above message comes from this snippet of code 
> here (libopenbios/ofmem_common.c:606):
> 
>     if( !align ) {
>         if( is_free(addr, size, ofmem->virt_range) &&
>             is_free(addr, size, ofmem->phys_range) ) {
>                 ofmem_claim_phys_( addr, size, 0, 0, 0, 0 );
>                 ofmem_claim_virt_( addr, size, 0, 0, 0, 0 );
>                 virt = phys = addr;
>         } else {
>             OFMEM_TRACE("**** ofmem_claim failure ***!\n");
>             return -1;
>         }
>     }
> 
> So what is happening is that OFMEM is failing to claim either the physical or 
> virtual address for that particular section of memory. Looking further, it seems 
> that the secret is actually in the numbers:
> 
> 0xfe00000 = 266M
> 
> Because in the above code we claim both physical and virtual memory at the same 
> address, then the above will only be valid with at least 260M of RAM.
> 
> Now I understand this better, I'm beginning to think that since these 
> routines are called by the MMU node claim functions, in actual fact it is just 
> the virtual address that is being specified and hence we should just allocate 
> the next free physical address rather than creating a 1:1 virtual to physical 
> mapping.
> 
> What happens if you change the physical allocation in the section above to the 
> following?
> 
>     ofmem_claim_phys_( 0, size, PAGE_SIZE, 0, ofmem_arch_get_phys_top(), -1 );
> 
> That should pick the next free page-aligned physical region instead, and 
> therefore guarantee that the allocated range will lie within the physical 
> machine RAM.
> 
> 
> ATB,
> 
> Mark.
> 
> -- Mark Cave-Ayland - Senior Technical Architect
> PostgreSQL - PostGIS
> Sirius Corporation plc - control through freedom
> http://www.siriusit.co.uk
> t: +44 870 608 0063
> 
> Sirius Labs: http://www.siriusit.co.uk/labs
> 
> -- OpenBIOS                 http://openbios.org/
> Mailinglist:  http://lists.openbios.org/mailman/listinfo
> Free your System - May the Forth be with you
>


Changed code as requested:

        if( !align ) {
            OFMEM_TRACE("we are here! KPS\n");
                if( is_free(addr, size, ofmem->virt_range) &&
                    is_free(addr, size, ofmem->phys_range) ) {
                        ofmem_claim_phys_( 0, size, PAGE_SIZE, 0, ofmem_arch_get_phys_top(), -1 );
                        ofmem_claim_virt_( addr, size, 0, 0, 0, 0 );
                        virt = phys = addr;
                } else {
                        OFMEM_TRACE("**** ofmem_claim failure ***!\n");
                        return -1;
                }

Same result however:

>> OFMEM: ofmem_claim 0000412c 00000040 00000000
>> OFMEM: we are here! KPS
>> OFMEM: ofmem_map_page_range 00004000 -> 0000000000004000 00001000 mode 00000002
>> OFMEM: ofmem_claim 0000416c 00ecc600 00000000
>> OFMEM: we are here! KPS
>> OFMEM: ofmem_map_page_range 00004000 -> 0000000000004000 00ecd000 mode 00000002
>> OFMEM: ofmem_claim 0fe00000 00200000 00000000
>> OFMEM: we are here! KPS
>> OFMEM: **** ofmem_claim failure ***!

Only now when I try -m 260 I'm getting the error either way:

>> OFMEM: ofmem_claim 0000412c 00000040 00000000
>> OFMEM: we are here! KPS
>> OFMEM: ofmem_map_page_range 00004000 -> 0000000000004000 00001000 mode 00000002
>> OFMEM: ofmem_claim 0000416c 00ecc600 00000000
>> OFMEM: we are here! KPS
>> OFMEM: ofmem_map_page_range 00004000 -> 0000000000004000 00ecd000 mode 00000002
>> OFMEM: ofmem_claim 0fe00000 00200000 00000000
>> OFMEM: we are here! KPS
>> OFMEM: **** ofmem_claim failure ***!

If I put -m 512 it works:

>> OFMEM: ofmem_claim 0000412c 00000040 00000000
>> OFMEM: we are here! KPS
>> OFMEM: ofmem_map_page_range 00004000 -> 0000000000004000 00001000 mode 00000002
>> OFMEM: ofmem_claim 0000416c 00ecc600 00000000
>> OFMEM: we are here! KPS
>> OFMEM: ofmem_map_page_range 00004000 -> 0000000000004000 00ecd000 mode 00000002
>> OFMEM: ofmem_claim 0fe00000 00200000 00000000
>> OFMEM: we are here! KPS
>> OFMEM: ofmem_map_page_range 0fe00000 -> 000000000fe00000 00200000 mode 00000002

If I revert back to the original code, I can use -m 260 again:

>> OFMEM: ofmem_claim 0000412c 00000040 00000000
>> OFMEM: we are here! KPS
>> OFMEM: ofmem_map_page_range 00004000 -> 0000000000004000 00001000 mode 00000002
>> OFMEM: ofmem_claim 0000416c 00ecc600 00000000
>> OFMEM: we are here! KPS
>> OFMEM: ofmem_map_page_range 00004000 -> 0000000000004000 00ecd000 mode 00000002
>> OFMEM: ofmem_claim 0fe00000 00200000 00000000
>> OFMEM: we are here! KPS
>> OFMEM: ofmem_map_page_range 0fe00000 -> 000000000fe00000 00200000 mode 00000002


Ken




More information about the OpenBIOS mailing list