On Fri, 2006-09-01 at 09:19 +0800, keith mannthey wrote:
> On Thu, 2006-08-31 at 17:06 -0600, Bjorn Helgaas wrote:
> > On Thursday 31 August 2006 10:48, keith mannthey wrote:
> > > On Thu, 2006-08-31 at 02:48 -0400, Len Brown wrote:
> > > > On Tuesday 29 August 2006 16:04, Moore, Robert wrote:
> > > > > As far as the unknown exception,
> > > > >
> > > > > >[ 9.392729] [<c0246fb6>] acpi_ut_status_exit+0x31/0x5e
> > > > > >[ 9.393453] [<c0243352>] acpi_walk_resources+0x10e/0x11b
> > > > > >[ 9.394174] [<c025697e>] acpi_motherboard_add+0x22/0x31
> > > > >
> > > > > I would guess that the callback routine for walk_resources is
> returning
> > > > > a non-zero status value which is causing an immediate abort of
> the walk
> > > > > with that value -- and the value is bogus.
> > >
> > > Before I put this check in acpi_motherboard_add always attached
> itself
> > > to any resource type. I simply changed it so if the type is not
> > > ACPI_RESOURCE_TYPE_IO or ACPI_RESOURCE_TYPE_FIXED_IO it doesn't
> attach
> > > and can continue to find the correct device to attach to.
> > >
> > > Perhaps the motherboard device needs to attach to more device
> types?
> > >
> > > It was suggest by acpi folks to return -EINVAL. Should
> something else
> > > be returned?
> >
> > Problem 1: acpi_reserve_io_ranges() needs to return an acpi_status
> > like AE_OK or AE_CTRL_TERMINATE, not a -EINVAL.
>
> Sure great sounds. I understand AE_OK is a 0 return so I can change
> it
> to AE_CTRL_TERMINATE. I don't want acpi_reserve_io_ranges to return
> a
> happy state when if finds a resource type is doesn't know.
>
> > Problem 2: I don't understand how your patch works. An ACPI device
> > has a list of resources it uses. Are you saying that claiming all
> > the IO port resources of a PNP0C01 or PNP0C02 device causes the
> ACPI
> > memory hotplug driver to fail?
> >
> I don't know a whole heck of a lot about ACPI but let me try and
> explain the situation as best I can. I will attach my SSDT as well.
> Memory devices are PNP0C80.
>
> What the acpi_memory_device_driver is loaded in the system and you
> do
> a hot-add event the following call path takes place...
>
> acpi_memory_get_device
> acpi_bus_add
> acpi_add_single_object
> acpi_bus_find_driver
> acpi_bus_driver_init
> driver->ops.add
>
> The problem is the motherboard driver driver->ops.add is called
> before
> my memory device is scanned and it ALWASY returns AE_OK. Such that
> the
> device that is passed back up to that acpi_memory_get_device is NOT
> the
> memory_device_driver but this motherboard device and the add fails
> bigtime. I need acpi_find_bus_driver to return to me the
> acpi_memory_device_driver not the motherboard driver.
>
> It seems pretty sane to be to have the add
>
> > Is there some conflict between those PNP0C01 resources and the
> > resources of a hotplug memory device? Can you figure out exactly
> > what the conflict is by disassembling the DSDT for those devices?
>
> Kame (who helped me greatly in tracking down the source my troubles)
> thinks that the root cause is that the device (my memory_device) has
> both a _HID and _CID. The driver for _HID is different for _CID and
> the
> driver for _CID is found before _HID and I pass the wrong device up
> the
> chain.
>
> > We should understand this better before introducing special cases
> > to the motherboard driver. We should be able to trust the ACPI
> > description of the motherboard resources. The motherboard driver
> > currently claims only I/O port resources, but it really should
> > claim MMIO resources as well.
>
> The design of my patch is to make the motherboard driver return
> something other than 0 when it's driver->ops.add is called with
> resource
> types that are not what it expects.
>
> This way the scan if acpi_bus_find_driver will fine the correct acpi
> device.
>
> Also see
> http://sourceforge.net/mailarchive/forum.php?
> thread_id=15282420&forum_id=223
>
> I don't claim this is the ACPI correct solution and am welcome to any
> input that fixes my issue: acpi_bus_find_driver returning the
> incorrect
> driver for a given handle.
Then the issue is your device _CID returned PNP0C01 or PNP0C02. Is this
intended? Can we change the BIOS?
Thanks,
Shaohua
> > Also see
> > http://sourceforge.net/mailarchive/forum.php?
> > thread_id=15282420&forum_id=223
> >
> > I don't claim this is the ACPI correct solution and am welcome to any
> > input that fixes my issue: acpi_bus_find_driver returning the
> > incorrect
> > driver for a given handle.
> Then the issue is your device _CID returned PNP0C01 or PNP0C02. Is this
> intended? Can we change the BIOS?
The spec talks about _HID for the memory device and that is ok but I
don't see any reference to required _CID. My _CID is listed as hex. Can
I just convert it?
Changing the bios is a little bit of a long shot at this point.
Thanks,
Keith