Oliver -- I did not test your patch yet, but I think it will solve the problem. Moving the call to get_free_serial to before the call to the attach, like it was in 2.6.20, should do it, since Oleg's patch worked in 2.6.20.
I will test this out and let you know--it will be a few days before I can get to it. -- Al Quoting Oliver Neukum <[EMAIL PROTECTED]>: > Am Montag, 2. April 2007 13:25 schrieb Al Borchers: > > Oleg -- > > > > Quoting Oleg Verych <[EMAIL PROTECTED]>: > > > OK, then i must recheck, why it works for me. Maybe it's just another > > > sysfs crap, because i tested on rc5 without any of it enabled. > > > > You will only see the problem if you have more than one usb serial > > device. Plug in the first device, then plug in a TI 3410 device. > > They will both try to use ttyUSB0--unplug them and you will see an > > oops. > > > > The problem is not in your patch; the problem is in usb-serial, > > as I described. > > Does this help? > > Regards > Oliver > Signed-off-by: Oliver Neukum <[EMAIL PROTECTED]> > -------- > --- linux-2.6.21-rc5/drivers/usb/serial/usb-serial.c.alt 2007-04-02 > 17:19:15.000000000 +0200 > +++ linux-2.6.21-rc5/drivers/usb/serial/usb-serial.c 2007-04-02 > 17:22:20.000000000 +0200 > @@ -969,17 +969,24 @@ > } else if (num_interrupt_out) { > dbg("the device claims to support interrupt out transfers, but > write_int_callback is not defined"); > } > - > - /* if this device type has an attach function, call it */ > + > + if (get_free_serial (serial, num_ports, &minor) == NULL) { > + dev_err(&interface->dev, "No more free serial devices\n"); > + goto probe_error; > + } > + serial->minor = minor; > + > + /* if this device type has an attach function, call it > + * now as the minors are known but the device not registered */ > if (type->attach) { > if (!try_module_get(type->driver.owner)) { > dev_err(&interface->dev, "module get failed, > exiting\n"); > - goto probe_error; > + goto full_error; > } > retval = type->attach (serial); > module_put(type->driver.owner); > if (retval < 0) > - goto probe_error; > + goto full_error; > if (retval > 0) { > /* quietly accept this device, but don't bind to a > serial port > * as it's about to disappear */ > @@ -987,12 +994,6 @@ > } > } > > - if (get_free_serial (serial, num_ports, &minor) == NULL) { > - dev_err(&interface->dev, "No more free serial devices\n"); > - goto probe_error; > - } > - serial->minor = minor; > - > /* register all of the individual ports with the driver core */ > for (i = 0; i < num_ports; ++i) { > port = serial->port[i]; > @@ -1016,6 +1017,8 @@ > usb_set_intfdata (interface, serial); > return 0; > > +full_error: > + return_serial(serial); > probe_error: > for (i = 0; i < num_bulk_in; ++i) { > port = serial->port[i]; > ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys-and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ linux-usb-devel@lists.sourceforge.net To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel