From owner-freebsd-current@FreeBSD.ORG Fri Jan 16 16:52:53 2009 Return-Path: Delivered-To: freebsd-current@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id DB3F41065672 for ; Fri, 16 Jan 2009 16:52:53 +0000 (UTC) (envelope-from dimitry@andric.com) Received: from tensor.andric.com (cl-327.ede-01.nl.sixxs.net [IPv6:2001:7b8:2ff:146::2]) by mx1.freebsd.org (Postfix) with ESMTP id 9F0288FC08 for ; Fri, 16 Jan 2009 16:52:53 +0000 (UTC) (envelope-from dimitry@andric.com) Received: from [IPv6:2001:7b8:3a7:0:2535:e527:6aaa:357a] (unknown [IPv6:2001:7b8:3a7:0:2535:e527:6aaa:357a]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by tensor.andric.com (Postfix) with ESMTPSA id 8C05511F838; Fri, 16 Jan 2009 17:52:52 +0100 (CET) Message-ID: <4970BB63.7030601@andric.com> Date: Fri, 16 Jan 2009 17:52:51 +0100 From: Dimitry Andric User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.9.1b3pre) Gecko/20090108 Shredder/3.0b2pre MIME-Version: 1.0 To: Attila Nagy References: <496B115F.1000105@fsn.hu> In-Reply-To: <496B115F.1000105@fsn.hu> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Cc: freebsd-current@freebsd.org Subject: Re: FreeBSD panics with 64GiB of RAM X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 16 Jan 2009 16:52:54 -0000 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. ;)