fruktsallad
11-12-2006, 09:36
Hey folks!
I'm getting lots of:
Jan 1 01:06:02 kernel: usb-uhci.c: iso_find_start: gap in seamless isochronous scheduling
in my syslog.log. Some of these (error?) messages result in a gap in the sound output from my usb sound card connected to my wl500g-P. This is really annoying and I want to get rid of it. I've described my problem in some length here: http://wl500g.info/showthread.php?t=4150&page=3.
MatB had the same problem here: http://wl500g.info/showthread.php?t=3388&highlight=isochronous, but no solution was found.
What's causing this?
From what I can tell from the printout at http://www.charmed.com/txt/usb-uhci.txt, there seems to be some timeout going on? Would adjusting that 10ms limit help me out in any way? If so, how would I do it? :confused: Would using another kernel (i.e. switching to OpenWRT) help?
From the usb-uhci.txt:
// adjust start_frame according to scheduling constraints (ASAP etc)
_static int iso_find_start (urb_t *urb)
{
uhci_t *s = (uhci_t*) urb->dev->bus->hcpriv;
unsigned int now;
unsigned int start_limit = 0, stop_limit = 0, queued_size;
int limits;
now = UHCI_GET_CURRENT_FRAME (s) & 1023;
if ((unsigned) urb->number_of_packets > 900)
return -EFBIG;
limits = find_iso_limits (urb, &start_limit, &stop_limit);
queued_size = (stop_limit - start_limit) & 1023;
if (urb->transfer_flags & USB_ISO_ASAP) {
// first iso
if (limits) {
// 10ms setup should be enough //FIXME!
urb->start_frame = (now + 10) & 1023;
}
else {
urb->start_frame = stop_limit; //seamless linkage
if (((now - urb->start_frame) & 1023) <= (unsigned) urb->number_of_packets) {
info("iso_find_start: gap in seamless isochronous scheduling");
dbg("iso_find_start: now %u start_frame %u number_of_packets %u pipe 0x%08x",
now, urb->start_frame, urb->number_of_packets, urb->pipe);
urb->start_frame = (now + 5) & 1023; // 5ms setup should be enough //FIXME!
}
}
}
else {
Greatful for anything you guys can come up with!
I'm getting lots of:
Jan 1 01:06:02 kernel: usb-uhci.c: iso_find_start: gap in seamless isochronous scheduling
in my syslog.log. Some of these (error?) messages result in a gap in the sound output from my usb sound card connected to my wl500g-P. This is really annoying and I want to get rid of it. I've described my problem in some length here: http://wl500g.info/showthread.php?t=4150&page=3.
MatB had the same problem here: http://wl500g.info/showthread.php?t=3388&highlight=isochronous, but no solution was found.
What's causing this?
From what I can tell from the printout at http://www.charmed.com/txt/usb-uhci.txt, there seems to be some timeout going on? Would adjusting that 10ms limit help me out in any way? If so, how would I do it? :confused: Would using another kernel (i.e. switching to OpenWRT) help?
From the usb-uhci.txt:
// adjust start_frame according to scheduling constraints (ASAP etc)
_static int iso_find_start (urb_t *urb)
{
uhci_t *s = (uhci_t*) urb->dev->bus->hcpriv;
unsigned int now;
unsigned int start_limit = 0, stop_limit = 0, queued_size;
int limits;
now = UHCI_GET_CURRENT_FRAME (s) & 1023;
if ((unsigned) urb->number_of_packets > 900)
return -EFBIG;
limits = find_iso_limits (urb, &start_limit, &stop_limit);
queued_size = (stop_limit - start_limit) & 1023;
if (urb->transfer_flags & USB_ISO_ASAP) {
// first iso
if (limits) {
// 10ms setup should be enough //FIXME!
urb->start_frame = (now + 10) & 1023;
}
else {
urb->start_frame = stop_limit; //seamless linkage
if (((now - urb->start_frame) & 1023) <= (unsigned) urb->number_of_packets) {
info("iso_find_start: gap in seamless isochronous scheduling");
dbg("iso_find_start: now %u start_frame %u number_of_packets %u pipe 0x%08x",
now, urb->start_frame, urb->number_of_packets, urb->pipe);
urb->start_frame = (now + 5) & 1023; // 5ms setup should be enough //FIXME!
}
}
}
else {
Greatful for anything you guys can come up with!