Merge branch 'topic/section-fix' into for-linus
[pandora-kernel.git] / drivers / parport / share.c
index 0ebca45..dffa5d4 100644 (file)
@@ -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);