pvr250 and MythTV

Greg 'groggy' Lehey grog at FreeBSD.org
Mon Feb 26 03:59:06 UTC 2007


On Sunday, 25 February 2007 at 12:54:27 +1030, Greg 'groggy' Lehey wrote:
> On Saturday, 24 February 2007 at 10:35:37 +0100, usleepless at gmail.com wrote:
>> List, Torfinn, Greg, Joe,
>>
>> On 2/24/07, Joe Auty <joe at netmusician.org> wrote:
>>> Does the driver work with the 250? Didn't want to track down the
>>> required CD file and install this to replace my working driver if
>>> this wasn't going to bear any fruit...
>>
>> it does. files are attached. place the pvrxxx_gpl.tgz in
>> /usr/ports/distfiles, extract pvrxxx_port.tgz to
>> /usr/ports/multimedia.
>>
>> let me know.
>
> I've tried this with a PVR 250.  It panics out of cxm_read with a call
> to msleep holding a mutex (IIRC).  I'm having difficulty getting a
> dump of this machine, so it may take a little longer to localize.

OK, the reason for the dump was a non-intuitive requirement of
msleep(): if you want to sleep forever, you need to be holding a
mutex.  I'm trying to clarify the reasons for this, but for the moment
the following patch works around the "feature":

--- cxm.c~      Sun Feb 25 11:17:46 2007
+++ cxm.c       Mon Feb 26 10:46:21 2007
@@ -2640,7 +2640,14 @@
                        if(!sc->encoding || sc->encoding_eos)
                                 return ENXIO;

-                       error = tsleep(&sc->enc_pool.read, PZERO | PCATCH, "cmxrd", 0);
+                        /*
+                         * We're not allowed to give a 0 timeout without holding
+                         * a mutex, so work around this "feature" like this.
+                         */
+                        while ((error = tsleep(&sc->enc_pool.read,
+                                               PZERO | PCATCH, "cmxrd",
+                                               3600 * hz))
+                               == EWOULDBLOCK );

                        if(error)
                                return error;

Why has nobody else seen this?  It only happens if you set the
INVARIANTS option in the kernel build.

I have some other minor issues, but on the whole things seem to work
in my environment (PVR 250, Pentium, 6.2-STABLE).

Greg
--
See complete headers for address and phone numbers.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 187 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-multimedia/attachments/20070226/ece5e39b/attachment.pgp


More information about the freebsd-multimedia mailing list