Am Donnerstag, 27. Juni 2002 20:24 schrieb David Brownell: > >>>Hotpluggings are rare events ... Besides they take BKL and thus > >>>couldn't run in concurrency. > >> > >>What was the reason they have BKL? In principle it shouldn't > >>be needed, since all the relevant USB data structures are locked > >>correctly, and there's no comment in the code explaining why > >>the hub driver touches the BKL ... > > > > Module unloading. > > ... worth documenting that in the source code, I'll include > an appropriate comment in my next usbcore patch.
Actually looking at it. We can at least reduce BKL usage. Here it is, completely untested of course ;-) Regards Oliver PS: Is it true that the IBM guys have a keyboard they make a notch into whenever they reduce BKL usage ? 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], 2002-06-27 21:16:56+02:00, [EMAIL PROTECTED] - reduce BKL usage diff -Nru a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c --- a/drivers/usb/core/hub.c Thu Jun 27 21:18:14 2002 +++ b/drivers/usb/core/hub.c Thu Jun 27 21:18:14 2002 @@ -1050,8 +1050,6 @@ static int usb_hub_thread(void *__hub) { - lock_kernel(); - /* * This thread doesn't need any user-level access, * so get rid of all our resources @@ -1072,7 +1070,6 @@ dbg("usb_hub_thread exiting"); - unlock_kernel(); complete_and_exit(&khubd_exited, 0); } diff -Nru a/drivers/usb/core/usb.c b/drivers/usb/core/usb.c --- a/drivers/usb/core/usb.c Thu Jun 27 21:18:14 2002 +++ b/drivers/usb/core/usb.c Thu Jun 27 21:18:14 2002 @@ -1135,6 +1135,7 @@ info("USB disconnect on device %d", dev->devnum); + lock_kernel(); /*guard against modules being unloaded */ if (dev->actconfig) { for (i = 0; i < dev->actconfig->bNumInterfaces; i++) { struct usb_interface *interface = &dev->actconfig->interface[i]; @@ -1156,6 +1157,7 @@ put_device(&interface->dev); } } + unlock_kernel(); /* Free up all the children.. */ for (i = 0; i < USB_MAXCHILDREN; i++) { @@ -1349,7 +1351,9 @@ usbfs_add_device(dev); /* find drivers willing to handle this device */ + lock_kernel(); /* guard against modules unloading */ usb_find_drivers(dev); + unlock_kernel(); /* userspace may load modules and/or configure further */ call_policy ("add", dev); =================================================================== This BitKeeper patch contains the following changesets: 1.646 ## Wrapped with gzip_uu ## begin 664 bkpatch17020 M'XL(`/9D&ST``ZV56V^;0!"%G[V_8J2\M(EL=F8O&%>NTB156R52K51YKKBL MP0*S%9BFE?CQ7;#D.!&-&S>6+?#.[N'LG`\X@;O:5+.1+58_3<5.X+.M-^ZO M*6UI)IE=FV)5-K\FMDI=\=9:5_2Z86^[PHOR\:8RIO;N;9638F[6(MS$&;AB M/1OA1.Q&-K]_F-GH]N.GNYL/MXS-YW"9A65JOID-S.<LRL^3QA23O+)AUEVP MW95;XAP127&A-*J6ID+(%C6/$G>:D!\L(QVPM#+I^79Y;->/EQ/7I%$*3:I5 MI(1B5X`3+35P\KCVR`?"&>J9TF><9IS#=H/G0ZV`,X(Q9Q?P_YXO60QCJ$S2 MQ`8NKF^@J</4L&M02I!@BX<>L?$+/XSQD+/W`R:3JMM:[35UU/TF\8-9R0/4 M+0FI9!MK,D9-"?TX"@57S[7DD69L*_,@W+7>1R=+LE738"H/>LJ:`4\")8DV MQE`OE2^D3"*E_!=ZV@GO>T(2BGH>A^</PWFDWZ>0/F=148`!!5RUJ(B"GECA M/P66Y+\`RV$L7A'8.ELM-QVOCM1M_[["N+KOOXZ\Q5]:>03#5\B5`.J.+FT< MSJEG[7!.+V#]8$[[>'.![DG"J94:<=KGA"Z0HX*2K_MDV0]J>_,="JK?V!%! M?4%T<"(;%3;.O^>F*DWQYNT[\$[3)JP2"--P5=8;6-ND*4P-D5F5*31E8</$ M)'#J=0IJVBET@_L:KB(4#FK#L/A6MKM`K^L`'=3=O9OBS,1YW:SGF,1BR8UA *?P`X-VZO&@<````` ` end ------------------------------------------------------- Sponsored by: ThinkGeek at http://www.ThinkGeek.com/ _______________________________________________ [EMAIL PROTECTED] To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel