Subject: port-i386/14435: i386 machdep.c patch
To: None <gnats-bugs@gnats.netbsd.org>
From: None <feico@pasta.cs.uit.no>
List: netbsd-bugs
Date: 11/02/2001 14:11:11
>Number: 14435
>Category: port-i386
>Synopsis: assymetry between old and new bootcode in i386/machdep.c
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: port-i386-maintainer
>State: open
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Fri Nov 02 05:17:00 PST 2001
>Closed-Date:
>Last-Modified:
>Originator: Feico Dillema
>Release: NetBSD 1.5Y
>Organization:
University of Tromsų
>Environment:
System: NetBSD drifter.dillema.net 1.5Y NetBSD 1.5Y (DRIFTER) #6: Thu Nov 1 17:29:22 CET 2001 root@drifter.dillema.net:/usr/cvs/netbsd-current/sys/arch/i386/compile/DRIFTER i386
Architecture: i386
Machine: i386
>Description:
i386/machdep.c has two different code paths for registring the physical memory
in a machine at boottime. The first use add_mem_cluster() and the second is the
`old style' code that is used when add_mem_cluster() fails for some reason or
when kernel options REALBASEMEM and REALEXTMEM are set.
While debugging my problem with booting a Compaq Proliant Server I stumbled
across some descrepancy between the two code paths. I believed fixing that
would solve my problem with the Compaq. It didn't, as I found out my problem
was caused by the bootloader I was using (Grub).
Even though it did not solve my problem, I still think my patch is relevant.
How relevant, is up to somebody who is more knowledgeable on these things
than me to decide.
>How-To-Repeat:
NA. Only report a fix, not a problem it actually fixes...
>Fix:
Here's the patch against for sys/arch/i386/i386:
/* $NetBSD: machdep.c,v 1.457 2001/09/19 01:26:19 thorpej Exp $ */
--- machdep.c.orig Fri Nov 2 13:56:26 2001
+++ machdep.c Fri Nov 2 13:57:03 2001
@@ -2546,11 +2546,14 @@
#endif
mem_clusters[1].start = IOM_END;
mem_clusters[1].size = trunc_page(KBTOB(biosextmem));
+ if ((mem_clusters[1].start + mem_clusters[1].size) == 0x100000000ULL)
+ mem_clusters[1].size -= PAGE_SIZE;
+
physmem += atop(mem_clusters[1].size);
mem_cluster_cnt = 2;
- avail_end = IOM_END + trunc_page(KBTOB(biosextmem));
+ avail_end = mem_clusters[1].start + mem_clusters[1].size;
}
/*
>Release-Note:
>Audit-Trail:
>Unformatted: