[linux-dvb] [PATCH] add device node locking possibility to dvbcore
Oliver Endriss
o.endriss at gmx.de
Sun Aug 19 02:45:51 CEST 2007
Steven Toth wrote:
> Trent Piepho wrote:
> > On Fri, 17 Aug 2007, Markus Rechberger wrote:
> >
> >>>> as I wrote earlier the thread can be idle/closed even before the node
> >>>> gets closed (you can test that with kaffeine, and you can test the
> >>>> other case with the scan utility)
> >>>>
> >>> How can this happen? Afaics the fe thread may continue to exist after
> >>> the device node was closed, but not vice-versa.
> >>>
> >
> > Yes, how can that happen? What will make the dvb frontend thread exit before
> > the device is closed?
> >
>
> I don't know. I should probably spend sometime reminding myself of the
> purpose of the thread.
It cannot happen, unless someone kills the thread...
> > Maybe it would be a good idea to do what Andreas suggested and have the
> > frontend release function block until the frontend thread has exited. AFAIK,
> > the thread hanging around after the device is closed does nothing but cause
> > problems. It's a very common FAQ, "Q: Why does it mythtv not work if I
> > change from a digital channel to an analog one? A: You need to set
> > dvb_shutdown_timeout to 0." What's the purpose of dvb_shutdown_timeout > 0?
Does anyone know, why dvb_shutdown_timeout was introduced initially?
I don't have a problem if it will be removed, but I suspect there was a
reason for it. Anyway, we should set the default to 0.
> We should be clear that the ts_bus_ctrl isn't design to lock or version
> count in any way. The purpose of the callback is to allow the bridge to
> determine whether the it has sufficient hardware resources to allow the
> ops open to complete (assuming that the callers wants data). The best
> example of this todate has been the HVR1300 sub-drivers in which a V4L
> and DVB ops structures both need to access frontends on the single PCI bus.
Ok, then it is probably used the wrong way in dvb_frontend.c.
It should only be called for
- the first open of the fe device and
- the last close of the fe device (or maybe when the frontend thread
exits, whichever comes later).
For multiple tuners ts_bus_ctrl is responsible to do the right thing.
> Having a DVB application interfere with the V4L application's use of the
> bus isn't acceptable.
>
> Personally, I think ts_bus_ctrl needs to be replaced with a single
> resource allocation/deallocation mechanism that extends beyond simple
> bus negotiation into tuners, demods, encoders and other devices.
>
> >>> ts_bus_ctrl does a kind of reference counting.
> >>>
> >>> For readers:
> >>> - fe->ops.ts_bus_ctrl(fe,1) is called during open
> >>> - fe->ops.ts_bus_ctrl(fe,0) is called during close
> >>>
> >>> For the one and only writer:
> >>> - fe->ops.ts_bus_ctrl(fe,1) is called during open
> >>> - fe->ops.ts_bus_ctrl(fe,0) is called when the thread exits,
> >>> usually after close
> >>>
> >
> > So, how do you tell if the ts bus is already locked?
> >
> >
>
> Until now it's never been a requirement.
Simply try to lock it. If it fails, you know that it is taken. ;-)
> >> I didn't want to write it but this is also what I would do, and I
> >> would also include the other dvb device nodes.. it doesn't make sense
> >> to keep them open as non functional dummies, or even allow people to
> >> open these nodes if the dvb mode is locked.
> >>
> >
> > What about a device with two frontends? Maybe the DVB-T/Analog frontend is
> > locked by the V4L device, but you can still use a DVB-S frontend with dvb. In
> > that case the demux could still be opened and used.
> >
> >
> The HVR1300 (and HVR3000 / 4000) prohibit this by using ts_bus_ctrl,
> these are good examples.
Btw, someone reported at vdr-portal, that cx88_dvb does not allow the
frontend to be opened more than once anymore. Seems to be caused by
calling the ts_bus_ctrl hook in dvb_frontend.
Note that it should always be possible to open the fe for additional
readers. femon can be run concurrently, for example.
CU
Oliver
--
----------------------------------------------------------------
VDR Remote Plugin 0.3.9: http://www.escape-edv.de/endriss/vdr/
----------------------------------------------------------------
More information about the linux-dvb
mailing list