From: Alex Chiang <achiang@hp.com>
To: linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org
Cc: jbarnes@virtuousgeek.org, kristen.c.accardi@intel.com,
matthew@wil.cx, kaneshige.kenji@jp.fujitsu.com,
Alex Chiang <achiang@hp.com>
Subject: [PATCH v6-resend 03/17] PCI: update pci_create_slot() to take a 'hotplug' param
Date: Tue, 14 Oct 2008 01:25:17 -0600 [thread overview]
Message-ID: <20081014072517.24319.7379.stgit@bob.kio> (raw)
In-Reply-To: <20081014072311.24319.27334.stgit@bob.kio>
Slot detection drivers can co-exist with hotplug drivers. The names
of the detected/claimed slots may be different depending on module
load order.
For legacy reasons, we need to allow hotplug drivers to override
the slot name if a detection driver is loaded first (and they find
the same slots).
Creating and overriding slot names should be an atomic operation,
otherwise you get a locking nightmare as various drivers race to
call pci_create_slot().
pci_create_slot() is already serialized by grabbing the pci_bus_sem.
We update the API and add a 'hotplug' param, which is:
set if the caller is a hotplug driver
NULL if the caller is a detection driver
pci_create_slot() does not actually use the 'hotplug' parameter in this
patch. A later patch will add the logic that uses it.
Cc: jbarnes@virtuousgeek.org
Cc: kristen.c.accardi@intel.com
Cc: matthew@wil.cx
Cc: kaneshige.kenji@jp.fujitsu.com
Signed-off-by: Alex Chiang <achiang@hp.com>
---
drivers/acpi/pci_slot.c | 2 +-
drivers/pci/hotplug/pci_hotplug_core.c | 2 +-
drivers/pci/slot.c | 4 +++-
include/linux/pci.h | 3 ++-
4 files changed, 7 insertions(+), 4 deletions(-)
diff --git a/drivers/acpi/pci_slot.c b/drivers/acpi/pci_slot.c
index d5b4ef8..8d4a568 100644
--- a/drivers/acpi/pci_slot.c
+++ b/drivers/acpi/pci_slot.c
@@ -150,7 +150,7 @@ register_slot(acpi_handle handle, u32 lvl, void *context, void **rv)
}
snprintf(name, sizeof(name), "%u", (u32)sun);
- pci_slot = pci_create_slot(pci_bus, device, name);
+ pci_slot = pci_create_slot(pci_bus, device, name, NULL);
if (IS_ERR(pci_slot)) {
err("pci_create_slot returned %ld\n", PTR_ERR(pci_slot));
kfree(slot);
diff --git a/drivers/pci/hotplug/pci_hotplug_core.c b/drivers/pci/hotplug/pci_hotplug_core.c
index 02b1ae1..1cdeb64 100644
--- a/drivers/pci/hotplug/pci_hotplug_core.c
+++ b/drivers/pci/hotplug/pci_hotplug_core.c
@@ -579,7 +579,7 @@ int pci_hp_register(struct hotplug_slot *slot, struct pci_bus *bus, int slot_nr,
* driver and call it here again. If we've already created the
* pci_slot, the interface will simply bump the refcount.
*/
- pci_slot = pci_create_slot(bus, slot_nr, name);
+ pci_slot = pci_create_slot(bus, slot_nr, name, slot);
if (IS_ERR(pci_slot))
return PTR_ERR(pci_slot);
diff --git a/drivers/pci/slot.c b/drivers/pci/slot.c
index b9b90ab..0e009c3 100644
--- a/drivers/pci/slot.c
+++ b/drivers/pci/slot.c
@@ -83,6 +83,7 @@ static struct kobj_type pci_slot_ktype = {
* @parent: struct pci_bus of parent bridge
* @slot_nr: PCI_SLOT(pci_dev->devfn) or -1 for placeholder
* @name: user visible string presented in /sys/bus/pci/slots/<name>
+ * @hotplug: set if caller is hotplug driver, NULL otherwise
*
* PCI slots have first class attributes such as address, speed, width,
* and a &struct pci_slot is used to manage them. This interface will
@@ -111,7 +112,8 @@ static struct kobj_type pci_slot_ktype = {
*/
struct pci_slot *pci_create_slot(struct pci_bus *parent, int slot_nr,
- const char *name)
+ const char *name,
+ struct hotplug_slot *hotplug)
{
struct pci_dev *dev;
struct pci_slot *slot;
diff --git a/include/linux/pci.h b/include/linux/pci.h
index 89f7f90..7150898 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -508,7 +508,8 @@ struct pci_bus *pci_create_bus(struct device *parent, int bus,
struct pci_bus *pci_add_new_bus(struct pci_bus *parent, struct pci_dev *dev,
int busnr);
struct pci_slot *pci_create_slot(struct pci_bus *parent, int slot_nr,
- const char *name);
+ const char *name,
+ struct hotplug_slot *hotplug);
void pci_destroy_slot(struct pci_slot *slot);
void pci_renumber_slot(struct pci_slot *slot, int slot_nr);
int pci_scan_slot(struct pci_bus *bus, int devfn);
next prev parent reply other threads:[~2008-10-14 7:26 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-10-14 7:25 [PATCH v6-resend 00/17] PCI: let the core manage slot names Alex Chiang
2008-10-14 7:25 ` [PATCH v6-resend 01/17] PCI Hotplug core: add 'name' param pci_hp_register interface Alex Chiang
2008-10-14 7:25 ` [PATCH v6-resend 02/17] PCI: rename pci_update_slot_number to pci_renumber_slot Alex Chiang
2008-10-14 7:25 ` Alex Chiang [this message]
2008-10-14 7:25 ` [PATCH v6-resend 04/17] PCI Hotplug: serialize pci_hp_register and pci_hp_deregister Alex Chiang
2008-10-14 7:25 ` [PATCH v6-resend 05/17] PCI: prevent duplicate slot names Alex Chiang
2008-10-14 7:25 ` [PATCH v6-resend 06/17] PCI, PCI Hotplug: introduce slot_name helpers Alex Chiang
2008-10-14 7:25 ` [PATCH v6-resend 07/17] PCI: acpiphp: remove 'name' parameter Alex Chiang
2008-10-14 7:25 ` [PATCH v6-resend 08/17] PCI: cpci_hotplug: stop managing hotplug_slot->name Alex Chiang
2008-10-14 7:25 ` [PATCH v6-resend 09/17] PCI: cpqphp: " Alex Chiang
2008-10-14 7:25 ` [PATCH v6-resend 10/17] PCI: fakephp: remove 'name' parameter Alex Chiang
2008-10-14 7:25 ` [PATCH v6-resend 11/17] PCI: ibmphp: stop managing hotplug_slot->name Alex Chiang
2008-10-14 7:26 ` [PATCH v6-resend 12/17] PCI: pciehp: remove 'name' parameter Alex Chiang
2008-10-14 7:26 ` [PATCH v6-resend 13/17] PCI: rpaphp: kmalloc/kfree slot->name directly Alex Chiang
2008-10-14 7:26 ` [PATCH v6-resend 14/17] PCI: SGI Hotplug: stop managing bss_hotplug_slot->name Alex Chiang
2008-10-14 7:26 ` [PATCH v6-resend 15/17] PCI: shcphp: remove 'name' parameter Alex Chiang
2008-10-14 7:26 ` [PATCH v6-resend 16/17] PCI: Hotplug core: remove 'name' Alex Chiang
2008-10-14 7:26 ` [PATCH v6-resend 17/17] PCI Hotplug: fakephp: add duplicate slot name debugging Alex Chiang
2008-10-15 16:50 ` [PATCH v6-resend 00/17] PCI: let the core manage slot names Kenji Kaneshige
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=20081014072517.24319.7379.stgit@bob.kio \
--to=achiang@hp.com \
--cc=jbarnes@virtuousgeek.org \
--cc=kaneshige.kenji@jp.fujitsu.com \
--cc=kristen.c.accardi@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=matthew@wil.cx \
/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.