From ef3571cc1e8902902430ccf85b45510a97fc5ba8 Mon Sep 17 00:00:00 2001 From: Dominik Brodowski Date: Tue, 11 Jan 2005 03:20:33 -0800 Subject: [PATCH] [PATCH] pcmcia: remove internal module use count, use module_refcount instead Remove the internal driver use_count in ds.c, as the reference counting is done in the module core anyways, and that reference count is available for cardmgr's usage by a call to module_refcount. And if !CONFIG_MODULE_UNLOAD, rmmod is useless anyways, so avoid that call by cardmgr at all. Signed-off-by: Dominik Brodowski Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- drivers/pcmcia/ds.c | 13 ++++++++----- include/pcmcia/ds.h | 1 - 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/drivers/pcmcia/ds.c b/drivers/pcmcia/ds.c index 1fe37b8ad12b..24dd95e238a9 100644 --- a/drivers/pcmcia/ds.c +++ b/drivers/pcmcia/ds.c @@ -285,7 +285,6 @@ int pcmcia_register_driver(struct pcmcia_driver *driver) if (!driver) return -EINVAL; - driver->use_count = 0; driver->drv.bus = &pcmcia_bus_type; return driver_register(&driver->drv); @@ -307,10 +306,16 @@ static struct proc_dir_entry *proc_pccard = NULL; static int proc_read_drivers_callback(struct device_driver *driver, void *d) { char **p = d; - struct pcmcia_driver *p_dev = container_of(driver, + struct pcmcia_driver *p_drv = container_of(driver, struct pcmcia_driver, drv); - *p += sprintf(*p, "%-24.24s 1 %d\n", driver->name, p_dev->use_count); + *p += sprintf(*p, "%-24.24s 1 %d\n", p_drv->drv.name, +#ifdef CONFIG_MODULE_UNLOAD + (p_drv->owner) ? module_refcount(p_drv->owner) : 1 +#else + 1 +#endif + ); d = (void *) p; return 0; @@ -593,7 +598,6 @@ static int bind_request(struct pcmcia_bus_socket *s, bind_info_t *bind_info) /* finally here the parent client is registered */ s->parent->clients = client; - p_drv->use_count++; if (p_drv->attach) { p_dev->instance = p_drv->attach(); if (!p_dev->instance) { @@ -727,7 +731,6 @@ static int unbind_request(struct pcmcia_bus_socket *s, bind_info_t *bind_info) /* detach the "instance" */ p_drv = to_pcmcia_drv(p_dev->dev.driver); if (p_drv) { - p_drv->use_count--; if ((p_drv->detach) && (p_dev->instance)) p_drv->detach(p_dev->instance); module_put(p_drv->owner); diff --git a/include/pcmcia/ds.h b/include/pcmcia/ds.h index 9a25e32eca9b..3f1e4ccbb31f 100644 --- a/include/pcmcia/ds.h +++ b/include/pcmcia/ds.h @@ -132,7 +132,6 @@ struct pcmcia_socket; extern struct bus_type pcmcia_bus_type; struct pcmcia_driver { - int use_count; dev_link_t *(*attach)(void); void (*detach)(dev_link_t *); struct module *owner; -- 2.39.5