[PATCH] shpchp - cleanup controller list

This patch changes SHPCHP driver to use list_head structure for
managing controller list.

Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
diff --git a/drivers/pci/hotplug/shpchp_core.c b/drivers/pci/hotplug/shpchp_core.c
index 547bf5d..0dd0642 100644
--- a/drivers/pci/hotplug/shpchp_core.c
+++ b/drivers/pci/hotplug/shpchp_core.c
@@ -38,7 +38,7 @@
 int shpchp_debug;
 int shpchp_poll_mode;
 int shpchp_poll_time;
-struct controller *shpchp_ctrl_list;	/* = NULL */
+LIST_HEAD(shpchp_ctrl_list);
 
 #define DRIVER_VERSION	"0.4"
 #define DRIVER_AUTHOR	"Dan Zink <dan.zink@compaq.com>, Greg Kroah-Hartman <greg@kroah.com>, Dely Sy <dely.l.sy@intel.com>"
@@ -452,13 +452,7 @@
 	/* Finish setting up the hot plug ctrl device */
 	ctrl->next_event = 0;
 
-	if (!shpchp_ctrl_list) {
-		shpchp_ctrl_list = ctrl;
-		ctrl->next = NULL;
-	} else {
-		ctrl->next = shpchp_ctrl_list;
-		shpchp_ctrl_list = ctrl;
-	}
+	list_add(&ctrl->ctrl_list, &shpchp_ctrl_list);
 
 	shpchp_create_ctrl_files(ctrl);
 
@@ -493,22 +487,17 @@
 
 static void __exit unload_shpchpd(void)
 {
+	struct list_head *tmp;
+	struct list_head *next;
 	struct controller *ctrl;
-	struct controller *tctrl;
 
-	ctrl = shpchp_ctrl_list;
-
-	while (ctrl) {
+	list_for_each_safe(tmp, next, &shpchp_ctrl_list) {
+		ctrl = list_entry(tmp, struct controller, ctrl_list);
 		shpchp_remove_ctrl_files(ctrl);
 		cleanup_slots(ctrl);
-
 		kfree (ctrl->pci_bus);
 		ctrl->hpc_ops->release_ctlr(ctrl);
-
-		tctrl = ctrl;
-		ctrl = ctrl->next;
-
-		kfree(tctrl);
+		kfree(ctrl);
 	}
 
 	/* Stop the notification mechanism */