How about this one instead. MOD_INC_USE_COUNT is placed before I call
any functions that can sleep. Let's just hope that the call to me doesn't
come after some sleeping in the higher layers...
Duncan.
--- redux-2.5/drivers/usb/misc/speedtch.c 2003-04-08 08:49:33.000000000 +0200
+++ bollux-2.5/drivers/usb/misc/speedtch.c 2003-04-09 10:08:27.000000000 +0200
@@ -933,15 +933,24 @@
if (vcc->qos.aal != ATM_AAL5)
return -EINVAL;
+ if (!instance->firmware_loaded) {
+ dbg ("firmware not loaded!");
+ return -EAGAIN;
+ }
+
+ MOD_INC_USE_COUNT;
+
down (&instance->serialize); /* vs self, udsl_atm_close */
if (udsl_find_vcc (instance, vpi, vci)) {
up (&instance->serialize);
+ MOD_DEC_USE_COUNT;
return -EADDRINUSE;
}
if (!(new = kmalloc (sizeof (struct udsl_vcc_data), GFP_KERNEL))) {
up (&instance->serialize);
+ MOD_DEC_USE_COUNT;
return -ENOMEM;
}
@@ -967,10 +976,7 @@
dbg ("Allocated new SARLib vcc 0x%p with vpi %d vci %d", new, vpi, vci);
- MOD_INC_USE_COUNT;
-
- if (instance->firmware_loaded)
- udsl_fire_receivers (instance);
+ udsl_fire_receivers (instance);
dbg ("udsl_atm_open successful");
@@ -1041,6 +1047,7 @@
int ret;
if ((ret = usb_set_interface (instance->usb_dev, 1, 1)) < 0) {
+ dbg ("usb_set_interface returned %d!", ret);
up (&instance->serialize);
return ret;
}
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/