diff options
| author | Greg Kroah-Hartman <greg@kroah.com> | 2003-05-29 01:11:00 -0700 |
|---|---|---|
| committer | Greg Kroah-Hartman <greg@kroah.com> | 2003-05-29 01:11:00 -0700 |
| commit | 5388d99a571afdf0a5e7656dd4e51285bf40d0d7 (patch) | |
| tree | c41c0c896d70e84902b219003b9613e61377a4be | |
| parent | b5939debbbf7152ef7a644891139227f29570f7a (diff) | |
| parent | e2ac95ce6f87ea075e874ce3db5aafb38ed58496 (diff) | |
Merge http://mdomsch.bkbits.net/linux-2.5-dynids
into kroah.com:/home/greg/linux/BK/pci-2.5
| -rw-r--r-- | drivers/pci/pci-driver.c | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c index 3b25fcaf923c..2423923f80f9 100644 --- a/drivers/pci/pci-driver.c +++ b/drivers/pci/pci-driver.c @@ -235,7 +235,7 @@ store_new_id(struct device_driver * driver, const char * buf, size_t count) driver_data : 0UL; spin_lock(&pdrv->dynids.lock); - list_add(&pdrv->dynids.list, &dynid->node); + list_add_tail(&pdrv->dynids.list, &dynid->node); spin_unlock(&pdrv->dynids.lock); bus = get_bus(pdrv->driver.bus); @@ -315,6 +315,22 @@ pci_init_dynids(struct pci_dynids *dynids) INIT_LIST_HEAD(&dynids->list); } +static void +pci_free_dynids(struct pci_driver *drv) +{ + struct list_head *pos, *n; + struct dynid *dynid; + + spin_lock(&drv->dynids.lock); + list_for_each_safe(pos, n, &drv->dynids.list) { + dynid = list_entry(pos, struct dynid, node); + list_del(&dynid->node); + kfree(dynid); + } + spin_unlock(&drv->dynids.lock); +} + + /** * pci_register_driver - register a new pci driver * @drv: the driver structure to register @@ -363,6 +379,7 @@ void pci_unregister_driver(struct pci_driver *drv) { driver_unregister(&drv->driver); + pci_free_dynids(drv); } static struct pci_driver pci_compat_driver = { |
