FreeBSD panics with 64GiB of RAM
Dimitry Andric
dimitry at andric.com
Fri Jan 16 08:52:54 PST 2009
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. ;)
More information about the freebsd-current
mailing list