[pvrusb2] Occasional audio issue with recordings

Mike Isely isely at isely.net
Tue Nov 5 09:40:19 CST 2019


In general you are correct that it is not possible to unload a module 
when it's being used by another module.  That would cause linkage issues 
and a likely crash if it were allowed.

However the V4L cases here are different, for pretty much all of these 
chip-level drivers.  While logically the pvrusb2 driver is "using" the 
cx25840 module to do it's job, the physical reality is actually the 
opposite.  The cx25840 module is actually using the pvrusb2 driver.  
It's the other way around.  This makes sense when one realizes that the 
pvrusb2 driver is supplying a communication path to the cx25840 module 
so that it can itself reach its corresponding hardware.  When the 
pvrusb2 driver detects new hardware, it figures out which chip-level 
modules are needed and just requests that the kernel load them.  But 
that's it.  It never directly references any of them.  Once loaded, the 
modules will enumerate attached I2C adapters (for which the pvrusb2 
driver is one such instance) and then bind to that adapter.  So the 
dependency relationship is actually cx25840 -> pvrusb2, not pvrusb2 -> 
cx25840.

Any activity from the pvrusb2 driver to one of those bound modules 
generally works through a publish/subscribe approach.  So again the 
bindings work in the opposite direction you might otherwise assume.

Thus you can (or, well, "should be able to") actually unload the cx25840 
module at any time.  Obviously the corresponding functionality will 
cease when this happens but the pvrusb2 driver generally won't care (or 
even notice).  When the module reappears and rebinds, the pvrusb2 driver 
will republish appropriate state to it at that point, bringing things 
back into sync.

This sort of thing I used to do a lot of when testing changes in the 
driver.

  -Mike


On Tue, 5 Nov 2019, Jan Ceuleers wrote:

> On 05/11/2019 05:02, Mike Isely wrote:
> > With that knowledge, see if unloading / reloading the cx25840 module 
> > might affect the issue.  (And that should actually work right now.)  
> > Also, you might want to see if there's a different firmware image 
> > floating around for that part.
> 
> Thanks Mike. I'll experiment with that when the problem reoccurs.
> 
> I didn't think it was possible to unload a module that is being used by
> other modules, but as I said I'll give that a go either when I have to
> (issue has reoccurred) or when the backend is free for my experimentation.
> 
> root at dracor:~# lsmod | grep cx25
> cx25840               143360  2
> v4l2_common            16384  4 cx2341x,pvrusb2,cx25840,tuner
> videodev              188416  5 cx2341x,v4l2_common,pvrusb2,cx25840,tuner
> media                  40960  3 videodev,cx25840,tuner
> 
> Regarding firmware: we had that discussion back in April when I started
> a thread on the subject of "Noise".
> 
> Thx, Jan
> 
> 
> _______________________________________________
> pvrusb2 mailing list
> pvrusb2 at isely.net
> http://www.isely.net/cgi-bin/mailman/listinfo/pvrusb2
> 

-- 

Mike Isely
isely @ isely (dot) net
PGP: 03 54 43 4D 75 E5 CC 92 71 16 01 E2 B5 F5 C1 E8


More information about the pvrusb2 mailing list