updated patch with throttling
Duncan Sands
baldrick at free.fr
Fri Mar 25 07:00:03 EST 2005
Hi Roman,
> I thought so too, but upon closer inspection I realized that a failed
> urb submission didn't cause a break from the main loop in
> usbatm_process_{receive,send}, so it went over and over => livelock if
> the submission error was permanent.
that doesn't seem right. For example, in usbatm_process_send there is:
if ((err = usb_submit_urb(snd->urb, GFP_ATOMIC)) < 0) {
dbg("usbatm_process_send: urb submission failed (%d)!", err);
spin_lock_irq(&instance->send_lock);
list_add(&snd->list, &instance->spare_senders);
spin_unlock_irq(&instance->send_lock);
list_add(&buf->list, &instance->filled_send_buffers);
return; /* bail out */
}
Notice the line commented /* bail out */? I think the problem was more
to do with who schedules the tasklet. IIRC, originally the send tasklet
wasn't rescheduled when the urb status was non-zero in the send completion
routine, but it seems to be rescheduled now, which is not so good (this is
not the only problem).
Ciao,
Duncan.
PS: Good to hear you're working on the stall problem - it's important.
More information about the Usbatm
mailing list