On Fri, Aug 11, 2006 at 08:46:54AM +0200, Thorsten Wiedemer wrote:
> Hi !
> 
> > Yes, I'm playing around with some multi-threaded probing stuff right
> > now.  I've got PCI working pretty well now, see the -mm kernel for the
> > patches if you want to test it out.
> >
> > However it's not going to directly translate over to the USB code, we
> > have to limit probing to a per-device basis, not a per-interface one
> > like the driver core expects, so it will take a bit more work to
> > implement it.  But it is on my TODO list.
> 
> Sounds interesting. But sounds also that it would take a moment until it
> will be available for USB.
> I'd be very interested in your results, also to make some tests.

Actually it wasn't that hard at all to do a first cut at this.

Here's a patch against the latest -mm kernel tree (should also apply to
the 2.6.18-rc4 and possibly the 2.6.17 kernel release).  It spawns a
thread for every new USB device found in order to do the probing
sequence.

It seems to work properly here for me, but I couldn't really test any
speed up, as I didn't drag my big box of USB devices out.

Let me know if this changes anything for you.

thanks,

greg k-h


From: Greg Kroah-Hartman <[EMAIL PROTECTED]>
Subject: USB: create a new thread for every USB device found during the probe 
sequence

Might speed up some systems.  If nothing else, a bad driver should not
take the whole USB subsystem down with it.

Signed-off-by: Greg Kroah-Hartman <[EMAIL PROTECTED]>

---
 drivers/usb/core/hub.c |   14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

--- gregkh-2.6.orig/drivers/usb/core/hub.c
+++ gregkh-2.6/drivers/usb/core/hub.c
@@ -1199,8 +1199,9 @@ static void show_string(struct usb_devic
  *
  * Only the hub driver or root-hub registrar should ever call this.
  */
-int usb_new_device(struct usb_device *udev)
+static int __usb_new_device(void *void_data)
 {
+       struct usb_device *udev = void_data;
        int err;
 
        err = usb_get_configuration(udev);
@@ -1311,6 +1312,17 @@ fail:
        return err;
 }
 
+int usb_new_device(struct usb_device *udev)
+{
+       struct task_struct *probe_task;
+       int ret = 0;
+
+       probe_task = kthread_run(__usb_new_device, udev,
+                                "usb-probe-%s", udev->devnum);
+       if (IS_ERR(probe_task))
+               ret = PTR_ERR(probe_task);
+       return ret;
+}
 
 static int hub_port_status(struct usb_hub *hub, int port1,
                               u16 *status, u16 *change)

-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
linux-usb-devel@lists.sourceforge.net
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to