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