Re: RFC usecases for simultaneous buffered / sysfs access to data

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

 



On 11/20/2011 12:39 PM, Jonathan Cameron wrote:
> Hi All,
> 
> One nasty issue is kicking around in how to handle in kernel interfaces.
> 
> It comes down to what happens when a sysfs read is performed on a device
> doing buffered capture.  Right now some drivers will look into the
> buffer, see if the relevant channel is there, and then pull out the
> latest reading.
> 
> Now, with in kernel push interfaces (buffer_cb etc) things are more
> complex as we have several 'buffers' and it may be that none of them
> is the traditional IIO buffer.  Thus working out whether the data is
> available anywhere is a pain.
> 
> Clearly the same issue effects other in kernel 'pull' users (which
> make direct calls to read_raw).  Now in these cases they have
> specifically requested a set of channels.  Given we have a tightly
> defined subset of channels we can add another 'buffer' that caches
> the latest value and the demux code can handle this fine. It's costly
> in terms of bus transactions, but probably the only way we can keep
> things consistent and predictable.
> 
> This approach doesn't work for the IIO sysfs accesses though as these
> frequently involve incompatible sets of channel reads (differential and
> non differential on a typical adc for example).  We simply can't do
> buffered capture of these in a single pass on some devices (max1363 for
> example).  If there is a really strong use case some sort of fallback to
> a faked 'scan' might be possible but is going to be very fiddly and in
> my view doesn't want to be in drivers unless there is a user.
> 
> 
> Hence this question comes down to what we do for iio sysfs interfaces
> and that is dependent on why people actually use the sysfs interfaces.
> 
> 1) Drop the reading from the buffer (to output via sysfs) across all
> drivers that do it. (does this hurt any one?  I wrote the first driver
> that does this and it doesn't effect any use case I have!)
> 
> 2) Implement something like in0_reserve to allow us to specify which
> channels should still be available for sysfs reads when buffered reading
> is going on.
> 
> 3) Add an iio on iio driver that uses the mapping infrastructure to
> allow it to pretend to be like the other in kernel users described above.
> 
> 
> 
> So my thoughts are that 1) is the best plan unless someone has a real
> pressing use case that requires us to read from the buffer.
> 
> We may migrate towards 3, but for now there are far too many weird and
> wonderful quirks that are not handled via the chan_spec and hence not
> available to inkernel users.  Note if we get to the stage where
> everything is well handled then there 'may' be a case for separating the
> IIO userspace access stuff out so it is 'just another' in kernel user of
> the IIO device side stuff.  We aren't there now and it won't come soon.
> 
> Option 1 also has the nice sideeffect of clearer out some fiddly code.
Also worth noting is that kfifo_buf never supported this, and that's the
buffer implementation we will be moving out of staging first.

Jonathan

--
To unsubscribe from this list: send the line "unsubscribe linux-iio" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Input]     [Linux Kernel]     [Linux SCSI]     [X.org]

  Powered by Linux