Jordan
Pete Zaitcev wrote:
>
> > Looks like the change int he usb_start_wait_urb code is a problem.
>
> Yes, something was not right with my change.
> I am trying to coax people into testing this (on top of -ac8):
>
> --- linux-2.4.8-ac8/drivers/usb/usb.c Tue Aug 21 14:39:55 2001
> +++ linux-2.4.8-ac8-niph/drivers/usb/usb.c Tue Aug 21 16:02:01 2001
> @@ -1080,10 +1080,17 @@
> current->state = TASK_RUNNING;
> remove_wait_queue(&awd.wqh, &wait);
>
> - if (!timeout) {
> - printk("usb_control/bulk_msg: timeout\n");
> - usb_unlink_urb(urb); // remove urb safely
> - status = -ETIMEDOUT;
> + if (!awd.done) {
> + if (urb->status != -EINPROGRESS) { /* No callback?!! */
> + printk(KERN_ERR "usb: raced timeout, "
> + "pipe 0x%x status %d time left %d\n",
> + urb->pipe, urb->status, timeout);
> + status = urb->status;
> + } else {
> + printk("usb_control/bulk_msg: timeout\n");
> + usb_unlink_urb(urb); // remove urb safely
> + status = -ETIMEDOUT;
> + }
> } else
> status = urb->status;
>
>
> > I suspect either you need to add wmb() and rmb() to stop misoptimisations
> > on done (along with making it (!timeout && !awd.done)
>
> Arjan said so too - I'll add them later just in case.
> About (!timeout && !awd.done) - it's not going to be enough,
> I think. I suspect that callback is not delivered at all
> in some circumstances, or something really screwy like that.
>
> > there is a signal related problem - if so making it set the state
> > to TASK_UNINTERRUPTIBLE might cure it
>
> I tried that first and it worked, but someone disagreed. Dunno...
>
> -- Pete
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/