Date: Sat, 17 Jan 2009 17:57:34 +0100 From: Attila Nagy <bra@fsn.hu> To: Maxim Sobolev <sobomax@FreeBSD.org> Cc: Dimitry Andric <dimitry@andric.com>, freebsd-current@FreeBSD.org Subject: Re: FreeBSD panics with 64GiB of RAM Message-ID: <49720DFE.3080808@fsn.hu> In-Reply-To: <4970E8C0.1080005@FreeBSD.org> References: <496B115F.1000105@fsn.hu> <4970BB63.7030601@andric.com> <4970E8C0.1080005@FreeBSD.org>
next in thread | previous in thread | raw e-mail | index | archive | help
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) > @@ -1089,7 +1091,13 @@ > } > } > 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@freebsd.org mailing list >> http://lists.freebsd.org/mailman/listinfo/freebsd-current >> To unsubscribe, send any mail to >> "freebsd-current-unsubscribe@freebsd.org" >> >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?49720DFE.3080808>