Re: [PATCH v3 3/3] Improve container_notify_cb() to support container hot-remove.

From: Yinghai Lu
Date: Thu Nov 01 2012 - 19:39:44 EST


On Thu, Nov 1, 2012 at 4:15 PM, Rafael J. Wysocki <rjw@xxxxxxx> wrote:
> From: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx>
> Subject: ACPI: Make seemingly useless check in osl.c more understandable
>
> There is a seemingly useless check in drivers/acpi/osl.c added by
> commit bc73675 (ACPI: fixes a false alarm from lockdep), which really
> is necessary to avoid false positive lockdep complaints. Document
> this and rearrange the code related to it so that it makes fewer
> checks.
>
> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx>
> ---
> drivers/acpi/osl.c | 21 ++++++++++++++-------
> 1 file changed, 14 insertions(+), 7 deletions(-)
>
> Index: linux/drivers/acpi/osl.c
> ===================================================================
> --- linux.orig/drivers/acpi/osl.c
> +++ linux/drivers/acpi/osl.c
> @@ -944,17 +944,24 @@ static acpi_status __acpi_os_execute(acp
> * because the hotplug code may call driver .remove() functions,
> * which invoke flush_scheduled_work/acpi_os_wait_events_complete
> * to flush these workqueues.
> + *
> + * To prevent lockdep from complaining unnecessarily, make sure that
> + * there is a different static lockdep key for each workqueue by using
> + * INIT_WORK() for each of them separately.
> */
> - queue = hp ? kacpi_hotplug_wq :
> - (type == OSL_NOTIFY_HANDLER ? kacpi_notify_wq : kacpid_wq);
> - dpc->wait = hp ? 1 : 0;
> -
> - if (queue == kacpi_hotplug_wq)
> + if (hp) {
> + queue = kacpi_hotplug_wq;
> + dpc->wait = 1;
> INIT_WORK(&dpc->work, acpi_os_execute_deferred);
> - else if (queue == kacpi_notify_wq)
> + } else if (type == OSL_NOTIFY_HANDLER) {
> + queue = kacpi_notify_wq;
> + dpc->wait = 0;

yes, much clear.

at the same can you changne
dpc allocation from kmalloc with kzalloc instead.

then we save two lines for dpc->wait = 0

After that

Acked-by: Yinghai Lu <yinghai@xxxxxxxxxx>

> INIT_WORK(&dpc->work, acpi_os_execute_deferred);
> - else
> + } else {
> + queue = kacpid_wq;
> + dpc->wait = 0;
> INIT_WORK(&dpc->work, acpi_os_execute_deferred);
> + }
>
> /*
> * On some machines, a software-initiated SMI causes corruption unless
>
> --
--
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/