All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alex Chiang <achiang@hp.com>
To: jbarnes@virtuousgeek.org
Cc: linux-pci@vger.kernel.org,
	Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>,
	linux-kernel@vger.kernel.org, lenb@kernel.org
Subject: [PATCH 3/3] PCI: pci_slot: grab refcount on slot's bus
Date: Sun, 29 Mar 2009 10:54:54 -0600	[thread overview]
Message-ID: <20090329165454.29073.1180.stgit@bob.kio> (raw)
In-Reply-To: <20090329165352.29073.5159.stgit@bob.kio>

If a logical hot unplug (remove) is performed on a physical PCI slot's
parent bridge, and then pci_slot is unloaded, we will encounter an oops:

  [<ffffffff803a788a>] kobject_release+0x9a/0x290
  [<ffffffff803a77f0>] ? kobject_release+0x0/0x290
  [<ffffffff803a8ce7>] kref_put+0x37/0x80
  [<ffffffff803a76f7>] kobject_put+0x27/0x60
  [<ffffffff803bebcc>] ? pci_destroy_slot+0x3c/0xc0
  [<ffffffff803bebd5>] pci_destroy_slot+0x45/0xc0
  [<ffffffffa000f05c>] acpi_pci_slot_remove+0x5c/0x91 [pci_slot]
  [<ffffffff8040064b>] acpi_pci_unregister_driver+0x4b/0x62
  [<ffffffffa000f5c8>] acpi_pci_slot_exit+0x10/0x12 [pci_slot]
  [<ffffffff80276ce1>] sys_delete_module+0x161/0x250

We need to grab a reference to the parent PCI bus, which will pin
the bus and prevent it from being released until pci_slot is unloaded.

Cc: lenb@kernel.org
Reported-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
Signed-off-by: Alex Chiang <achiang@hp.com>
---

 drivers/acpi/pci_slot.c |    5 +++++
 1 files changed, 5 insertions(+), 0 deletions(-)

diff --git a/drivers/acpi/pci_slot.c b/drivers/acpi/pci_slot.c
index cd1f446..c7ad9f2 100644
--- a/drivers/acpi/pci_slot.c
+++ b/drivers/acpi/pci_slot.c
@@ -63,6 +63,7 @@ struct acpi_pci_slot {
 	acpi_handle root_handle;	/* handle of the root bridge */
 	struct pci_slot *pci_slot;	/* corresponding pci_slot */
 	struct list_head list;		/* node in the list of slots */
+	struct pci_bus *bus;		/* bus the slot is on */
 };
 
 static int acpi_pci_slot_add(acpi_handle handle);
@@ -159,11 +160,14 @@ register_slot(acpi_handle handle, u32 lvl, void *context, void **rv)
 
 	slot->root_handle = parent_context->root_handle;
 	slot->pci_slot = pci_slot;
+	slot->bus = pci_bus;
 	INIT_LIST_HEAD(&slot->list);
 	mutex_lock(&slot_list_lock);
 	list_add(&slot->list, &slot_list);
 	mutex_unlock(&slot_list_lock);
 
+	get_device(&pci_bus->dev);
+
 	dbg("pci_slot: %p, pci_bus: %x, device: %d, name: %s\n",
 		pci_slot, pci_bus->number, device, name);
 
@@ -316,6 +320,7 @@ acpi_pci_slot_remove(acpi_handle handle)
 		if (slot->root_handle == handle) {
 			list_del(&slot->list);
 			pci_destroy_slot(slot->pci_slot);
+			put_device(&slot->bus->dev);
 			kfree(slot);
 		}
 	}


  parent reply	other threads:[~2009-03-29 16:56 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-03-29 16:54 [PATCH 0/3] PCI core logical hotplug cleanup Alex Chiang
2009-03-29 16:54 ` [PATCH 1/3] PCI: allow PCI core hotplug to remove PCI root bus Alex Chiang
2009-03-30  2:14   ` Kenji Kaneshige
2009-03-30 16:41     ` Alex Chiang
2009-03-29 16:54 ` [PATCH 2/3] PCI Hotplug: acpiphp: grab refcount on p2p subordinate bus Alex Chiang
2009-03-29 16:54 ` Alex Chiang [this message]
2009-03-30  2:25   ` [PATCH 3/3] PCI: pci_slot: grab refcount on slot's bus Kenji Kaneshige
2009-03-30 16:45     ` Alex Chiang

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=20090329165454.29073.1180.stgit@bob.kio \
    --to=achiang@hp.com \
    --cc=jbarnes@virtuousgeek.org \
    --cc=kaneshige.kenji@jp.fujitsu.com \
    --cc=lenb@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pci@vger.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.