Am Donnerstag, 27. Juni 2002 23:41 schrieb David Brownell:
> Oliver Neukum wrote:
> > Am Donnerstag, 27. Juni 2002 21:33 schrieben Sie:
> >>OK, I'll let you fix that BKL stuff (didn't you add it
> >>in the first place? :) but this looks like the locking
> >
> > I did not add it. It was there for as long as I can remember.
> > And I can hardly fix it. It is correct.
>
> Bad/missing comments == bad code, correctness aside.
>
> >>is being done at the wrong level:
> >
> > Where would you like it ?
> > In usb_find_interface_driver ?
>
> Yes -- right next to where the module unload issues
> crop up, not several layers higher where such issues
> should be invisible.

OK, here we go again.

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-28 09:42:53+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    Fri Jun 28 09:44:58 2002
+++ b/drivers/usb/core/hub.c    Fri Jun 28 09:44:58 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    Fri Jun 28 09:44:58 2002
+++ b/drivers/usb/core/usb.c    Fri Jun 28 09:44:58 2002
@@ -683,6 +683,7 @@
                goto out_err;
 
        private = NULL;
+       lock_kernel(); /* guard against module unload */
        for (tmp = usb_driver_list.next; tmp != &usb_driver_list;) {
                driver = list_entry(tmp, struct usb_driver, driver_list);
                tmp = tmp->next;
@@ -721,9 +722,11 @@
                if (private) {
                        usb_driver_claim_interface(driver, interface, private);
                        up(&dev->serialize);
+                       unlock_kernel();
                        return 0;
                }
        }
+       unlock_kernel();
 
 out_err:
        up(&dev->serialize);
@@ -1135,6 +1138,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 +1160,7 @@
                        put_device(&interface->dev);
                }
        }
+       unlock_kernel();
 
        /* Free up all the children.. */
        for (i = 0; i < USB_MAXCHILDREN; i++) {

===================================================================


This BitKeeper patch contains the following changesets:
1.646
## Wrapped with gzip_uu ##


begin 664 bkpatch3130
M'XL(`/H3'#T``ZU586^;,!#]'/^*D_IE:Y7@.V,#F3)U;:>M:J55F?IY`N.2
M*`1/$-I-XL?/A"E).]:L61$(\//=/=][AB.XK4PY'MA\?F]*=@2?;;5RKZ:P
MA1G-[-+D\Z+^,;)EYL"IM0[TVF&OB_"2Q7!5&E-Y#R29FW(3K_0,'%*-!S@2
MFY'5S^]F/)A^_'1[_6'*V&0"Y[.XR,Q7LX+)A"6+T[0V^6A1VGC65FLV<$.<
M(R))+J1"V5`HA-^@XDGJ'E,*HKM$12PK37;:A6N[?!Q.7)%"7RB2C20I)+L`
M'"E?`2>/*X]"X-'8I[$4)YS&G$.WNM.^/L`)P9"S,_A_SN=,PQ!*D];:P-G5
M-=15G!EV!5)2)-G-MD=L^,*#,1YS]KZ'9%JV2ZN\NDK::Z2W9'T>H6I(^-)O
MM")C9$@8Z"067#[7DD<YM2W--G';^I`'/I%HE"NC]G*:U3V<!/HN@<98W<E`
M^'Z:2!F\D-,F\2XG)"%I[<?^^?WF/)#O4Y,^1]$Y`".*N&Q0$D5KQXK@J6'I
MGPS+82A>T;!+>[]C5TCM0^$\VW7R"PS+A_7I/'CSEZ8>X.8+Y%(`M7>G._8K
MMG;=?L5>X/J]BNT:G0MTWQ1.C:\0P[5BZ*0Y2#+YNM^8?LFZ#;E/LO42#Y#L
M4H6M4H/<ZL6WA2D+D[]Y^PZ\8\CJN$PASN)Y4:T<M[3.#=1%;N,4CCUV&9!H
M`P>#=FPWN(54"_T)(+K=T5>MKU@%B9D7V>^:IJN**,/>W)N?F)X9O:CJY03C
/1-^E0<1^`1W#>WY`!P``
`
end



-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Caffeinated soap. No kidding.
http://thinkgeek.com/sf
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to