Commit ef3571cc authored by Dominik Brodowski's avatar Dominik Brodowski Committed by Linus Torvalds

[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: default avatarDominik Brodowski <linux@brodo.de>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent daca1b36
...@@ -285,7 +285,6 @@ int pcmcia_register_driver(struct pcmcia_driver *driver) ...@@ -285,7 +285,6 @@ int pcmcia_register_driver(struct pcmcia_driver *driver)
if (!driver) if (!driver)
return -EINVAL; return -EINVAL;
driver->use_count = 0;
driver->drv.bus = &pcmcia_bus_type; driver->drv.bus = &pcmcia_bus_type;
return driver_register(&driver->drv); return driver_register(&driver->drv);
...@@ -307,10 +306,16 @@ static struct proc_dir_entry *proc_pccard = NULL; ...@@ -307,10 +306,16 @@ static struct proc_dir_entry *proc_pccard = NULL;
static int proc_read_drivers_callback(struct device_driver *driver, void *d) static int proc_read_drivers_callback(struct device_driver *driver, void *d)
{ {
char **p = d; char **p = d;
struct pcmcia_driver *p_dev = container_of(driver, struct pcmcia_driver *p_drv = container_of(driver,
struct pcmcia_driver, drv); 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; d = (void *) p;
return 0; return 0;
...@@ -593,7 +598,6 @@ static int bind_request(struct pcmcia_bus_socket *s, bind_info_t *bind_info) ...@@ -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 */ /* finally here the parent client is registered */
s->parent->clients = client; s->parent->clients = client;
p_drv->use_count++;
if (p_drv->attach) { if (p_drv->attach) {
p_dev->instance = p_drv->attach(); p_dev->instance = p_drv->attach();
if (!p_dev->instance) { if (!p_dev->instance) {
...@@ -727,7 +731,6 @@ static int unbind_request(struct pcmcia_bus_socket *s, bind_info_t *bind_info) ...@@ -727,7 +731,6 @@ static int unbind_request(struct pcmcia_bus_socket *s, bind_info_t *bind_info)
/* detach the "instance" */ /* detach the "instance" */
p_drv = to_pcmcia_drv(p_dev->dev.driver); p_drv = to_pcmcia_drv(p_dev->dev.driver);
if (p_drv) { if (p_drv) {
p_drv->use_count--;
if ((p_drv->detach) && (p_dev->instance)) if ((p_drv->detach) && (p_dev->instance))
p_drv->detach(p_dev->instance); p_drv->detach(p_dev->instance);
module_put(p_drv->owner); module_put(p_drv->owner);
......
...@@ -132,7 +132,6 @@ struct pcmcia_socket; ...@@ -132,7 +132,6 @@ struct pcmcia_socket;
extern struct bus_type pcmcia_bus_type; extern struct bus_type pcmcia_bus_type;
struct pcmcia_driver { struct pcmcia_driver {
int use_count;
dev_link_t *(*attach)(void); dev_link_t *(*attach)(void);
void (*detach)(dev_link_t *); void (*detach)(dev_link_t *);
struct module *owner; struct module *owner;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment