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