Fix: au0828: start_urb_transfer: failed big buffer allocation, err = -12

Added by Obv B about 6 years ago

Posting this in case it may help anyone, as the fix isn't all that easy to find (at least for those that may not be all that familiar with linux like me)

I'm running Tvheadend on a Raspberry Pi 2, with a Hauppauge WinTV-HVR-950Q USB tuner.

I was regularly getting a problem where it would fail to tune to a channel. (This would particularly happen after watching a video streamed from a Samba attached USB hard drive. Not sure how this would affect Tvheadend, but the correlation seemed beyond a coincidence)

There were multiple error messages in the log, but they seemed to originate with this one ...

au0828: start_urb_transfer: failed big buffer allocation, err = -12

This required restarting Tvheadend and/or rebooting the Raspberry Pi to get it to work again.

A bit of googling and I found this page ...

... that suggested "You could set the module parameter preallocate_big_buffers=1 when you insmod the au8028 kernel module."

That was almost Greek to me, but digging around I found the file /sys/module/au0828/parameters/preallocate_big_buffers which contains a parameter value, but editing the file was no good since when re-booting, the original value gets reset.

The correct way to set the parameter is to edit the file /etc/modprobe.d/au0828.conf and add the following line ...

options au0828 preallocate_big_buffers=1

I have now had this set for a couple of weeks and it has done the trick, without any noticeable downside of having "big buffers" allocated even when they are not being used.

Hope this may help someone having the same problem. (I'm assuming that Raspberry Pi with the 950Q is common enough that this is not unique to my set-up)