[haiku-bugs] Re: [Haiku] #9180: PANIC: unable to find irq routing for PCI 1:0:1

  • From: "mmlr" <trac@xxxxxxxxxxxx>
  • Date: Tue, 20 Nov 2012 15:11:50 -0000

#9180: PANIC: unable to find irq routing for PCI 1:0:1
-----------------------------+-----------------------------
   Reporter:  Joshua         |      Owner:  mmlr
       Type:  bug            |     Status:  in-progress
   Priority:  normal         |  Milestone:  R1
  Component:  System/Kernel  |    Version:  R1/Development
 Resolution:                 |   Keywords:  pci irq routing
 Blocked By:                 |   Blocking:  7665
Has a Patch:  0              |   Platform:  x86
-----------------------------+-----------------------------
Changes (by mmlr):

 * owner:  axeld => mmlr
 * status:  new => in-progress


Comment:

 One thing is for certain: The error should actually propagate upwards and
 cause the IO-APIC not to be used. I'm going to fix this later on, though
 it will probably cause a regression for you until the root cause is fixed.

 I've noticed that both of the machines, the one here and the one in #9165
 are of the Pentium 4 era. These are still relatively "early" in ACPI terms
 and may not really do things like it is done for current hardware. At
 least having the PCI Express bus separately is not so common on current
 implementations AFAICT.

 It is theoretically possible to map the separate PCIe roots to PCI busses,
 but it requires the use of the _BBN field and comparing it to the BIOS set
 bus number on the PCI host bridge. This is at least inconvenient for
 Haiku, as the PCI module already sets up the busses and by that overwrites
 the BIOS configured bus numbers before the interrupt routing is
 determined. So to implement this mapping one would have to store these
 original values somehow in the PCI module and expose a way to get at them.

 In current hardware implementations the PCIe host bridges are usually
 enumerated as PCI devices under the normal PCI root (this is the case here
 as well from a PCI point of view) and then the ACPI tables simply follow
 that and put the PCIe root as a device node on the PCI parent. This way a
 simple 1:1 mapping while enumerating both busses can be done. This is what
 is currently implemented in Haiku.

 A possibly better approach to this whole mess and back and forth with PCI
 would be to make the PCI module responsible for the whole interrupt
 routing mechanism. This would make sense as what is currently done is
 really just PCI interrupt routing, not any kind of other interrupt routing
 (as there aren't any other interrupt sources that use this kind of routing
 on x86). So putting it in the PCI module would make sense. It would reduce
 the knowledge and redundancy the kernel has about PCI for this task at
 least, which would be much cleaner.

-- 
Ticket URL: <http://dev.haiku-os.org/ticket/9180#comment:4>
Haiku <http://dev.haiku-os.org>
Haiku - the operating system.

Other related posts: