NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: kern/43570: Avoid multiple interrupt routing lists for a bus



The following reply was made to PR kern/43570; it has been noted by GNATS.

From: Jukka Ruohonen <jruohonen%iki.fi@localhost>
To: gnats-bugs%NetBSD.org@localhost
Cc: 
Subject: Re: kern/43570: Avoid multiple interrupt routing lists for a bus
Date: Sat, 10 Jul 2010 10:25:23 +0300

 On Sun, Jul 04, 2010 at 02:15:00PM +0000, paul%whooppee.com@localhost wrote:
 >      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.
 
 I'll note here the conclusion we reached with Paul and Gregoire after a long
 discussion. The right solution is likely to skip all devices downstream of
 an absent, non-working, or inactive (according to _STA in the ACPI jargon)
 PCI bridges.
 
 The following patch from Gregoire Sutre addresses the problem in a way that
 is likely to be closer to the correct solution. The earlier patch from Paul
 should probably go in as well, at least to print a warning if the code tries
 to overwrite something.
 
 Index: sys/arch/x86/x86/mpacpi.c
 ===================================================================
 RCS file: /cvsroot/src/sys/arch/x86/x86/mpacpi.c,v
 retrieving revision 1.87
 diff -u -r1.87 mpacpi.c
 --- sys/arch/x86/x86/mpacpi.c  27 Apr 2010 05:34:14 -0000      1.87
 +++ sys/arch/x86/x86/mpacpi.c  5 Jul 2010 13:28:42 -0000
 @@ -622,7 +622,9 @@
                if (ACPI_FAILURE(rv))
                        goto out;
  
 -              if (acpi_match_hid(devinfo, pciroot_hid)) {
 +              if (acpi_match_hid(devinfo, pciroot_hid) &&
 +                  ((devinfo->Valid & ACPI_VALID_STA) == 0 ||
 +                   (devinfo->CurrentStatus & ACPI_STA_OK) == ACPI_STA_OK)) {
                        rv = mpacpi_get_bbn(acpi, parent, &bus);
                        if (ACPI_FAILURE(rv))
                                bus = 0;
 


Home | Main Index | Thread Index | Old Index