From pcihpd-discuss-admin@lists.sourceforge.net Wed Jan 25 17:01:01 2006 Message-ID: <43D81EB6.5060405@jp.fujitsu.com> From: Kenji Kaneshige To: Greg KH Cc: Kenji Kaneshige Subject: [PATCH 4/11] shpchp - cleanup controller list Date: Thu, 26 Jan 2006 09:58:30 +0900 This patch changes SHPCHP driver to use list_head structure for managing controller list. Signed-off-by: Kenji Kaneshige Signed-off-by: Greg Kroah-Hartman --- drivers/pci/hotplug/shpchp.h | 4 ++-- drivers/pci/hotplug/shpchp_core.c | 25 +++++++------------------ drivers/pci/hotplug/shpchp_ctrl.c | 2 +- 3 files changed, 10 insertions(+), 21 deletions(-) --- gregkh-2.6.orig/drivers/pci/hotplug/shpchp.h +++ gregkh-2.6/drivers/pci/hotplug/shpchp.h @@ -78,7 +78,7 @@ struct event_info { }; struct controller { - struct controller *next; + struct list_head ctrl_list; struct mutex crit_sect; /* critical section mutex */ struct php_ctlr_state_s *hpc_ctlr_handle; /* HPC controller handle */ int num_slots; /* Number of slots on ctlr */ @@ -204,7 +204,7 @@ extern void shpchp_remove_ctrl_files(str /* Global variables */ -extern struct controller *shpchp_ctrl_list; +extern struct list_head shpchp_ctrl_list; struct ctrl_reg { volatile u32 base_offset; --- gregkh-2.6.orig/drivers/pci/hotplug/shpchp_core.c +++ gregkh-2.6/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 , Greg Kroah-Hartman , Dely Sy " @@ -452,13 +452,7 @@ static int shpc_probe(struct pci_dev *pd /* 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 int shpc_start_thread(void) 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 */ --- gregkh-2.6.orig/drivers/pci/hotplug/shpchp_ctrl.c +++ gregkh-2.6/drivers/pci/hotplug/shpchp_ctrl.c @@ -688,7 +688,7 @@ static int event_thread(void* data) if (pushbutton_pending) shpchp_pushbutton_thread(pushbutton_pending); else - for (ctrl = shpchp_ctrl_list; ctrl; ctrl=ctrl->next) + list_for_each_entry(ctrl, &shpchp_ctrl_list, ctrl_list) interrupt_event_handler(ctrl); } dbg("event_thread signals exit\n");