PCI/ACPI: Pass acpi_pci_root to acpi_pci_drivers' add/remove interface
authorTaku Izumi <izumi.taku@jp.fujitsu.com>
Tue, 18 Sep 2012 06:22:35 +0000 (15:22 +0900)
committerBjorn Helgaas <bhelgaas@google.com>
Mon, 24 Sep 2012 21:29:40 +0000 (15:29 -0600)
This patch changes .add/.remove interfaces of acpi_pci_driver.
In the current implementation acpi_handle is passed as a parameter
of .add/.remove interface.  However, the acpi_pci_root structure
contains more useful information than just the acpi_handle.  This
enables us to avoid some useless lookups in each acpi_pci_driver.

Note: This changes interfaces used by acpi_pci_register_driver(), an
exported symbol.  This patch updates all the in-kernel users, but any
out-of-kernel acpi_pci_register_driver() users will need updates.

[bhelgaas: changelog]
Signed-off-by: Taku Izumi <izumi.taku@jp.fujitsu.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
drivers/acpi/pci_root.c
drivers/acpi/pci_slot.c
drivers/pci/hotplug/acpiphp_glue.c
include/linux/acpi.h

index d710585e4a7fa4788ad25a6fb4435a2cffae799c..2868a9ff6d07209a82d2d0985bbfbe0a0e67677c 100644 (file)
@@ -87,7 +87,7 @@ int acpi_pci_register_driver(struct acpi_pci_driver *driver)
        list_add_tail(&driver->node, &acpi_pci_drivers);
        if (driver->add)
                list_for_each_entry(root, &acpi_pci_roots, node) {
-                       driver->add(root->device->handle);
+                       driver->add(root);
                        n++;
                }
        mutex_unlock(&acpi_pci_root_lock);
@@ -104,7 +104,7 @@ void acpi_pci_unregister_driver(struct acpi_pci_driver *driver)
        list_del(&driver->node);
        if (driver->remove)
                list_for_each_entry(root, &acpi_pci_roots, node)
-                       driver->remove(root->device->handle);
+                       driver->remove(root);
        mutex_unlock(&acpi_pci_root_lock);
 }
 EXPORT_SYMBOL(acpi_pci_unregister_driver);
@@ -629,7 +629,7 @@ static int acpi_pci_root_start(struct acpi_device *device)
        mutex_lock(&acpi_pci_root_lock);
        list_for_each_entry(driver, &acpi_pci_drivers, node)
                if (driver->add)
-                       driver->add(device->handle);
+                       driver->add(root);
        mutex_unlock(&acpi_pci_root_lock);
 
        pci_bus_add_devices(root->bus);
@@ -645,7 +645,7 @@ static int acpi_pci_root_remove(struct acpi_device *device, int type)
        mutex_lock(&acpi_pci_root_lock);
        list_for_each_entry(driver, &acpi_pci_drivers, node)
                if (driver->remove)
-                       driver->remove(root->device->handle);
+                       driver->remove(root);
        mutex_unlock(&acpi_pci_root_lock);
 
        device_set_run_wake(root->bus->bridge, false);
index e50e31a518afbf69ebc575ac3c579551e635b2f5..8051ffa7609d6c4b9d3871ca3535702d70481ca5 100644 (file)
@@ -67,8 +67,8 @@ struct acpi_pci_slot {
        struct list_head list;          /* node in the list of slots */
 };
 
-static int acpi_pci_slot_add(acpi_handle handle);
-static void acpi_pci_slot_remove(acpi_handle handle);
+static int acpi_pci_slot_add(struct acpi_pci_root *root);
+static void acpi_pci_slot_remove(struct acpi_pci_root *root);
 
 static LIST_HEAD(slot_list);
 static DEFINE_MUTEX(slot_list_lock);
@@ -295,11 +295,11 @@ walk_root_bridge(acpi_handle handle, acpi_walk_callback user_function)
  * @handle: points to an acpi_pci_root
  */
 static int
-acpi_pci_slot_add(acpi_handle handle)
+acpi_pci_slot_add(struct acpi_pci_root *root)
 {
        acpi_status status;
 
-       status = walk_root_bridge(handle, register_slot);
+       status = walk_root_bridge(root->device->handle, register_slot);
        if (ACPI_FAILURE(status))
                err("%s: register_slot failure - %d\n", __func__, status);
 
@@ -311,10 +311,11 @@ acpi_pci_slot_add(acpi_handle handle)
  * @handle: points to an acpi_pci_root
  */
 static void
-acpi_pci_slot_remove(acpi_handle handle)
+acpi_pci_slot_remove(struct acpi_pci_root *root)
 {
        struct acpi_pci_slot *slot, *tmp;
        struct pci_bus *pbus;
+       acpi_handle handle = root->device->handle;
 
        mutex_lock(&slot_list_lock);
        list_for_each_entry_safe(slot, tmp, &slot_list, list) {
index 7be4ca5e1f4c26299238f3841714611b2c793e01..466233b481b1b0cac3afe25d15f93357e8d1347f 100644 (file)
@@ -382,10 +382,10 @@ static inline void config_p2p_bridge_flags(struct acpiphp_bridge *bridge)
 
 
 /* allocate and initialize host bridge data structure */
-static void add_host_bridge(acpi_handle *handle)
+static void add_host_bridge(struct acpi_pci_root *root)
 {
        struct acpiphp_bridge *bridge;
-       struct acpi_pci_root *root = acpi_pci_find_root(handle);
+       acpi_handle handle = root->device->handle;
 
        bridge = kzalloc(sizeof(struct acpiphp_bridge), GFP_KERNEL);
        if (bridge == NULL)
@@ -468,11 +468,12 @@ find_p2p_bridge(acpi_handle handle, u32 lvl, void *context, void **rv)
 
 
 /* find hot-pluggable slots, and then find P2P bridge */
-static int add_bridge(acpi_handle handle)
+static int add_bridge(struct acpi_pci_root *root)
 {
        acpi_status status;
        unsigned long long tmp;
        acpi_handle dummy_handle;
+       acpi_handle handle = root->device->handle;
 
        /* if the bridge doesn't have _STA, we assume it is always there */
        status = acpi_get_handle(handle, "_STA", &dummy_handle);
@@ -490,7 +491,7 @@ static int add_bridge(acpi_handle handle)
        /* check if this bridge has ejectable slots */
        if (detect_ejectable_slots(handle) > 0) {
                dbg("found PCI host-bus bridge with hot-pluggable slots\n");
-               add_host_bridge(handle);
+               add_host_bridge(root);
        }
 
        /* search P2P bridges under this host bridge */
@@ -588,9 +589,10 @@ cleanup_p2p_bridge(acpi_handle handle, u32 lvl, void *context, void **rv)
        return AE_OK;
 }
 
-static void remove_bridge(acpi_handle handle)
+static void remove_bridge(struct acpi_pci_root *root)
 {
        struct acpiphp_bridge *bridge;
+       acpi_handle handle = root->device->handle;
 
        /* cleanup p2p bridges under this host bridge
           in a depth-first manner */
index a54cf8e512adb97ded31821ca760e020a00b071d..6906e6fb82ea1ca90758ac06e9b0d0adbcdd820a 100644 (file)
@@ -139,8 +139,8 @@ void acpi_pci_irq_disable (struct pci_dev *dev);
 
 struct acpi_pci_driver {
        struct list_head node;
-       int (*add)(acpi_handle handle);
-       void (*remove)(acpi_handle handle);
+       int (*add)(struct acpi_pci_root *root);
+       void (*remove)(struct acpi_pci_root *root);
 };
 
 int acpi_pci_register_driver(struct acpi_pci_driver *driver);
This page took 0.048597 seconds and 5 git commands to generate.