Kernel bug with xc3028-tuner from v4l-dvb-experimental

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello,

I have been trying to get the FusionHDTV Dual Digital 4 working in
Australia.  I haven't had any luck so far (even with Roger's recent
firmware) but I have discovered a bug with the xc3028 tuner from
v4l-dvb-experimental when compiled with CONFIG_DVB_CORE_ATTACH.  It
boils down to this section of code in dvb_frontend_detach():

        if (fe->ops.tuner_ops.release) {
                fe->ops.tuner_ops.release(fe);
                symbol_put_addr(fe->ops.tuner_ops.release);
        }

This will cause xc3028_release() to get called when using xc3028-tuner.
The problem is that will free the data (as expected) and then set:

	t->release=NULL;

After it returns it will cause symbol_put_addr() to get called with a
NULL address!

The fix is either to remove the line which sets t->release to NULL or to
take a temporary copy of the pointer as is done for fe->ops.release,
i.e.:

        ptr = (void*)fe->ops.tuner_ops.release;
        if (ptr) {
                fe->ops.tuner_ops.release(fe);
                symbol_put_addr(ptr);
        }

On another note, when trying to upload certain firmware files with
v4l-dvb-experimental, I get ETIMEOUT errors in my kernel log (dvb-usb:
bulk message failed: -110 (5/0)).  Is anyone else seeing this?  It seems
to happen only for very small uploads.

Daniel

_______________________________________________
linux-dvb mailing list
linux-dvb@xxxxxxxxxxx
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb

[Index of Archives]     [Linux Media]     [Video 4 Linux]     [Asterisk]     [Samba]     [Xorg]     [Xfree86]     [Linux USB]

  Powered by Linux