Re: FreeBSD panics with 64GiB of RAM

From: Attila Nagy <bra_at_fsn.hu>
Date: Sat, 17 Jan 2009 17:57:34 +0100
Hello,

I've already tried something similar. The effect of the patch is this:
http://people.fsn.hu/~bra/freebsd/20090107-freebsd-x4540/Screenshot-70.png

BTW, this:
ftp://ftp.freebsd.org/pub/FreeBSD/snapshots/200812/8.0-CURRENT-200812-amd64-bootonly.iso
boots up fine (to sysinstall).
I haven't installed FreeBSD for years (I'm using netboot), is this i386?
That could explain the situation.

Maxim Sobolev wrote:
> Atilla,
>
> Try the following patch  (basically replace panic() with basemem = 640 
> and let us know:
>
> Index: sys/amd64/amd64/machdep.c
> ===================================================================
> --- sys/amd64/amd64/machdep.c   (revision 185808)
> +++ sys/amd64/amd64/machdep.c   (working copy)
> _at__at_ -1089,7 +1091,13 _at__at_
>                 }
>         }
>         if (basemem == 0)
> -               panic("BIOS smap did not include a basemem segment!");
> +               basemem = 640;
> +       if (basemem > 640) {
> +               printf(
> +                   "Preposterous BIOS basemem of %uK, truncating to 
> 640K\n",
> +                   basemem);
> +               basemem = 640;
> +       }
>
>  #ifdef SMP
>         /* make hole for AP bootstrap code */
>
> -Maxim
>
> Dimitry Andric wrote:
>> On 2009-01-12 10:46, Attila Nagy wrote:
>>> FreeBSD-CURRENT/amd64 panics at initialization with this:
>>> http://people.fsn.hu/~bra/freebsd/20090107-freebsd-x4540/Screenshot-55.png 
>>>
>>> on a Sun X4550, equipped with two Opteron CPUs and 64 GiB of RAM.
>>
>> Looks like a BIOS problem, the memory map doesn't include any segment
>> that starts at 0.  This memory map seems to be provided by the loader,
>> as stated in /usr/src/sys/amd64/amd64/machdep.c:
>>
>>     static void
>>     getmemsize(caddr_t kmdp, u_int64_t first)
>>     {
>>         [...]
>>         /*
>>          * get memory map from INT 15:E820, kindly supplied by the 
>> loader.
>>         [...]
>>         /*
>>          * Find the 'base memory' segment for SMP
>>          */
>>         basemem = 0;
>>         for (i = 0; i <= physmap_idx; i += 2) {
>>             if (physmap[i] == 0x00000000) {
>>                 basemem = physmap[i + 1] / 1024;
>>                 break;
>>             }
>>         }
>>         if (basemem == 0)
>>             panic("BIOS smap did not include a basemem segment!");
>>         [...]
>>
>> Funny though, the i386 equivalent has:
>>
>>     static void
>>     getmemsize(int first)
>>     {
>>         [...]
>>         /*
>>          * Perform "base memory" related probes & setup based on SMAP
>>          */
>>         if (basemem == 0) {
>>             for (i = 0; i <= physmap_idx; i += 2) {
>>                 if (physmap[i] == 0x00000000) {
>>                     basemem = physmap[i + 1] / 1024;
>>                     break;
>>                 }
>>             }
>>
>>             /*
>>              * XXX this function is horribly organized and has to the 
>> same
>>              * things that it does above here.
>>              */
>>             if (basemem == 0)
>>                 basemem = 640;
>>             if (basemem > 640) {
>>                 printf(
>>                 "Preposterous BIOS basemem of %uK, truncating to 
>> 640K\n",
>>                     basemem);
>>                 basemem = 640;
>>             }
>>
>> E.g. if it can't find the SMAP segment required, it just assumes 640k...
>> should be enough for everone. ;)
>> _______________________________________________
>> freebsd-current_at_freebsd.org mailing list
>> http://lists.freebsd.org/mailman/listinfo/freebsd-current
>> To unsubscribe, send any mail to 
>> "freebsd-current-unsubscribe_at_freebsd.org"
>>
>
Received on Sat Jan 17 2009 - 15:57:38 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:40 UTC