Re: [linux-usb-devel] [PATCH] USB speedtouch: don't open a connection if no firmware

Duncan Sands (baldrick@wanadoo.fr)
Wed, 9 Apr 2003 10:28:25 +0200


> > Hi Greg, I'm waiting on the fixes to the ATM layer (coming soon to a
> > kernel near you).
>
> Ah, ok, that makes sense.
>
> > As for the position of MOD_INC_USE_COUNT, did you ever hear
> > of anyone getting bitten by a race like this? If it makes you feel
> > better, I will move it up, probably just before I take the semaphore
> > (since that is the first place we can sleep). I will do it tomorrow, OK?
>
> Yes, it needs to be before any function that can sleep. I'll hold off
> applying this patch then.

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/