Re: [PATCH](memory hotplug) Repost remove useless message at boot time from 2.6.18-rc4.

From: Yasunori Goto
Date: Mon Aug 28 2006 - 10:10:42 EST


> Am Fr 25.08.2006 13:59 schrieb Yasunori Goto <y-goto@xxxxxxxxxxxxxx>:
> >
> >>
> >> > I sent a patch a while ago that gets rid of the whole namespace
> >> > walking
> >> > by making acpi_memoryhotplug an acpi device and making use of the
> >> > .add
> >> > callback function and the acpi_bus_register_driver call.
> >> >
> >> > I am not sure whether this is possible if you have multiple memory
> >> > devices, though (if not maybe it should be made possible?)...
> >> >
> >> > Yasunori even tested the patch and sent an Ok:
> >> > http://marc.theaimsgroup.com/?t=114065312400001&r=1&w=2
> >> >
> >> > If this is acceptable I can rebase the patch on a current kernel.
> >>
> >> Hi. Thomas-san.
> >> Did you rebase your patch?
> >>
> >> I'm trying to do it now too.
> >> But, current code (2.6.18-rc4) seems to register handler for
> >> only enable status devices at boot time.
> >> So, notification is -discarded- due to no handler for new memory
> >> device when hot-add event occurs. Hmmm. :-(
> >No, what I see the notify handler is always installed.

Hmm.
Ok. Followings are current my understanding of sequence
with your patch.

At boot time, acpi_memory_device_init() is called.

acpi_memory_device_init()
|
+---> acpi_bus_register_driver()
|
+---> acpi_driver_attach()
|
+---> acpi_bus_driver_init()
|
+---> acpi_memory_device_add()
|
+---> acpi_install_notify_handler().


The problem is in acpi_driver_attach(). This function is using
"acpi_device_list" to call acpi_bus_driver_init().

This list is registered by acpi_device_register() which is called by
acpi_add_single_object().
However, acpi_add_single_object() skips calling it if _STA is not on.

1015 switch (type) {
1016 case ACPI_BUS_TYPE_PROCESSOR:
1017 case ACPI_BUS_TYPE_DEVICE:
1018 result = acpi_bus_get_status(device);
1019 if (ACPI_FAILURE(result) || !device->status.present) {
1020 result = -ENOENT;
1021 goto end;
1022 }
1023 break;

So, notify handler is registered just for memory device which is enable
at boot time.
If notify event occurs for new memory device, there is no notify handler
for it....

Old code registers handler for all of memory devices even if it is not
enabled.

If my understanding is wrong, please let me know. ;-)
Bye.

--
Yasunori Goto


-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/