Hi, this adds error handling to the open method of the cdc acm driver. The change set is relative to my last patch rewriting probe.
Regards Oliver Signed-off-by: Oliver Neukum <[EMAIL PROTECTED]> You can import this changeset into BK by piping this whole message to: '| bk receive [path to repository]' or apply the patch as usual. =================================================================== [EMAIL PROTECTED], 2004-05-31 13:52:35+02:00, [EMAIL PROTECTED] - add error handling to open method cdc-acm.c | 31 +++++++++++++++++++++++-------- 1 files changed, 23 insertions(+), 8 deletions(-) diff -Nru a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c --- a/drivers/usb/class/cdc-acm.c Mon May 31 13:54:36 2004 +++ b/drivers/usb/class/cdc-acm.c Mon May 31 13:54:36 2004 @@ -27,6 +27,7 @@ * v0.22 - probe only the control interface. if usbcore doesn't choose the * config we want, sysadmin changes bConfigurationValue in sysfs. * v0.23 - use softirq for rx processing, as needed by tty layer + * v0.24 - change probe method to evaluate CDC union descriptor */ /* @@ -73,6 +74,8 @@ static struct tty_driver *acm_tty_driver; static struct acm *acm_table[ACM_TTY_MINORS]; +static DECLARE_MUTEX(open_sem); + #define ACM_READY(acm) (acm && acm->dev && acm->used) /* @@ -256,22 +259,23 @@ tty->driver_data = acm; acm->tty = tty; - lock_kernel(); + down(&open_sem); - if (acm->used++) { - unlock_kernel(); - return 0; + if (acm->used) { + goto done; } - unlock_kernel(); - acm->ctrlurb->dev = acm->dev; - if (usb_submit_urb(acm->ctrlurb, GFP_KERNEL)) + if (usb_submit_urb(acm->ctrlurb, GFP_KERNEL)) { dbg("usb_submit_urb(ctrl irq) failed"); + goto bail_out; + } acm->readurb->dev = acm->dev; - if (usb_submit_urb(acm->readurb, GFP_KERNEL)) + if (usb_submit_urb(acm->readurb, GFP_KERNEL)) { dbg("usb_submit_urb(read bulk) failed"); + goto bail_out_and_unlink; + } acm_set_control(acm, acm->ctrlout = ACM_CTRL_DTR | ACM_CTRL_RTS); @@ -279,7 +283,16 @@ otherwise it is scheduled, and with high data rates data can get lost. */ tty->low_latency = 1; +done: + acm->used++; + up(&open_sem); return 0; + +bail_out_and_unlink: + usb_unlink_urb(acm->ctrlurb); +bail_out: + up(&open_sem); + return -EIO; } static void acm_tty_close(struct tty_struct *tty, struct file *filp) @@ -289,6 +302,7 @@ if (!acm || !acm->used) return; + down(&open_sem); if (!--acm->used) { if (acm->dev) { acm_set_control(acm, acm->ctrlout = 0); @@ -304,6 +318,7 @@ kfree(acm); } } + up(&open_sem); } static int acm_tty_write(struct tty_struct *tty, int from_user, const unsigned char *buf, int count) =================================================================== This BitKeeper patch contains the following changesets: 1.1759 ## Wrapped with gzip_uu ## M'XL( /P<NT \55VT[;[EMAIL PROTECTED]";>BR^)41!MDM((6A %J0^5HO5Z M0R)B;[1>@ZJF_]ZQ0U-H"K2H4FU+*WMFSLPY<Y1LP46I;>*9^>Q:6[(%[TSI M$B^7*M5NVBYT=57E;6,O,71F#(;\J<FUO\KWSZW6I>\D)[EMAIL PROTECTED] 3^7B<?: M8OW%?5GHQ#L;'EX<OSXCI->#_E06E_JC=M#K$6?LM9QGY8%TT[DIVL[*HLRU MDVUE\N4Z=<DIY7B'+!8TC)8LHD&\5"QC3 9,9Y0'G2@@[EMAIL PROTECTED]<1PIH*"CM [EMAIL PROTECTED] &NS..P"#7P:^H(!$TG($Q'N4IY0"@\BPRZ#%B5OX-\RZ1,% M+9!9!MI:8P'+L_FLN,0V8!:Z $2>FHP< 1)@C)S^E)6T_O([EMAIL PROTECTED]: [EMAIL PROTECTED]"RE#)*.Y&RU2)<,+8A =B(G2</JS</40UEV7IJTRUUMCU MEAAC(>>=)>.BVVW<\TC1TWYZ)H='?/4''-!I 9)8AF$D6..T39_QSM,^XP): MG?]HM-4.3J!E;YH'C7/ZV#J>X<,1[P(C\-*[IFT>X%RJ80,+:U)].TD]F$8! M*NDT] =]J(J9*2#3I;*S!8I#1G$(G)1.NIF"P;"//SS#\?N+\^&G[9K1N-3Y MSA[Y3 [EMAIL PROTECTED]<7IFY*;9?W$D<\(B!P+1((*PWF\ V\FOM5Z7.=N K\;Q+ [EMAIL PROTECTED]<H19>[EMAIL PROTECTED]&997F,S>N;+J"4,[.\>45'+X]'1\-SSX,CW=J MR!&/:=UKA9S*V7QL*K='O&^('(L&N3D>1+9:[EMAIL PROTECTED]@!YO(8USZN"IP[U=-DQ'O MU)[EMAIL PROTECTED]:+>[EMAIL PROTECTED]<(E3S-UA86\^V>[EMAIL PROTECTED]<4_:I(-6,]J5]D"6L/1 I2=VDRVJV&[L9"[EMAIL PROTECTED]:JK555GEO33-V"3HAN0[N2V4.?0& ------------------------------------------------------- This SF.Net email is sponsored by: Oracle 10g Get certified on the hottest thing ever to hit the market... Oracle 10g. Take an Oracle 10g class now, and we'll give you the exam FREE. http://ads.osdn.com/?ad_id=3149&alloc_id=8166&op=click _______________________________________________ [EMAIL PROTECTED] To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel