From: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
To: Antti Palosaari <crope@iki.fi>
Cc: LMML <linux-media@vger.kernel.org>
Subject: Re: em28xx: Too many ISO frames scheduled when starting stream
Date: Sun, 28 Sep 2014 18:05:53 -0300 [thread overview]
Message-ID: <20140928180553.7146e8f9@recife.lan> (raw)
In-Reply-To: <542872DB.3070003@iki.fi>
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
>
prev parent reply other threads:[~2014-09-28 21:05 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
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 message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20140928180553.7146e8f9@recife.lan \
--to=mchehab@osg.samsung.com \
--cc=crope@iki.fi \
--cc=linux-media@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).