From a264719f9a225297d51311c279f6e3a2c0610615 Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Tue, 2 Jun 2009 16:58:10 +0100 Subject: [PATCH] --- yaml --- r: 145475 b: refs/heads/master c: 05ad709d04799125ed85dd816fdb558258102172 h: refs/heads/master i: 145473: 0a9caabbd386a760821d98a5e9af395726671fce 145471: f826d57cef3a30a7a16c09efb03623c844c94e8a v: v3 --- [refs] | 2 +- trunk/drivers/parport/share.c | 13 ++++++++++--- trunk/include/linux/parport.h | 4 ++++ 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index f9697540407a..6c5fd85d1cdf 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: d3ae33efb8e2f277f9007eb060c9d0b91ab38ae1 +refs/heads/master: 05ad709d04799125ed85dd816fdb558258102172 diff --git a/trunk/drivers/parport/share.c b/trunk/drivers/parport/share.c index 0ebca450ed29..dffa5d4fb298 100644 --- a/trunk/drivers/parport/share.c +++ b/trunk/drivers/parport/share.c @@ -614,7 +614,10 @@ parport_register_device(struct parport *port, const char *name, * pardevice fields. -arca */ port->ops->init_state(tmp, tmp->state); - parport_device_proc_register(tmp); + if (!test_and_set_bit(PARPORT_DEVPROC_REGISTERED, &port->devflags)) { + port->proc_device = tmp; + parport_device_proc_register(tmp); + } return tmp; out_free_all: @@ -646,10 +649,14 @@ void parport_unregister_device(struct pardevice *dev) } #endif - parport_device_proc_unregister(dev); - port = dev->port->physport; + if (port->proc_device == dev) { + port->proc_device = NULL; + clear_bit(PARPORT_DEVPROC_REGISTERED, &port->devflags); + parport_device_proc_unregister(dev); + } + if (port->cad == dev) { printk(KERN_DEBUG "%s: %s forgot to release port\n", port->name, dev->name); diff --git a/trunk/include/linux/parport.h b/trunk/include/linux/parport.h index e1f83c5065c5..38a423ed3c01 100644 --- a/trunk/include/linux/parport.h +++ b/trunk/include/linux/parport.h @@ -324,6 +324,10 @@ struct parport { int spintime; atomic_t ref_count; + unsigned long devflags; +#define PARPORT_DEVPROC_REGISTERED 0 + struct pardevice *proc_device; /* Currently register proc device */ + struct list_head full_list; struct parport *slaves[3]; };