From: Yinghai Lu <yinghai@kernel.org>
To: Jesse Barnes <jbarnes@virtuousgeek.org>, x86 <x86@kernel.org>
Cc: Bjorn Helgaas <bhelgaas@google.com>,
Andrew Morton <akpm@linux-foundation.org>,
Linus Torvalds <torvalds@linux-foundation.org>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org,
Yinghai Lu <yinghai@kernel.org>
Subject: [PATCH v2 22/37] PCI, acpiphp: remove hot-add support of pci host bridge
Date: Fri, 9 Mar 2012 23:00:22 -0800 [thread overview]
Message-ID: <1331362837-10740-23-git-send-email-yinghai@kernel.org> (raw)
In-Reply-To: <1331362837-10740-1-git-send-email-yinghai@kernel.org>
It causes confusing.
We may only need acpi hp for pci host bridge.
Split host bridge hot-add support to another file, and keep acpiphp simple.
Also remove not used res_lock in the struct.
Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
drivers/pci/hotplug/acpiphp.h | 9 +---
drivers/pci/hotplug/acpiphp_glue.c | 104 +++++++-----------------------------
2 files changed, 21 insertions(+), 92 deletions(-)
diff --git a/drivers/pci/hotplug/acpiphp.h b/drivers/pci/hotplug/acpiphp.h
index 7722108..1a62e7b 100644
--- a/drivers/pci/hotplug/acpiphp.h
+++ b/drivers/pci/hotplug/acpiphp.h
@@ -79,18 +79,15 @@ struct acpiphp_bridge {
/* Ejectable PCI-to-PCI bridge (PCI bridge and PCI function) */
struct acpiphp_func *func;
- int type;
int nr_slots;
u32 flags;
- /* This bus (host bridge) or Secondary bus (PCI-to-PCI bridge) */
+ /* Secondary bus (PCI-to-PCI bridge) */
struct pci_bus *pci_bus;
/* PCI-to-PCI bridge device */
struct pci_dev *pci_dev;
-
- spinlock_t res_lock;
};
@@ -148,10 +145,6 @@ struct acpiphp_attention_info
/* PCI bus bridge HID */
#define ACPI_PCI_HOST_HID "PNP0A03"
-/* PCI BRIDGE type */
-#define BRIDGE_TYPE_HOST 0
-#define BRIDGE_TYPE_P2P 1
-
/* ACPI _STA method value (ignore bit 4; battery present) */
#define ACPI_STA_PRESENT (0x00000001)
#define ACPI_STA_ENABLED (0x00000002)
diff --git a/drivers/pci/hotplug/acpiphp_glue.c b/drivers/pci/hotplug/acpiphp_glue.c
index 10b2122..1ca82ae 100644
--- a/drivers/pci/hotplug/acpiphp_glue.c
+++ b/drivers/pci/hotplug/acpiphp_glue.c
@@ -283,7 +283,7 @@ static int detect_ejectable_slots(acpi_handle handle)
return found;
}
-/* initialize miscellaneous stuff for both root and PCI-to-PCI bridge */
+/* initialize miscellaneous stuff for PCI-to-PCI bridge */
static void init_bridge_misc(struct acpiphp_bridge *bridge)
{
acpi_status status;
@@ -300,25 +300,21 @@ static void init_bridge_misc(struct acpiphp_bridge *bridge)
}
/* install notify handler */
- if (bridge->type != BRIDGE_TYPE_HOST) {
- if ((bridge->flags & BRIDGE_HAS_EJ0) && bridge->func) {
- status = acpi_remove_notify_handler(bridge->func->handle,
- ACPI_SYSTEM_NOTIFY,
- handle_hotplug_event_func);
- if (ACPI_FAILURE(status))
- err("failed to remove notify handler\n");
- }
- status = acpi_install_notify_handler(bridge->handle,
- ACPI_SYSTEM_NOTIFY,
- handle_hotplug_event_bridge,
- bridge);
-
- if (ACPI_FAILURE(status)) {
- err("failed to register interrupt notify handler\n");
- }
+ if ((bridge->flags & BRIDGE_HAS_EJ0) && bridge->func) {
+ status = acpi_remove_notify_handler(bridge->func->handle,
+ ACPI_SYSTEM_NOTIFY,
+ handle_hotplug_event_func);
+ if (ACPI_FAILURE(status))
+ err("failed to remove notify handler\n");
}
-}
+ status = acpi_install_notify_handler(bridge->handle,
+ ACPI_SYSTEM_NOTIFY,
+ handle_hotplug_event_bridge,
+ bridge);
+ if (ACPI_FAILURE(status))
+ err("failed to register interrupt notify handler\n");
+}
/* find acpiphp_func from acpiphp_bridge */
static struct acpiphp_func *acpiphp_bridge_handle_to_function(acpi_handle handle)
@@ -375,28 +371,6 @@ 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)
-{
- struct acpiphp_bridge *bridge;
- struct acpi_pci_root *root = acpi_pci_find_root(handle);
-
- bridge = kzalloc(sizeof(struct acpiphp_bridge), GFP_KERNEL);
- if (bridge == NULL)
- return;
-
- bridge->type = BRIDGE_TYPE_HOST;
- bridge->handle = handle;
-
- bridge->pci_bus = root->bus;
-
- spin_lock_init(&bridge->res_lock);
-
- init_bridge_misc(bridge);
-}
-
-
/* allocate and initialize PCI-to-PCI bridge data structure */
static void add_p2p_bridge(acpi_handle *handle)
{
@@ -408,7 +382,6 @@ static void add_p2p_bridge(acpi_handle *handle)
return;
}
- bridge->type = BRIDGE_TYPE_P2P;
bridge->handle = handle;
config_p2p_bridge_flags(bridge);
@@ -425,7 +398,6 @@ static void add_p2p_bridge(acpi_handle *handle)
* (which we access during module unload).
*/
get_device(&bridge->pci_bus->dev);
- spin_lock_init(&bridge->res_lock);
init_bridge_misc(bridge);
return;
@@ -485,12 +457,6 @@ static int add_bridge(acpi_handle handle)
return 0;
}
- /* 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);
- }
-
/* search P2P bridges under this host bridge */
status = acpi_walk_namespace(ACPI_TYPE_DEVICE, handle, (u32)1,
find_p2p_bridge, NULL, NULL, NULL);
@@ -524,8 +490,7 @@ static void cleanup_bridge(struct acpiphp_bridge *bridge)
if (ACPI_FAILURE(status))
err("failed to remove notify handler\n");
- if ((bridge->type != BRIDGE_TYPE_HOST) &&
- ((bridge->flags & BRIDGE_HAS_EJ0) && bridge->func)) {
+ if ((bridge->flags & BRIDGE_HAS_EJ0) && bridge->func) {
status = acpi_install_notify_handler(bridge->func->handle,
ACPI_SYSTEM_NOTIFY,
handle_hotplug_event_func,
@@ -1078,15 +1043,10 @@ static void acpiphp_sanitize_bus(struct pci_bus *bus)
static int acpiphp_configure_bridge (acpi_handle handle)
{
struct pci_bus *bus;
+ struct pci_dev *pdev = acpi_get_pci_dev(handle);
- if (acpi_is_root_bridge(handle)) {
- struct acpi_pci_root *root = acpi_pci_find_root(handle);
- bus = root->bus;
- } else {
- struct pci_dev *pdev = acpi_get_pci_dev(handle);
- bus = pdev->subordinate;
- pci_dev_put(pdev);
- }
+ bus = pdev->subordinate;
+ pci_dev_put(pdev);
pci_bus_size_bridges(bus);
pci_bus_assign_resources(bus);
@@ -1249,8 +1209,7 @@ static void _handle_hotplug_event_bridge(struct work_struct *work)
case ACPI_NOTIFY_EJECT_REQUEST:
/* request device eject */
dbg("%s: Device eject notify on %s\n", __func__, objname);
- if ((bridge->type != BRIDGE_TYPE_HOST) &&
- (bridge->flags & BRIDGE_HAS_EJ0)) {
+ if (bridge->flags & BRIDGE_HAS_EJ0) {
struct acpiphp_slot *slot;
slot = bridge->func->slot;
if (!acpiphp_disable_slot(slot))
@@ -1381,21 +1340,6 @@ static void handle_hotplug_event_func(acpi_handle handle, u32 type,
_handle_hotplug_event_func);
}
-static acpi_status
-find_root_bridges(acpi_handle handle, u32 lvl, void *context, void **rv)
-{
- int *count = (int *)context;
-
- if (!acpi_is_root_bridge(handle))
- return AE_OK;
-
- (*count)++;
- acpi_install_notify_handler(handle, ACPI_SYSTEM_NOTIFY,
- handle_hotplug_event_bridge, NULL);
-
- return AE_OK ;
-}
-
static struct acpi_pci_driver acpi_pci_hp_driver = {
.add = add_bridge,
.remove = remove_bridge,
@@ -1406,15 +1350,7 @@ static struct acpi_pci_driver acpi_pci_hp_driver = {
*/
int __init acpiphp_glue_init(void)
{
- int num = 0;
-
- acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT,
- ACPI_UINT32_MAX, find_root_bridges, NULL, &num, NULL);
-
- if (num <= 0)
- return -1;
- else
- acpi_pci_register_driver(&acpi_pci_hp_driver);
+ acpi_pci_register_driver(&acpi_pci_hp_driver);
return 0;
}
--
1.7.7
next prev parent reply other threads:[~2012-03-10 7:02 UTC|newest]
Thread overview: 65+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-03-10 7:00 [PATCH v2 00/37] PCI, x86: pci root bus hotplug support Yinghai Lu
2012-03-10 7:00 ` [PATCH v2 01/37] IOMMU: Update dmar units devices list during hotplug Yinghai Lu
2012-03-10 7:00 ` [PATCH v2 02/37] PNPACPI: Fix device ref leaking in acpi_pnp_match Yinghai Lu
2012-03-13 2:40 ` Bjorn Helgaas
2012-03-10 7:00 ` [PATCH v2 03/37] IOMMU: Fix tboot force iommu logic Yinghai Lu
2012-03-10 7:00 ` [PATCH v2 04/37] x86, PCI: Fix non acpi path pci_sysdata leaking with release_fn Yinghai Lu
2012-03-10 7:00 ` [PATCH v2 05/37] PCI: Separate out pci_assign_unassigned_bus_resources() Yinghai Lu
2012-03-10 7:00 ` [PATCH v2 06/37] PCI: Move back pci_rescan_bus() Yinghai Lu
2012-03-10 7:00 ` [PATCH v2 07/37] PCI: pci_bus_size_bridges() should not size own bridge Yinghai Lu
2012-03-13 2:47 ` Bjorn Helgaas
2012-03-10 7:00 ` [PATCH v2 08/37] PCI: Use __pci_bus_size_bridges() directly in pci_assign_unassigned_bus_resources() Yinghai Lu
2012-03-10 7:00 ` [PATCH v2 09/37] PCI, sysfs: Use device_type and attr_groups with pci dev Yinghai Lu
2012-03-10 7:00 ` [PATCH v2 10/37] PCI, sysfs: create rescan_bridge under /sys/.../pci/devices/... for pci bridges Yinghai Lu
2012-03-13 2:55 ` Bjorn Helgaas
2012-03-13 5:48 ` Yinghai Lu
2012-03-10 7:00 ` [PATCH v2 11/37] PCI: Add pci_bus_add_single_device() Yinghai Lu
2012-03-10 7:00 ` [PATCH v2 12/37] PCI: Make pci_rescan_bus_bridge_resize() use pci_scan_bridge instead Yinghai Lu
2012-03-10 7:00 ` [PATCH v2 13/37] PCI: Clean up rescan_bus_bridge_resize() Yinghai Lu
2012-03-10 7:00 ` [PATCH v2 14/37] PCI: Rescan bus or bridge using callback method too Yinghai Lu
2012-03-10 7:00 ` [PATCH v2 15/37] PCI, sysfs: Clean up rescan/remove with scheule_callback Yinghai Lu
2012-03-10 7:00 ` [PATCH v2 16/37] PCI: Move pci_stop_and_remove_behind_bridge() down Yinghai Lu
2012-03-10 7:00 ` [PATCH v2 17/37] PCI: Add __pci_remove_bus_devices() Yinghai Lu
2012-03-10 7:00 ` [PATCH v2 18/37] PCI: Use list_for_each_entry_safe instead of list_for_each_safe Yinghai Lu
2012-03-10 7:00 ` [PATCH v2 19/37] PCI: Add pci_stop_and_remove_bus() Yinghai Lu
2012-03-12 15:58 ` Jiang Liu
2012-03-13 6:22 ` Yinghai Lu
2012-03-10 7:00 ` [PATCH v2 20/37] PCI: Add pci bus removal through /sys/.../pci_bus/.../remove Yinghai Lu
2012-03-13 3:10 ` Bjorn Helgaas
2012-03-13 5:54 ` Yinghai Lu
2012-03-15 17:33 ` Bjorn Helgaas
2012-03-10 7:00 ` [PATCH v2 21/37] PCI, ACPI: Make acpi_pci_root_remove remove pci root bus too Yinghai Lu
2012-03-13 3:11 ` Bjorn Helgaas
2012-03-10 7:00 ` Yinghai Lu [this message]
2012-03-13 3:14 ` [PATCH v2 22/37] PCI, acpiphp: remove hot-add support of pci host bridge Bjorn Helgaas
2012-03-13 5:58 ` Yinghai Lu
2012-03-15 17:34 ` Bjorn Helgaas
2012-03-10 7:00 ` [PATCH v2 23/37] PCI, ACPI: Add pci_root_hp hot add hotplug notification Yinghai Lu
2012-03-13 3:22 ` Bjorn Helgaas
2012-03-13 6:03 ` Yinghai Lu
2012-03-15 17:47 ` Bjorn Helgaas
2012-03-10 7:00 ` [PATCH v2 24/37] PCI, ACPI: Add pci_root_hp hot removal notification support Yinghai Lu
2012-03-13 3:25 ` Bjorn Helgaas
2012-03-13 6:06 ` Yinghai Lu
2012-03-15 17:53 ` Bjorn Helgaas
2012-03-15 18:01 ` Yinghai Lu
2012-03-15 18:09 ` Bjorn Helgaas
2012-03-10 7:00 ` [PATCH v2 25/37] PCI, ACPI: Add alloc_acpi_hp_work() Yinghai Lu
2012-03-10 7:00 ` [PATCH v2 26/37] PCI, acpiphp: Use acpi_hp_work Yinghai Lu
2012-03-10 7:00 ` [PATCH v2 27/37] PCI, pci_root_hp: " Yinghai Lu
2012-03-10 7:00 ` [PATCH v2 28/37] PCI, ACPI: Make kacpi_hotplug_wq static Yinghai Lu
2012-03-10 7:00 ` [PATCH v2 29/37] PCI, ACPI: Add acpi_pci_root_rescan() Yinghai Lu
2012-03-13 3:33 ` Bjorn Helgaas
2012-03-10 7:00 ` [PATCH v2 30/37] PCI: Add __pci_scan_root_bus() that can skip bus_add Yinghai Lu
2012-03-10 7:00 ` [PATCH v2 31/37] x86, PCI: add __pci_scan_root_bus_on_node() " Yinghai Lu
2012-03-10 7:00 ` [PATCH v2 32/37] x86, PCI: add __pcibios_scan_specific_bus " Yinghai Lu
2012-03-10 7:00 ` [PATCH v2 33/37] x86, PCI: Add pcibios_root_rescan() Yinghai Lu
2012-03-13 3:37 ` Bjorn Helgaas
2012-03-10 7:00 ` [PATCH v2 34/37] x86, PCI: Add arch version pci_root_rescan() Yinghai Lu
2012-03-13 3:40 ` Bjorn Helgaas
2012-03-10 7:00 ` [PATCH v2 35/37] PCI: Make /sys/bus/pci/rescan rescan root Yinghai Lu
2012-03-13 3:44 ` Bjorn Helgaas
2012-03-13 6:26 ` Yinghai Lu
2012-03-15 17:55 ` Bjorn Helgaas
2012-03-10 7:00 ` [PATCH v2 36/37] ACPI: Enable SCI_EMULATE to manually simulate physical hotplug testing Yinghai Lu
2012-03-10 7:00 ` [PATCH v2 37/37] PCI, sysfs: Prepare to kill pci device rescan Yinghai Lu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1331362837-10740-23-git-send-email-yinghai@kernel.org \
--to=yinghai@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=bhelgaas@google.com \
--cc=gregkh@linuxfoundation.org \
--cc=jbarnes@virtuousgeek.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=torvalds@linux-foundation.org \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).