From patchwork Thu Aug 30 20:16:06 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Toshi Kani X-Patchwork-Id: 1389491 Return-Path: X-Original-To: patchwork-linux-acpi@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork1.kernel.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by patchwork1.kernel.org (Postfix) with ESMTP id 062853FDF5 for ; Thu, 30 Aug 2012 20:22:31 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752586Ab2H3UWI (ORCPT ); Thu, 30 Aug 2012 16:22:08 -0400 Received: from g1t0026.austin.hp.com ([15.216.28.33]:13798 "EHLO g1t0026.austin.hp.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752445Ab2H3UWG (ORCPT ); Thu, 30 Aug 2012 16:22:06 -0400 Received: from g1t0039.austin.hp.com (g1t0039.austin.hp.com [16.236.32.45]) by g1t0026.austin.hp.com (Postfix) with ESMTP id E4124C80A; Thu, 30 Aug 2012 20:22:05 +0000 (UTC) Received: from misato.fc.hp.com (misato.fc.hp.com [16.71.12.41]) by g1t0039.austin.hp.com (Postfix) with ESMTP id 7B5AC341B5; Thu, 30 Aug 2012 20:22:05 +0000 (UTC) From: Toshi Kani To: linux-acpi@vger.kernel.org Cc: linux-kernel@vger.kernel.org, lenb@kernel.org, bhelgaas@google.com, liuj97@gmail.com, isimatu.yasuaki@jp.fujitsu.com, Toshi Kani Subject: [RFC PATCH 5/5] ACPI: Update container to use .sys_notify Date: Thu, 30 Aug 2012 14:16:06 -0600 Message-Id: <1346357766-14030-6-git-send-email-toshi.kani@hp.com> X-Mailer: git-send-email 1.7.7.6 In-Reply-To: <1346357766-14030-1-git-send-email-toshi.kani@hp.com> References: <1346357766-14030-1-git-send-email-toshi.kani@hp.com> Sender: linux-acpi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org Changed the ACPI container driver to use .sys_notify. Removed ACPI namespace walks and their call-back function that register and unregister the hotplug handler to all container objects through acpi_[install|remove]_notify_handler(). Signed-off-by: Toshi Kani --- drivers/acpi/container.c | 66 ++------------------------------------------- 1 files changed, 3 insertions(+), 63 deletions(-) diff --git a/drivers/acpi/container.c b/drivers/acpi/container.c index 1f9f7d7..d4e8b71 100644 --- a/drivers/acpi/container.c +++ b/drivers/acpi/container.c @@ -53,6 +53,7 @@ MODULE_LICENSE("GPL"); static int acpi_container_add(struct acpi_device *device); static int acpi_container_remove(struct acpi_device *device, int type); +static void container_notify(acpi_handle handle, u32 type, void *context); static const struct acpi_device_id container_device_ids[] = { {"ACPI0004", 0}, @@ -69,6 +70,7 @@ static struct acpi_driver acpi_container_driver = { .ops = { .add = acpi_container_add, .remove = acpi_container_remove, + .sys_notify = container_notify, }, }; @@ -152,7 +154,7 @@ static int container_device_add(struct acpi_device **device, acpi_handle handle) return result; } -static void container_notify_cb(acpi_handle handle, u32 type, void *context) +static void container_notify(acpi_handle handle, u32 type, void *context) { struct acpi_device *device = NULL; int result; @@ -211,82 +213,20 @@ static void container_notify_cb(acpi_handle handle, u32 type, void *context) return; } -static acpi_status -container_walk_namespace_cb(acpi_handle handle, - u32 lvl, void *context, void **rv) -{ - char *hid = NULL; - struct acpi_device_info *info; - acpi_status status; - int *action = context; - - status = acpi_get_object_info(handle, &info); - if (ACPI_FAILURE(status)) { - return AE_OK; - } - - if (info->valid & ACPI_VALID_HID) - hid = info->hardware_id.string; - - if (hid == NULL) { - goto end; - } - - if (strcmp(hid, "ACPI0004") && strcmp(hid, "PNP0A05") && - strcmp(hid, "PNP0A06")) { - goto end; - } - - switch (*action) { - case INSTALL_NOTIFY_HANDLER: - acpi_install_notify_handler(handle, - ACPI_SYSTEM_NOTIFY, - container_notify_cb, NULL); - break; - case UNINSTALL_NOTIFY_HANDLER: - acpi_remove_notify_handler(handle, - ACPI_SYSTEM_NOTIFY, - container_notify_cb); - break; - default: - break; - } - - end: - kfree(info); - - return AE_OK; -} - static int __init acpi_container_init(void) { int result = 0; - int action = INSTALL_NOTIFY_HANDLER; result = acpi_bus_register_driver(&acpi_container_driver); if (result < 0) { return (result); } - /* register notify handler to every container device */ - acpi_walk_namespace(ACPI_TYPE_DEVICE, - ACPI_ROOT_OBJECT, - ACPI_UINT32_MAX, - container_walk_namespace_cb, NULL, &action, NULL); - return (0); } static void __exit acpi_container_exit(void) { - int action = UNINSTALL_NOTIFY_HANDLER; - - - acpi_walk_namespace(ACPI_TYPE_DEVICE, - ACPI_ROOT_OBJECT, - ACPI_UINT32_MAX, - container_walk_namespace_cb, NULL, &action, NULL); - acpi_bus_unregister_driver(&acpi_container_driver); return;