speedtch usbatm2.c,1.16,1.17

Duncan Sands duncan at infradead.org
Fri Jan 28 10:14:23 EST 2005


Update of /home/cvs/speedtch
In directory phoenix.infradead.org:/tmp/cvs-serv17913

Modified Files:
	usbatm2.c 
Log Message:
Simplify the driver list locking.  As long as users stick to the following
rules we will be OK:
(1) call usbatm_register before usb_register (contrariwise for unregistering)
or
(2) call usbatm_register/deregister during usb probe or usb disconnect.


Index: usbatm2.c
===================================================================
RCS file: /home/cvs/speedtch/usbatm2.c,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -r1.16 -r1.17
--- usbatm2.c	28 Jan 2005 14:58:17 -0000	1.16
+++ usbatm2.c	28 Jan 2005 15:14:20 -0000	1.17
@@ -1059,15 +1059,13 @@
 			driver = candidate;
 			break;
 		}
+	up(&usbatm_driver_sem);
 
-	if (!driver) {
-		up(&usbatm_driver_sem);
+	if (!driver)
 		return -ENODEV;
-	}
 
 	/* instance init */
 	if (!(instance = kmalloc(sizeof(*instance), GFP_KERNEL))) {
-		up(&usbatm_driver_sem);
 		dev_dbg(&intf->dev, "no memory for instance data!\n");
 		return -ENOMEM;
 	}
@@ -1191,8 +1189,6 @@
 	if (driver->bind && (error = driver->bind(instance, intf, &need_heavy)) < 0)
 			goto fail;
 
-	up(&usbatm_driver_sem);
-
 	if (need_heavy && driver->heavy_init)
 		error = usbatm_heavy_init(instance);
 	else {
@@ -1201,7 +1197,7 @@
 	}
 
 	if (error)
-		goto fail_nosem;
+		goto fail;
 
 	usb_get_dev(dev);
 	udsl_get_instance(instance);	/* dropped in usbatm_usb_disconnect */
@@ -1210,9 +1206,6 @@
 	return 0;
 
  fail:
-	up(&usbatm_driver_sem);
-
- fail_nosem:
 	for (i = 0; i < num_snd_bufs; i++)
 		kfree(instance->send_buffers[i].base);
 




More information about the Usbatm-commits mailing list