lkml.org 
[lkml]   [2013]   [Jul]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Subject[RFC][PATCH 6/8] ACPI / hotplug / PCI: Drop acpiphp_handle_to_bridge()
Date
From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

Using the hotplug context objects introduced previously rework the
ACPI-based PCI hotplug (acpiphp) core code to get to acpiphp_bridge
objects associated with hotplug bridges from those context objects
rather than from the global list of hotplug bridges.

After that the acpiphp_handle_to_bridge() is not necessary any more,
so drop it.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
---
drivers/pci/hotplug/acpiphp_glue.c | 54 +++++++++++++++++--------------------
1 file changed, 25 insertions(+), 29 deletions(-)

Index: linux-pm/drivers/pci/hotplug/acpiphp_glue.c
===================================================================
--- linux-pm.orig/drivers/pci/hotplug/acpiphp_glue.c
+++ linux-pm/drivers/pci/hotplug/acpiphp_glue.c
@@ -441,22 +441,6 @@ static int detect_ejectable_slots(acpi_h
return found;
}

-static struct acpiphp_bridge *acpiphp_handle_to_bridge(acpi_handle handle)
-{
- struct acpiphp_bridge *bridge;
-
- mutex_lock(&bridge_mutex);
- list_for_each_entry(bridge, &bridge_list, list)
- if (bridge->handle == handle) {
- get_bridge(bridge);
- mutex_unlock(&bridge_mutex);
- return bridge;
- }
- mutex_unlock(&bridge_mutex);
-
- return NULL;
-}
-
static void cleanup_bridge(struct acpiphp_bridge *bridge)
{
struct acpiphp_slot *slot;
@@ -953,37 +937,49 @@ static void acpiphp_sanitize_bus(struct
* ACPI event handlers
*/

-static acpi_status
-check_sub_bridges(acpi_handle handle, u32 lvl, void *context, void **rv)
+static acpi_status check_sub_bridges(acpi_handle handle, u32 lvl, void *data,
+ void **rv)
{
- struct acpiphp_bridge *bridge;
- char objname[64];
- struct acpi_buffer buffer = { .length = sizeof(objname),
- .pointer = objname };
+ struct acpiphp_context *context = acpiphp_get_context(handle);
+
+ if (!context)
+ return AE_OK;

- bridge = acpiphp_handle_to_bridge(handle);
- if (bridge) {
+ if (context->bridge) {
+ struct acpiphp_bridge *bridge = context->bridge;
+ char objname[64];
+ struct acpi_buffer buffer = { .length = sizeof(objname),
+ .pointer = objname };
+
+ get_bridge(bridge);
acpi_get_name(handle, ACPI_FULL_PATHNAME, &buffer);
- dbg("%s: re-enumerating slots under %s\n",
- __func__, objname);
+ dbg("%s: re-enumerating slots under %s\n", __func__, objname);
acpiphp_check_bridge(bridge);
put_bridge(bridge);
}
+ acpiphp_put_context(context);
return AE_OK ;
}

void acpiphp_check_host_bridge(acpi_handle handle)
{
- struct acpiphp_bridge *bridge;
+ struct acpiphp_context *context = acpiphp_get_context(handle);

- bridge = acpiphp_handle_to_bridge(handle);
- if (bridge) {
+ if (!context)
+ return;
+
+ if (context->bridge) {
+ struct acpiphp_bridge *bridge = context->bridge;
+
+ get_bridge(bridge);
acpiphp_check_bridge(bridge);
put_bridge(bridge);
}

acpi_walk_namespace(ACPI_TYPE_DEVICE, handle,
ACPI_UINT32_MAX, check_sub_bridges, NULL, NULL, NULL);
+
+ acpiphp_put_context(context);
}

static void _handle_hotplug_event_bridge(struct work_struct *work)


\
 
 \ /
  Last update: 2013-07-10 23:23    [W:0.425 / U:1.572 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site