Subject: CVS commit: syssrc [sommerfeld_i386mp_1]
To: None <source-changes@netbsd.org>
From: Bill Sommerfeld <sommerfeld@netbsd.org>
List: source-changes
Date: 05/13/2001 01:28:16
Module Name:	syssrc
Committed By:	sommerfeld
Date:		Sat May 12 22:28:16 UTC 2001

Modified Files:
	syssrc/sys/arch/i386/i386 [sommerfeld_i386mp_1]: mpbios.c

Log Message:
Compensate for creative misinterpretation of the MP BIOS spec by the
big Q.

Intel MP spec, version 1.4, section 4.3.2, page 4-10:
	"BUS ID..  An integer that identifies this bus entry.  The
	BIOS assigns identifiers sequentially, starting at 0"

Compaq Proliant 6500 BIOS:
	BUS 0: PCI
	BUS 1: PCI
	BUS 17: EISA

Due to a missing range check in mpbios.c, we allocated an mp_bus array
sized for 3 entries, and then stored the EISA info into mp_bus[17],
which happened to overlay a half dozen buckets near the start of the
name-to-vnode cache hash table.  Carnage generally resulted the first
time the system examined those hash buckets (faulting at
cache_lookup+0x67 or thereabouts), generally when running rc scripts.

With this change, we allocate a table large enough to hold from 0 to
the largest bus id seen, and no longer count on the bios to densly
pack bus id's.


To generate a diff of this commit:
cvs rdiff -r1.1.2.11 -r1.1.2.12 syssrc/sys/arch/i386/i386/mpbios.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.