Re: [PATCH] usb-serial regression fix

Jim Radford <[email protected]>
Newsgroups gmane.linux.usb.devel,gmane.linux.kernel
Message-ID <[email protected]>
On Mon, Mar 12, 2007 at 09:55:14PM -0400, Mark Lord wrote:
> Jim Radford wrote:
> >On Mon, Mar 12, 2007 at 05:18:19PM -0700, Greg KH wrote:
> >>On Mon, Mar 12, 2007 at 03:59:22PM -0700, Jim Radford wrote:
> >>>On Mon, Mar 12, 2007 at 03:42:35PM -0700, Jim Radford wrote:
> >>>>On Mon, Mar 12, 2007 at 01:33:31PM -0700, Greg KH wrote:
> >>>>>On Mon, Mar 12, 2007 at 04:22:22PM -0400, Mark Lord wrote:
> >>>>>>Oliver Neukum wrote:
> >>>>>>>>Mark Lord wrote:
> >>>>>>>>>Okay, from that part (above), the problem is obvious:
> >>>>>>>>>in that the "MCT U232 converter now disconnected"
> >>>>>>>>>appears, and then we continue to try and call the
> >>>>>>>>>driver's method.. Oops!

> >>>>>>>IMHO shutdown() is using serial->port[] and bombs.
> >>>>>>>Could you reverse the order here?

> >>>Do not NULL serial->port[i] since it is used in ->shutdown().
> >>>This wasn't an issue until the order or ->shutdown() and
> >>>device_unregister was corrected.

> >>>        for (i = 0; i < serial->num_ports; ++i)
> >>>                if (serial->port[i]->dev.parent != NULL) {
> >>>                        device_unregister(&serial->port[i]->dev);
> >>>-                       serial->port[i] = NULL;
> >>>                }

> >>But shouldn't you null it out somewhere?  It will be an "empty"
> >>pointer at some point in time...

> >Not as far as I can see. The serial structure that ->port[i] is in
> >gets kfree()ed soon after, in the same function, and nothing in
> >between, other than ->shutdown(), uses ->port[].  I assume it was
> >someone being overly cautious.

> So where does the memory get freed -- the structure pointed at
> by the serial->port[i] thingie ?  It's not a leak, is it?

It gets free'd through device_unregister

    for (i = 0; i < num_ports; ++i) {
       ...
       port->dev.release = &port_release;
       ...
       retval = device_register(&port->dev);

which means that until all the drivers get converted to use
->port_probe() and ->port_remove() (which gets called by
device_unregister) and stop using the ->port[] array in ->shutdown()
we need to have ->shutdown() called before device_unregister.

> > > > Look at changeset d9a7ecacac5f8274d2afce09aadcf37bdb42b93a in Linus's
> > > > tree from Jim Radford:

> > > > http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=d9a7ecacac5f8274d2afce09aadcf37bdb42b93a

So, this patch should be reverted for now.

-Jim

-------------------------------------------------------------------------
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
_______________________________________________
[email protected]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.