page fault panic in device_get_softc/acpi_pcib_route_interrupt

John Baldwin jhb at FreeBSD.org
Fri Jan 7 11:51:30 PST 2005


On Friday 07 January 2005 01:38 pm, Nate Lawson wrote:
> Pawel Worach wrote:
> > Nate Lawson wrote:
> >> Pawel Worach wrote:
> >>> I do not even see the code enter acpi_pci_link_attach(), even added a
> >>> dummy
> >>> printf at the top of the method.
> >>
> >> That's a problem.  If the link isn't attached, you can't route
> >> interrupts by it.  Try adding this to  the if statemetns in
> >> sys/dev/acpica/acpi.c:acpi_probe_order() --
> >>
> >>     /* attach pci links early */
> >>     } else if (acpi_MatchHid(handle, "PNP0C0F")) {
> >>     *order = 3;
> >>     ret = 1;
> >>     }
> >
> > acpi_probe_order() is called 26 times but PNP0C0F never seems to match
> > the handle passed to it.
>
> Oh, I think I know where I didn't understand John.  He doesn't probe
> links through the normal namespace probe, he goes through _PRT,
> dereferencing Source and probing those directly.  Since your PCI bus
> appears in the namespace before the links, the above does not get called
>   before the crash.  It's been a rough week, hence I'm more dense.  :)
>
> A separate problem with this, John, is that you get a different _PRT
> based on whether in APIC mode or not.  So a link that is only referenced
> in PIC mode _PRT, for instance, will never be disabled on an APIC
> machine (since we enable APIC before PCI routing.)  We'd never see it if
> only probing links through _PRT.  I think it would be better to attach
> them through normal namespace methods and use the probe_order hack
> above.  The only thing it could potentially interfere with is
> sysresource, but since IRQ resources come from nexus above and are not
> defined in memory/IO port sysresource objects, there should be no actual
> conflict.

Err, I just use the _PRT walk to force the device_t to attach if it doesn't 
already.  The device will always attach though, even it's not referenced, it 
just does so in the regular new-bus order, so all links are probed, and ones 
that aren't referenced by any _PRT's that we parse do get disabled via _DIS.

> The ASL patch John just sent should fix your issue.  My question if this
> works is why it just started occuring and also, what the proper handle
> to use is for relative references (i.e., why didn't AcpiGetHandle(ROOT,
> "LPUS") work since \LPUS is right under the root?)

Yes, this is a good question, and I'm not sure my ASL patch will fix his 
problem.  I wonder if he is getting back a NULL ACPI_HANDLE?

-- 
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