Another of the recent USB issues seems to be caused by khubd
exiting  ... it seems to be getting a signal, and thinking that
is a fine reason to exit.  Net result:  no, you can't plug in
any new devices, sorry.

Here's a quick hack that may help.  It's not all that clean,
the replacement for the "kill thread on shutdown" logic is
smp-wrong and this makes khubd show up on load statistics,
but at least if you're seeing this failure you'll be able to
get past it.

- Dave
--- ./drivers-dist/usb/core/hub.c       Thu Oct 17 01:29:50 2002
+++ ./drivers/usb/core/hub.c    Wed Oct 16 13:35:48 2002
@@ -45,4 +45,5 @@
 static int khubd_pid = 0;                      /* PID of khubd */
 static DECLARE_COMPLETION(khubd_exited);
+static int khubd_exiting = 0;
 
 #ifdef DEBUG
@@ -1057,11 +1058,10 @@
        strcpy(current->comm, "khubd");
 
-       /* Send me a signal to get me die (for debugging) */
        do {
                usb_hub_events();
-               wait_event_interruptible(khubd_wait, !list_empty(&hub_event_list)); 
+               wait_event(khubd_wait, !list_empty(&hub_event_list)); 
                if (current->flags & PF_FREEZE)
                        refrigerator(PF_IOTHREAD);
-       } while (!signal_pending(current));
+       } while (!khubd_exiting);
 
        dbg("usb_hub_thread exiting");
@@ -1116,10 +1116,9 @@
 void usb_hub_cleanup(void)
 {
-       int ret;
-
-       /* Kill the thread */
-       ret = kill_proc(khubd_pid, SIGTERM, 1);
-
+       dbg ("wait for khubd exit");
+       khubd_exiting = 1;
+       wake_up(&khubd_wait);
        wait_for_completion(&khubd_exited);
+       khubd_exiting = 0;
 
        /*

Reply via email to