NetBSD-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
kern/43570: Avoid multiple interrupt routing lists for a bus
>Number: 43570
>Category: kern
>Synopsis: Avoid multiple interrupt routing lists for a bus
>Confidential: no
>Severity: serious
>Priority: high
>Responsible: kern-bug-people
>State: open
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Sun Jul 04 14:15:00 +0000 2010
>Originator: Paul Goyette
>Release: NetBSD 5.99.31
>Organization:
-------------------------------------------------------------------------
| Paul Goyette | PGP Key fingerprint: | E-mail addresses: |
| Customer Service | FA29 0E3B 35AF E8AE 6651 | paul at whooppee.com |
| Network Engineer | 0786 F758 55DE 53BA 7731 | pgoyette at juniper.net |
| Kernel Developer | | pgoyette at netbsd.org |
-------------------------------------------------------------------------
>Environment:
System: NetBSD quicky.whooppee.com 5.99.31 NetBSD 5.99.31 (QUICKY (XFX nForce
790i ULTRA) 2010-06-20 00:30:00) #0: Sat Jun 19 18:19:27 PDT 2010
paul%speedy.whooppee.com@localhost:/build-out/netbsd-local/obj/amd64/sys/arch/amd64/compile/QUICKY
amd64
Architecture: x86_64
Machine: amd64
>Description:
Some BIOS have "spurious" routing tables, for PCI busses that
are not actually enabled. One such motherboard is the SuperMicro
H8QGi-F, which reports a host bridge at PC40 with two child busses
2 and 3, in addition to the real host bridge at PC0 (which has
child busses 2 and 3 as well as 1). The routing tables for the
spurious busses 2 and 3 _override_ the real routing tables for
the valid bus2 and bus 3 entries.
>How-To-Repeat:
Boot NetBSD on a SuperMicro H8QGi-F.
>Fix:
The following patch is most likely not a correct solution, but
it does avoid having the second routing table (for the spurious
instances of bus 2 and bus 3) overwrite the first, real, table.
Index: mpacpi.c
===================================================================
RCS file: /cvsroot/src/sys/arch/x86/x86/mpacpi.c,v
retrieving revision 1.87
diff -u -p -r1.87 mpacpi.c
--- mpacpi.c 27 Apr 2010 05:34:14 -0000 1.87
+++ mpacpi.c 3 Jul 2010 22:39:34 -0000
@@ -783,6 +783,13 @@ mpacpi_pciroute(struct mpacpi_pcibus *mp
mpr->mpr_bus);
mpb = &mp_busses[mpr->mpr_bus];
+
+ if (mpb->mb_name != NULL) { /* PRG */
+ printf("mpacpi: PCI bus %d int routing already done!\n",
+ mpr->mpr_bus);
+ return 0;
+ }
+
mpb->mb_intrs = NULL;
mpb->mb_name = "pci";
mpb->mb_idx = mpr->mpr_bus;
>Unformatted:
Home |
Main Index |
Thread Index |
Old Index