All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
To: Alex Chiang <achiang@hp.com>, Greg KH <gregkh@suse.de>
Cc: Gary Hade <garyhade@us.ibm.com>,
	Kristen Carlson Accardi <kristen.c.accardi@intel.com>,
	Matthew Wilcox <matthew@wil.cx>,
	warthog19@eaglescrag.net, rick.jones2@hp.com,
	linux-kernel@vger.kernel.org, linux-pci@atrey.karlin.mff.cuni.cz,
	linux-acpi@vger.kernel.org
Subject: [PATCH  5/16] PCI slot: Use list_head for pci slot list (Not for mainline!)
Date: Fri, 21 Mar 2008 13:13:10 +0900	[thread overview]
Message-ID: <47E335D6.5070909@jp.fujitsu.com> (raw)
In-Reply-To: <47E33472.1000602@jp.fujitsu.com>

To make code simple, we should use list_head for physical slot list on
the bus.

Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>

---
 drivers/acpi/pci_slot.c |    9 ++++++---
 drivers/pci/probe.c     |    1 +
 drivers/pci/slot.c      |   17 ++++++-----------
 include/linux/pci.h     |    4 ++--
 4 files changed, 15 insertions(+), 16 deletions(-)

Index: linux-2.6.25-rc6/drivers/pci/probe.c
===================================================================
--- linux-2.6.25-rc6.orig/drivers/pci/probe.c
+++ linux-2.6.25-rc6/drivers/pci/probe.c
@@ -384,6 +384,7 @@ static struct pci_bus * pci_alloc_bus(vo
 		INIT_LIST_HEAD(&b->node);
 		INIT_LIST_HEAD(&b->children);
 		INIT_LIST_HEAD(&b->devices);
+		INIT_LIST_HEAD(&b->slots);
 	}
 	return b;
 }
Index: linux-2.6.25-rc6/drivers/pci/slot.c
===================================================================
--- linux-2.6.25-rc6.orig/drivers/pci/slot.c
+++ linux-2.6.25-rc6/drivers/pci/slot.c
@@ -69,18 +69,12 @@ static int create_sysfs_files(struct pci
 
 static void pci_slot_release(struct kobject *kobj)
 {
-	struct pci_slot **pprev;
 	struct pci_slot *slot = to_pci_slot(kobj);
 
 	dbg("%s: releasing pci_slot on %x:%d\n", __func__,
 		slot->bus->number, slot->number);
 
-	for (pprev = &slot->bus->slot; *pprev; pprev = &(*pprev)->next) {
-		if (*pprev == slot) {
-			*pprev = slot->next;
-			break;
-		}
-	}
+	list_del(&slot->list);
 
 	if (slot->release)
 		slot->release(slot);
@@ -107,11 +101,12 @@ int pci_slot_add_hotplug(struct pci_bus 
 	/* This slot should have already been created, so look for it. If
 	 * we can't find it, return -EEXIST.
 	 */
-	for (slot = parent->slot; slot; slot = slot->next)
+	list_for_each_entry(slot, &parent->slots, list) {
 		if (slot->number == slot_nr) {
 			found = 1;
 			break;
 		}
+	}
 
 	if (!found) {
 		dbg("%s: slot not found\n", __func__);
@@ -143,7 +138,7 @@ struct pci_slot *pci_create_slot(struct 
 	down_write(&pci_bus_sem);
 
 	/* If we've already created this slot, bump refcount and return. */
-	for (slot = parent->slot; slot; slot = slot->next) {
+	list_for_each_entry(slot, &parent->slots, list) {
 		if (slot->number == slot_nr) {
 			kobject_get(&slot->kobj);
 			dbg("%s: bumped refcount to %d on %x:%d\n",
@@ -175,8 +170,8 @@ struct pci_slot *pci_create_slot(struct 
 	if (err)
 		goto unregister;
 
-	slot->next = parent->slot;
-	parent->slot = slot;
+	INIT_LIST_HEAD(&slot->list);
+	list_add(&slot->list, &parent->slots);
 
 	dbg("%s: created pci_slot on %x:%d\n",
 		__func__, parent->number, slot_nr);
Index: linux-2.6.25-rc6/include/linux/pci.h
===================================================================
--- linux-2.6.25-rc6.orig/include/linux/pci.h
+++ linux-2.6.25-rc6/include/linux/pci.h
@@ -131,7 +131,7 @@ struct pci_cap_saved_state {
 /* pci_slot represents a physical slot */
 struct pci_slot {
 	struct pci_bus *bus;		/* The bus this slot is on */
-	struct pci_slot *next;		/* Next slot on this bus */
+	struct list_head list;		/* node in list of slots on this bus */
 	struct hotplug_slot *hotplug;	/* Hotplug info (migrate over time) */
 	unsigned char number;		/* PCI_SLOT(pci_dev->devfn) */
 	struct kobject kobj;
@@ -269,7 +269,7 @@ struct pci_bus {
 	struct list_head children;	/* list of child buses */
 	struct list_head devices;	/* list of devices on this bus */
 	struct pci_dev	*self;		/* bridge device as seen by parent */
-	struct pci_slot	*slot;		/* First physical slot on this bus */
+	struct list_head slots;		/* list of slots on this bus */
 	struct resource	*resource[PCI_BUS_NUM_RESOURCES];
 					/* address space routed to this bus */
 
Index: linux-2.6.25-rc6/drivers/acpi/pci_slot.c
===================================================================
--- linux-2.6.25-rc6.orig/drivers/acpi/pci_slot.c
+++ linux-2.6.25-rc6/drivers/acpi/pci_slot.c
@@ -117,15 +117,18 @@ unregister_slot(acpi_handle handle, u32 
 {
 	int device;
 	unsigned long sun;
-	struct pci_slot *slot;
+	struct pci_slot *slot, *tmp;
 	struct pci_bus *pci_bus = context;
 
 	if (check_slot(handle, &device, &sun))
 		return AE_OK;
 
-	for (slot = pci_bus->slot; slot; slot = slot->next) {
-		if (slot->number == device)
+	/* FIXME - Need pci_bus_sem to be held */
+	list_for_each_entry_safe(slot, tmp, &pci_bus->slots, list) {
+		if (slot->number == device) {
 			pci_destroy_slot(slot);
+			break;
+		}
 	}
 
 	return AE_OK;



  parent reply	other threads:[~2008-03-21  4:16 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-03-18 21:05 [PATCH 0/3, v10] PCI, ACPI: Physical PCI slot objects Alex Chiang
2008-03-18 21:08 ` [PATCH 1/3] Construct one fakephp slot per pci slot Alex Chiang
2008-03-18 21:09 ` [PATCH 2/3] Introduce pci_slot Alex Chiang
2008-03-18 21:09 ` [PATCH 3/3] ACPI PCI slot detection driver Alex Chiang
2008-03-19  0:55 ` [PATCH 0/3, v10] PCI, ACPI: Physical PCI slot objects Matthew Wilcox
2008-03-19  0:55   ` Matthew Wilcox
2008-03-19  1:52   ` Alex Chiang
2008-03-19  2:34     ` Kenji Kaneshige
2008-03-19  2:34       ` Kenji Kaneshige
2008-03-19  2:24   ` Kenji Kaneshige
2008-03-21  4:07 ` Kenji Kaneshige
2008-03-21  4:09   ` [PATCH 1/16][BUG] Export kobject_rename for pci_hotplug_core (Not for mainline!) Kenji Kaneshige
2008-03-21 15:56     ` Alex Chiang
2008-03-21 16:15       ` Greg KH
2008-03-21 16:15         ` Greg KH
2008-03-21 16:45         ` Alex Chiang
2008-03-21  4:10   ` [PATCH 2/16] ACPI pci_slot: Fix dmi table for Fujitsu PRIMEQUEST " Kenji Kaneshige
2008-03-21 16:04     ` Alex Chiang
2008-03-21  4:11   ` [PATCH 3/16][BUG] ACPI pci_slot: Fix _STA evaluation " Kenji Kaneshige
2008-03-21 16:17     ` Alex Chiang
2008-03-21  4:12   ` [PATCH 4/16][BUG] PCI slot: Add missing semaphore for slot release " Kenji Kaneshige
2008-03-21 16:57     ` Alex Chiang
2008-03-21  4:13   ` Kenji Kaneshige [this message]
2008-03-21 18:40     ` [PATCH 5/16] PCI slot: Use list_head for pci slot list " Alex Chiang
2008-03-21  4:14   ` [PATCH 6/16][BUG] ACPI pci_slot: Fix slot removal path " Kenji Kaneshige
2008-03-21 19:42     ` Alex Chiang
2008-03-21  4:14   ` [PATCH 7/16][BUG] PCI slot: Remove compiler warnings " Kenji Kaneshige
2008-03-21 20:01     ` Alex Chiang
2008-03-21  4:15   ` [PATCH 8/16][BUG] PCI slot: Fix invalid memory access " Kenji Kaneshige
2008-03-21 20:01     ` Alex Chiang
2008-03-21  4:16   ` [PATCH 9/16] PCI slot: Remove unused slot member from pci_dev " Kenji Kaneshige
2008-03-21 19:30     ` Matthew Wilcox
2008-03-24 20:29       ` Alex Chiang
2008-03-21  4:17   ` [PATCH 10/16] PCI slot: Replace dbg with pr_debug " Kenji Kaneshige
2008-03-21 19:30     ` Matthew Wilcox
2008-03-21 20:02     ` Alex Chiang
2008-03-21  4:18   ` [PATCH 11/16] PCI slot: Remove useless release handler " Kenji Kaneshige
2008-03-25  3:08     ` Alex Chiang
2008-03-21  4:19   ` [PATCH 12/16] PCI slot: Use .default_attrs for address file " Kenji Kaneshige
2008-03-21 19:32     ` Matthew Wilcox
2008-03-25  3:31     ` Alex Chiang
2008-03-21  4:23   ` [PATCH 13/16] PCI slot: Fix return value of pci_create_slot() " Kenji Kaneshige
2008-03-25  3:31     ` Alex Chiang
2008-03-21  4:26   ` [PATCH 14/16] PCI slot: Change return value of pci_destroy_slot() " Kenji Kaneshige
2008-03-21 19:32     ` Matthew Wilcox
2008-03-25  3:31     ` Alex Chiang
2008-03-21  4:26   ` [PATCH 15/16] PCI slot: Trivial cleanups for slot.c " Kenji Kaneshige
2008-03-21 19:33     ` Matthew Wilcox
2008-03-25  3:31     ` Alex Chiang
2008-03-21  4:27   ` [PATCH 16/16][BUG] PCI hotplug core: add missing lock for hotplug slot list " Kenji Kaneshige
2008-03-25  3:31     ` Alex Chiang
2008-03-21 15:53   ` [PATCH 0/3, v10] PCI, ACPI: Physical PCI slot objects 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=47E335D6.5070909@jp.fujitsu.com \
    --to=kaneshige.kenji@jp.fujitsu.com \
    --cc=achiang@hp.com \
    --cc=garyhade@us.ibm.com \
    --cc=gregkh@suse.de \
    --cc=kristen.c.accardi@intel.com \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pci@atrey.karlin.mff.cuni.cz \
    --cc=matthew@wil.cx \
    --cc=rick.jones2@hp.com \
    --cc=warthog19@eaglescrag.net \
    /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.