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

John Baldwin jhb at FreeBSD.org
Tue Nov 23 11:20:36 PST 2004


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


More information about the freebsd-current mailing list