Am Donnerstag, 8. Februar 2007 14:40 schrieb Edwin Olson:

> * Is my locking correct?

Short answer: No.

Long answer:
        /* prevent the device from being autosuspended */
        retval = usb_autopm_get_interface(interface);
        if (retval)
                goto exit;

        /* increment our usage count for the device */
        kref_get(&dev->kref);
Reverse the order. You lose BKL protection if usb_autopm_get_interface()
sleeps.

       dev->read_pending = 0;
This is senseless. susi_read_more() is called from read(). If you touch
this variable in interrupt, it needs a spinlock. In any case you are dropping
it too early.

       while (kfifo_len(dev->read_fifo) == 0) {
If susi_read_more() gets an error, you'll loop forever.

                if (wait_event_interruptible(dev->readq, 
kfifo_len(dev->read_fifo)!=0))
                        return -ERESTARTSYS;
Deadly if the device is disconnected.

        HTH
                Oliver

-------------------------------------------------------------------------
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