Transparent bridges (a. k. a. HUB-to-PCI bridges)?

Wilkinson, Alex alex.wilkinson at dsto.defence.gov.au
Tue Nov 23 16:33:23 PST 2004


Trying to understand your nomenclature John, so that I can follow this thread.

Can you please elaborate on the following .... please ;-\

1. PCI bridges 
   - Host-PCI
   - PCI-PCI

2. OOPish device object (device_t) ? 

3. $PIR table 

 - aW
   


0n Tue, Nov 23, 2004 at 01:43:22PM -0500, John Baldwin wrote: 

> On Tuesday 23 November 2004 12:26 pm, Jung-uk Kim wrote:
> > While I was booting Linux, I saw a 'transparent bridge' from dmesg and
> > started digging up because I was fighting against 'interrupt
> > storming' and 'stray IRQ' problems with the latest Intel chipsets
> > recently and I had a feeling that it's somehow related.
> >
> > http://lxr.linux.no/source/drivers/pci/probe.c?v=2.6.8.1#L195
> > http://lxr.linux.no/source/arch/i386/pci/fixup.c?v=2.6.8.1#L192
> > http://lxr.linux.no/source/arch/i386/pci/irq.c?v=2.6.8.1#L870
> > http://lxr.linux.no/source/arch/i386/pci/irq.c?v=2.6.8.1#L1017
> >
> > But I don't see any special treatment in FreeBSD's PCI driver.
> >
> > 1.  Is this relevant for FreeBSD?
> > 2.  Is this related to the problems (esp. SMP)?
> 
> First of all, I have no idea what type of interrupt routing problems you are 
> having, but as for the above:
> 
> FreeBSD uses a much simpler way of managing PCI interrupt routing.  In 
> FreeBSD, each hardware device (including PCI bridges (whether Host-PCI or 
> PCI-PCI) and PCI busses) have an OOPish device object (device_t) associated 
> with them.  You can see the tree structure via 'devinfo'.  The way FreeBSD 
> implements interrupt routing is that each PCI bridge driver provides a method 
> for determining the IRQ associated with a given bus/device/pin tuple.  (The 
> bus is implicit since each bridge only handles requests for its immediate 
> downstream bus.) In order to make use of the several different ways of 
> determining interrupt routing, there are several different PCI bridge drivers 
> for both Host-PCI and PCI-PCI bridges.  For example, there are ACPI Host-PCI 
> and PCI-PCI bridge drivers that will route interrupts using the _PRT table 
> objects provided by ACPI for busses in ACPI's namespace.  Also, there are 
> PCIBIOS bridge drivers to handle routing for the non-ACPI non-APIC case using 
> the information in the $PIR table.  Similarly, for the non-ACPI APIC case, 
> there are MP Table bridge drivers to route interrupts for busses that are 
> listed in the MP Table.  If a PCI-PCI bridge is not enumerated in ACPI space 
> on an ACPI system or is not listed in either the $PIR (non-APIC) or MP Table 
> (APIC) on a non-ACPI system, then the bridge will be probed via the simple 
> PCI-PCI bridge driver which does the standard barber-pole swizzle to route 
> interrupts based off the intpins on the bridge device's upstream connection.  
> Thus, for "transparent" bridges not listed in the MP Table, the MP Table 
> driver won't attach and it will fall back to the simple PCI-PCI bridge driver 
> and just work.
> 
> Now, back to your original problem: what type of interrupt problems are you 
> having?
> 
> -- 
> John Baldwin <jhb at FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
> "Power Users Use the Power to Serve"  =  http://www.FreeBSD.org
> _______________________________________________
> freebsd-current at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-current
> To unsubscribe, send any mail to "freebsd-current-unsubscribe at freebsd.org"
> 


More information about the freebsd-current mailing list