From questions.612 at gmail.com Mon Sep 22 03:34:13 2008 From: questions.612 at gmail.com (questions) Date: Mon Sep 22 03:34:17 2008 Subject: Suspicious physical memory map from BIOS In-Reply-To: References: Message-ID: Hi, I am sorry if this isn't the correct mailing list to ask my question. Actually, I posted this on freebsd-questions list but didn't get any reply. I couldn't find any better mailing list to post this question on. I have some problem with physical memory being getting reported incorrectly on Freebsd 6.3. I have a Xeon series 5300 CPU with 4GB of RAM installed but BIOS call actually returns following usable physical memory map - base address = 0, length = 640K base address = 1M, length = 2.5G base address = 4G, length = 5.5G How am I getting this third segment? Also, in function getmemsize() in machdep.c, why the variable 'Maxmem' is set to 'Maxmem*4' when hw.physmem and the highest page number obtained from physical memory map don't match? Any help with this would be wonderful. Thanks, Fahad From jhb at freebsd.org Mon Sep 22 22:29:36 2008 From: jhb at freebsd.org (John Baldwin) Date: Mon Sep 22 22:29:38 2008 Subject: Suspicious physical memory map from BIOS In-Reply-To: References: Message-ID: <200809221806.25680.jhb@freebsd.org> On Sunday 21 September 2008 11:08:27 pm questions wrote: > Hi, > > I am sorry if this isn't the correct mailing list to ask my question. > Actually, I posted this on freebsd-questions list but didn't get any reply. > I couldn't find any better mailing list to post this question on. > > I have some problem with physical memory being getting reported incorrectly > on Freebsd 6.3. I have a Xeon series 5300 CPU with 4GB of RAM installed but > BIOS call actually returns following usable physical memory map - > > base address = 0, length = 640K > base address = 1M, length = 2.5G > base address = 4G, length = 5.5G > > How am I getting this third segment? The 2.5g -> 4g window of address space is used for non-memory things like APICs (local APICs and I/O APICs), PCI memio, etc. > Also, in function getmemsize() in machdep.c, why the variable 'Maxmem' is > set to 'Maxmem*4' when hw.physmem and the > highest page number obtained from physical memory map don't match? It's not set to that, it is used for a printf. Maxmem is a count of pages. Each page on i386 holds 4K. The printf wants to print out the number of kilobytes, so it uses 'Maxmem * 4' to convert from number of 4k pages, to number of K. -- John Baldwin