linux-media.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* em28xx: Too many ISO frames scheduled when starting stream
@ 2014-09-28 17:25 Antti Palosaari
  2014-09-28 18:13 ` Antti Palosaari
  0 siblings, 1 reply; 5+ messages in thread
From: Antti Palosaari @ 2014-09-28 17:25 UTC (permalink / raw)
  To: LMML

I want raise that bug:
Too many ISO frames scheduled when starting stream
https://bugzilla.kernel.org/show_bug.cgi?id=72891

Is there anyone who cares to study it? It looks like em28xx driver bug 
or USB host controller driver or both.

According to comments bug appeared on kernel 3.13.

Is there anyone knowing em28xx internals who wants (non surely really 
want, but hates less to start examine) to look it?

It is very near I will fork em28xx to DVB only driver and move devices 
there. Current em28xx is too complex for my taste and has had more bugs 
than any other DVB driver I have ever seen.

regards
Antti

-- 
http://palosaari.fi/

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: em28xx: Too many ISO frames scheduled when starting stream
  2014-09-28 17:25 em28xx: Too many ISO frames scheduled when starting stream Antti Palosaari
@ 2014-09-28 18:13 ` Antti Palosaari
  2014-09-28 19:57   ` Mauro Carvalho Chehab
  0 siblings, 1 reply; 5+ messages in thread
From: Antti Palosaari @ 2014-09-28 18:13 UTC (permalink / raw)
  To: LMML

On 09/28/2014 08:25 PM, Antti Palosaari wrote:
> I want raise that bug:
> Too many ISO frames scheduled when starting stream
> https://bugzilla.kernel.org/show_bug.cgi?id=72891
>
> Is there anyone who cares to study it? It looks like em28xx driver bug
> or USB host controller driver or both.
>
> According to comments bug appeared on kernel 3.13.

em28xx didn't even get any notable changes at that time... I looked all 
the 3.13 em28xx patches and there is no patch that could cause issues 
listed. So root of cause is somewhere else or there is reports which has 
kernel with media_build installed.
Also, em28xx uses ISOC to data transferred, whilst most devices are 
using BULK. No other reports from other ISOC DVB devices so far though. 
I suspect it may be some compatibility issue with em28xx chip / em28xx 
driver / USB stack / USB host controller.

There were em28xx patches went to 3.13 (stable patches not included):
bdee6bd [media] em28xx-video: Swap release order to avoid lock nesting
6dbea9f [media] Add support for KWorld UB435-Q V2
be353fa [media] V4L2: em28xx: tell the ov2640 driver to balance clock 
enabling internally
fc5d0f8 [media] V4L2: em28xx: register a V4L2 clock source
032f1dd [media] em28xx: fix error path in em28xx_start_analog_streaming()
b68cafc [media] em28xx: fix and unify the coding style of the GPIO 
register write sequences
de0fc46 [media] em28xx: MaxMedia UB425-TC change demod settings
b6c7abb [media] em28xx: MaxMedia UB425-TC switch RF tuner driver to another
8d100b2 [media] em28xx: MaxMedia UB425-TC offer firmware for demodulator


> Is there anyone knowing em28xx internals who wants (non surely really
> want, but hates less to start examine) to look it?
>
> It is very near I will fork em28xx to DVB only driver and move devices
> there. Current em28xx is too complex for my taste and has had more bugs
> than any other DVB driver I have ever seen.


regards
Antti

-- 
http://palosaari.fi/

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: em28xx: Too many ISO frames scheduled when starting stream
  2014-09-28 18:13 ` Antti Palosaari
@ 2014-09-28 19:57   ` Mauro Carvalho Chehab
  2014-09-28 20:43     ` Antti Palosaari
  0 siblings, 1 reply; 5+ messages in thread
From: Mauro Carvalho Chehab @ 2014-09-28 19:57 UTC (permalink / raw)
  To: Antti Palosaari; +Cc: LMML

Em Sun, 28 Sep 2014 21:13:59 +0300
Antti Palosaari <crope@iki.fi> escreveu:

> On 09/28/2014 08:25 PM, Antti Palosaari wrote:
> > I want raise that bug:
> > Too many ISO frames scheduled when starting stream
> > https://bugzilla.kernel.org/show_bug.cgi?id=72891
> >
> > Is there anyone who cares to study it? It looks like em28xx driver bug
> > or USB host controller driver or both.
> >
> > According to comments bug appeared on kernel 3.13.
> 
> em28xx didn't even get any notable changes at that time... I looked all 
> the 3.13 em28xx patches and there is no patch that could cause issues 
> listed. So root of cause is somewhere else or there is reports which has 
> kernel with media_build installed.
> Also, em28xx uses ISOC to data transferred, whilst most devices are 
> using BULK. No other reports from other ISOC DVB devices so far though. 
> I suspect it may be some compatibility issue with em28xx chip / em28xx 
> driver / USB stack / USB host controller.
> 
> There were em28xx patches went to 3.13 (stable patches not included):
> bdee6bd [media] em28xx-video: Swap release order to avoid lock nesting
> 6dbea9f [media] Add support for KWorld UB435-Q V2
> be353fa [media] V4L2: em28xx: tell the ov2640 driver to balance clock 
> enabling internally
> fc5d0f8 [media] V4L2: em28xx: register a V4L2 clock source
> 032f1dd [media] em28xx: fix error path in em28xx_start_analog_streaming()
> b68cafc [media] em28xx: fix and unify the coding style of the GPIO 
> register write sequences
> de0fc46 [media] em28xx: MaxMedia UB425-TC change demod settings
> b6c7abb [media] em28xx: MaxMedia UB425-TC switch RF tuner driver to another
> 8d100b2 [media] em28xx: MaxMedia UB425-TC offer firmware for demodulator

None of the above patches seem to be related. Also, I use a lot em28xx
here without any issues on an eHCI USB port. Even on a xHCI USB port,
I was unable to reproduce this bug with just one em28xx device plugged.

I _suspect_ that this issue is related to ISOC transfers, and the
return code is EFBIG.

The EFBIG return code happens if there's not enough space in a given
USB bus to reserve traffic for ISOC transfers when submitting the
URBs. Changing the URB size helps to reduce the amount of ISOC
transfers, making more unlikely for this bug to happen. However, the
em28xx driver already tries to use the max supported size, using the
USB descriptors.

There's one easy way to reproduce it: plug two em28xx devices with
analog TV and try to start both. The first analog TV stream will
allocate about 60% of the bus traffic, and the Kernel will return
EFBIG when trying to stream at the second one.

That's said, on a USB bus where there's just one device connected,
this error shouldn't happen, especially for DVB, where the bandwidth
requirements are generally lower.

It used to be possible to check how much was allocated for ISOC
traffic via:

# cat /sys/kernel/debug/usb/devices 

T:  Bus=02 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=5000 MxCh= 1
B:  Alloc=  0/800 us ( 0%), #Int=  0, #Iso=  0
D:  Ver= 3.00 Cls=09(hub  ) Sub=00 Prot=03 MxPS= 9 #Cfgs=  1
P:  Vendor=1d6b ProdID=0003 Rev= 3.17
S:  Manufacturer=Linux 3.17.0-rc6+ xhci_hcd
S:  Product=xHCI Host Controller
S:  SerialNumber=0000:00:14.0
C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=  0mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
E:  Ad=81(I) Atr=03(Int.) MxPS=   4 Ivl=256ms

The "Alloc" above would indicate how many slots were allocated.
However, at least here on an Atom NUC I'm testing and latest
upstream Kernel + media patches, no matter if I start some traffic
or not there, it still shows 0/800. It seems that there's a bug
somewhere on the USB stack that it is preventing it to show.

In any case, the return of EFBIG doesn't imply that there's a bug at
em28xx driver or at the usb stack. It is just an indication that the
bus has reached its maximum hardware capacity.

That's said, I was never ever be able to get EFBIG when there's
just one isoc device connected into an USB bus. Not sure if
this is the case of the reporter of BZ#72891.

I suggest you to double check if this is the only one device
connected at the bus that could be using ISOC traffic.

If there's just one device connected, and no other weird setup
(like trying to run the driver inside a VM, or some USB hubs
connected internally or externally), then we should seek for this
bug at the USB stack.

Btw, Hans de Goede faced with this issue a lot with his works with
gspca. I think he sent some patches to the USB stack to try to
reduce the changes of this error to happen.

Another possibility is that maybe the USB descriptors are broken
on some versions of the silicon, with makes the USB core to return
such error because em28xx is overriding the physical limits due to
a bad descriptor at the device's ROM. Never saw this on em28xx,
but I have some other USB devices with bad descriptors.

I hope that helps.

Regards,
Mauro

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: em28xx: Too many ISO frames scheduled when starting stream
  2014-09-28 19:57   ` Mauro Carvalho Chehab
@ 2014-09-28 20:43     ` Antti Palosaari
  2014-09-28 21:05       ` Mauro Carvalho Chehab
  0 siblings, 1 reply; 5+ messages in thread
From: Antti Palosaari @ 2014-09-28 20:43 UTC (permalink / raw)
  To: Mauro Carvalho Chehab; +Cc: LMML



On 09/28/2014 10:57 PM, Mauro Carvalho Chehab wrote:
> Em Sun, 28 Sep 2014 21:13:59 +0300
> Antti Palosaari <crope@iki.fi> escreveu:
>
>> On 09/28/2014 08:25 PM, Antti Palosaari wrote:
>>> I want raise that bug:
>>> Too many ISO frames scheduled when starting stream
>>> https://bugzilla.kernel.org/show_bug.cgi?id=72891
>>>
>>> Is there anyone who cares to study it? It looks like em28xx driver bug
>>> or USB host controller driver or both.
>>>
>>> According to comments bug appeared on kernel 3.13.
>>
>> em28xx didn't even get any notable changes at that time... I looked all
>> the 3.13 em28xx patches and there is no patch that could cause issues
>> listed. So root of cause is somewhere else or there is reports which has
>> kernel with media_build installed.
>> Also, em28xx uses ISOC to data transferred, whilst most devices are
>> using BULK. No other reports from other ISOC DVB devices so far though.
>> I suspect it may be some compatibility issue with em28xx chip / em28xx
>> driver / USB stack / USB host controller.
>>
>> There were em28xx patches went to 3.13 (stable patches not included):
>> bdee6bd [media] em28xx-video: Swap release order to avoid lock nesting
>> 6dbea9f [media] Add support for KWorld UB435-Q V2
>> be353fa [media] V4L2: em28xx: tell the ov2640 driver to balance clock
>> enabling internally
>> fc5d0f8 [media] V4L2: em28xx: register a V4L2 clock source
>> 032f1dd [media] em28xx: fix error path in em28xx_start_analog_streaming()
>> b68cafc [media] em28xx: fix and unify the coding style of the GPIO
>> register write sequences
>> de0fc46 [media] em28xx: MaxMedia UB425-TC change demod settings
>> b6c7abb [media] em28xx: MaxMedia UB425-TC switch RF tuner driver to another
>> 8d100b2 [media] em28xx: MaxMedia UB425-TC offer firmware for demodulator
>
> None of the above patches seem to be related. Also, I use a lot em28xx
> here without any issues on an eHCI USB port. Even on a xHCI USB port,
> I was unable to reproduce this bug with just one em28xx device plugged.
>
> I _suspect_ that this issue is related to ISOC transfers, and the
> return code is EFBIG.
>
> The EFBIG return code happens if there's not enough space in a given
> USB bus to reserve traffic for ISOC transfers when submitting the
> URBs. Changing the URB size helps to reduce the amount of ISOC
> transfers, making more unlikely for this bug to happen. However, the
> em28xx driver already tries to use the max supported size, using the
> USB descriptors.
>
> There's one easy way to reproduce it: plug two em28xx devices with
> analog TV and try to start both. The first analog TV stream will
> allocate about 60% of the bus traffic, and the Kernel will return
> EFBIG when trying to stream at the second one.
>
> That's said, on a USB bus where there's just one device connected,
> this error shouldn't happen, especially for DVB, where the bandwidth
> requirements are generally lower.
>
> It used to be possible to check how much was allocated for ISOC
> traffic via:
>
> # cat /sys/kernel/debug/usb/devices
>
> T:  Bus=02 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=5000 MxCh= 1
> B:  Alloc=  0/800 us ( 0%), #Int=  0, #Iso=  0
> D:  Ver= 3.00 Cls=09(hub  ) Sub=00 Prot=03 MxPS= 9 #Cfgs=  1
> P:  Vendor=1d6b ProdID=0003 Rev= 3.17
> S:  Manufacturer=Linux 3.17.0-rc6+ xhci_hcd
> S:  Product=xHCI Host Controller
> S:  SerialNumber=0000:00:14.0
> C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=  0mA
> I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
> E:  Ad=81(I) Atr=03(Int.) MxPS=   4 Ivl=256ms
>
> The "Alloc" above would indicate how many slots were allocated.
> However, at least here on an Atom NUC I'm testing and latest
> upstream Kernel + media patches, no matter if I start some traffic
> or not there, it still shows 0/800. It seems that there's a bug
> somewhere on the USB stack that it is preventing it to show.
>
> In any case, the return of EFBIG doesn't imply that there's a bug at
> em28xx driver or at the usb stack. It is just an indication that the
> bus has reached its maximum hardware capacity.
>
> That's said, I was never ever be able to get EFBIG when there's
> just one isoc device connected into an USB bus. Not sure if
> this is the case of the reporter of BZ#72891.
>
> I suggest you to double check if this is the only one device
> connected at the bus that could be using ISOC traffic.
>
> If there's just one device connected, and no other weird setup
> (like trying to run the driver inside a VM, or some USB hubs
> connected internally or externally), then we should seek for this
> bug at the USB stack.
>
> Btw, Hans de Goede faced with this issue a lot with his works with
> gspca. I think he sent some patches to the USB stack to try to
> reduce the changes of this error to happen.
>
> Another possibility is that maybe the USB descriptors are broken
> on some versions of the silicon, with makes the USB core to return
> such error because em28xx is overriding the physical limits due to
> a bad descriptor at the device's ROM. Never saw this on em28xx,
> but I have some other USB devices with bad descriptors.
>
> I hope that helps.

Some related things I have noticed:
* It happens very often when you scan channels. This is due to scan 
starts and stops stream for every channel scanned.
* It is not USB bw issue as I don't have any other devices. Also, it 
occurs during scan which indicates same.
* I have feeling it happens more often with newer em28xx devices, but it 
could be due to reason I usually work with new devices.

I have been scanning DVB-C channels in a loop one hour now using old 
PCTV 520e. Kernel is 3.11.10 and drivers are from latest media tree. No 
error seen so far...

regards
Antti

-- 
http://palosaari.fi/

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: em28xx: Too many ISO frames scheduled when starting stream
  2014-09-28 20:43     ` Antti Palosaari
@ 2014-09-28 21:05       ` Mauro Carvalho Chehab
  0 siblings, 0 replies; 5+ messages in thread
From: Mauro Carvalho Chehab @ 2014-09-28 21:05 UTC (permalink / raw)
  To: Antti Palosaari; +Cc: LMML

Em Sun, 28 Sep 2014 23:43:07 +0300
Antti Palosaari <crope@iki.fi> escreveu:

> 
> 
> On 09/28/2014 10:57 PM, Mauro Carvalho Chehab wrote:
> > Em Sun, 28 Sep 2014 21:13:59 +0300
> > Antti Palosaari <crope@iki.fi> escreveu:
> >
> >> On 09/28/2014 08:25 PM, Antti Palosaari wrote:
> >>> I want raise that bug:
> >>> Too many ISO frames scheduled when starting stream
> >>> https://bugzilla.kernel.org/show_bug.cgi?id=72891
> >>>
> >>> Is there anyone who cares to study it? It looks like em28xx driver bug
> >>> or USB host controller driver or both.
> >>>
> >>> According to comments bug appeared on kernel 3.13.
> >>
> >> em28xx didn't even get any notable changes at that time... I looked all
> >> the 3.13 em28xx patches and there is no patch that could cause issues
> >> listed. So root of cause is somewhere else or there is reports which has
> >> kernel with media_build installed.
> >> Also, em28xx uses ISOC to data transferred, whilst most devices are
> >> using BULK. No other reports from other ISOC DVB devices so far though.
> >> I suspect it may be some compatibility issue with em28xx chip / em28xx
> >> driver / USB stack / USB host controller.
> >>
> >> There were em28xx patches went to 3.13 (stable patches not included):
> >> bdee6bd [media] em28xx-video: Swap release order to avoid lock nesting
> >> 6dbea9f [media] Add support for KWorld UB435-Q V2
> >> be353fa [media] V4L2: em28xx: tell the ov2640 driver to balance clock
> >> enabling internally
> >> fc5d0f8 [media] V4L2: em28xx: register a V4L2 clock source
> >> 032f1dd [media] em28xx: fix error path in em28xx_start_analog_streaming()
> >> b68cafc [media] em28xx: fix and unify the coding style of the GPIO
> >> register write sequences
> >> de0fc46 [media] em28xx: MaxMedia UB425-TC change demod settings
> >> b6c7abb [media] em28xx: MaxMedia UB425-TC switch RF tuner driver to another
> >> 8d100b2 [media] em28xx: MaxMedia UB425-TC offer firmware for demodulator
> >
> > None of the above patches seem to be related. Also, I use a lot em28xx
> > here without any issues on an eHCI USB port. Even on a xHCI USB port,
> > I was unable to reproduce this bug with just one em28xx device plugged.
> >
> > I _suspect_ that this issue is related to ISOC transfers, and the
> > return code is EFBIG.
> >
> > The EFBIG return code happens if there's not enough space in a given
> > USB bus to reserve traffic for ISOC transfers when submitting the
> > URBs. Changing the URB size helps to reduce the amount of ISOC
> > transfers, making more unlikely for this bug to happen. However, the
> > em28xx driver already tries to use the max supported size, using the
> > USB descriptors.
> >
> > There's one easy way to reproduce it: plug two em28xx devices with
> > analog TV and try to start both. The first analog TV stream will
> > allocate about 60% of the bus traffic, and the Kernel will return
> > EFBIG when trying to stream at the second one.
> >
> > That's said, on a USB bus where there's just one device connected,
> > this error shouldn't happen, especially for DVB, where the bandwidth
> > requirements are generally lower.
> >
> > It used to be possible to check how much was allocated for ISOC
> > traffic via:
> >
> > # cat /sys/kernel/debug/usb/devices
> >
> > T:  Bus=02 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=5000 MxCh= 1
> > B:  Alloc=  0/800 us ( 0%), #Int=  0, #Iso=  0
> > D:  Ver= 3.00 Cls=09(hub  ) Sub=00 Prot=03 MxPS= 9 #Cfgs=  1
> > P:  Vendor=1d6b ProdID=0003 Rev= 3.17
> > S:  Manufacturer=Linux 3.17.0-rc6+ xhci_hcd
> > S:  Product=xHCI Host Controller
> > S:  SerialNumber=0000:00:14.0
> > C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=  0mA
> > I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
> > E:  Ad=81(I) Atr=03(Int.) MxPS=   4 Ivl=256ms
> >
> > The "Alloc" above would indicate how many slots were allocated.
> > However, at least here on an Atom NUC I'm testing and latest
> > upstream Kernel + media patches, no matter if I start some traffic
> > or not there, it still shows 0/800. It seems that there's a bug
> > somewhere on the USB stack that it is preventing it to show.
> >
> > In any case, the return of EFBIG doesn't imply that there's a bug at
> > em28xx driver or at the usb stack. It is just an indication that the
> > bus has reached its maximum hardware capacity.
> >
> > That's said, I was never ever be able to get EFBIG when there's
> > just one isoc device connected into an USB bus. Not sure if
> > this is the case of the reporter of BZ#72891.
> >
> > I suggest you to double check if this is the only one device
> > connected at the bus that could be using ISOC traffic.
> >
> > If there's just one device connected, and no other weird setup
> > (like trying to run the driver inside a VM, or some USB hubs
> > connected internally or externally), then we should seek for this
> > bug at the USB stack.
> >
> > Btw, Hans de Goede faced with this issue a lot with his works with
> > gspca. I think he sent some patches to the USB stack to try to
> > reduce the changes of this error to happen.
> >
> > Another possibility is that maybe the USB descriptors are broken
> > on some versions of the silicon, with makes the USB core to return
> > such error because em28xx is overriding the physical limits due to
> > a bad descriptor at the device's ROM. Never saw this on em28xx,
> > but I have some other USB devices with bad descriptors.
> >
> > I hope that helps.
> 
> Some related things I have noticed:
> * It happens very often when you scan channels. This is due to scan 
> starts and stops stream for every channel scanned.

Try to add a sleep between each scan trial. As far as I know, the
USB core uses the USB interval as a hint for the USB traffic to be
allocated, and then it dynamically measures the traffic to adjust
the number of allocated slots. There are 800 slots/sec on a USB 2.0
interface.

> * It is not USB bw issue as I don't have any other devices. Also, it 
> occurs during scan which indicates same.

Several boards have internal USB devices, especially on notebooks.

> * I have feeling it happens more often with newer em28xx devices, but it 
> could be due to reason I usually work with new devices.

Could be. Try to force the number of URBs and their sizes to different
values at em28xx_dvb_init(). Seek for the part of the code that calls
em28xx_alloc_urbs().

For ISOC traffic, it does:

		result = em28xx_alloc_urbs(dev, EM28XX_DIGITAL_MODE,
					   dev->dvb_xfer_bulk,
					   EM28XX_DVB_NUM_BUFS,
					   dev->dvb_max_pkt_size_isoc,
					   EM28XX_DVB_NUM_ISOC_PACKETS);

You may try to change the values for EM28XX_DVB_NUM_BUFS and
EM28XX_DVB_NUM_ISOC_PACKETS and see if this affects.

The dvb_max_pkt_size_isoc is read from the descriptors, but if the
ROM data is wrong, maybe it is higher than it should be.

> I have been scanning DVB-C channels in a loop one hour now using old 
> PCTV 520e. Kernel is 3.11.10 and drivers are from latest media tree. No 
> error seen so far...

And does PCTV 520e fail with 3.12? If so, then you could try to
bisect it.

Regards,
Mauro

> 
> regards
> Antti
> 

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2014-09-28 21:05 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-09-28 17:25 em28xx: Too many ISO frames scheduled when starting stream Antti Palosaari
2014-09-28 18:13 ` Antti Palosaari
2014-09-28 19:57   ` Mauro Carvalho Chehab
2014-09-28 20:43     ` Antti Palosaari
2014-09-28 21:05       ` Mauro Carvalho Chehab

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).