All of lore.kernel.org
 help / color / mirror / Atom feed
From: Lars-Peter Clausen <lars@metafoo.de>
To: Jonathan Cameron <jic23@kernel.org>,
	Octavian Purdila <octavian.purdila@intel.com>
Cc: Hartmut Knaack <knaack.h@gmx.de>,
	Peter Meerwald <pmeerw@pmeerw.net>,
	linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2] iio: allow userspace to flush the hwfifo with non-blocking reads
Date: Mon, 15 Jun 2015 13:44:54 +0200	[thread overview]
Message-ID: <557EBAB6.6060809@metafoo.de> (raw)
In-Reply-To: <557D90AB.3000509@kernel.org>

On 06/14/2015 04:33 PM, Jonathan Cameron wrote:
> On 05/06/15 13:56, Octavian Purdila wrote:
>> This patch changes the semantics of non-blocking reads so that a
>> hardware fifo flush is triggered if the available data in the device
>> buffer is less then the requested size.
>>
>> This allows userspace to accurately generate hardware fifo flushes, by
>> doing a non-blocking read with a size greater then the sum of the
>> device buffer and hardware fifo size.
>>
>> Signed-off-by: Octavian Purdila <octavian.purdila@intel.com>
> Hi Octavian,
>
> I'm personally happy with this approach, but would like Lars to have
> a chance to take a look as he's been getting his hands a lot dirtier in
> this area than I have recently!

Looks good.

Reviewed-by: Lars-Peter Clausen <lars@metafoo.de>

>
> This seems a logical bit of API to me even without the desire to use it
> to force a flush.  If we want whatever data is available now,
> we want that data now, not when the fifo gets around to giving it to us!
>
> Feel free to poke me if this sits here uncommented upon for a few more
> weeks!
>
> Jonathan
>> ---
>>
>> This is the second iteration of the patch that allows userspace to
>> accurately generate flush events. The first RFC patch set was
>> discussed here:
>>
>> https://lkml.org/lkml/2015/4/29/202
>>
>>
>>   drivers/iio/industrialio-buffer.c | 18 +++++++++---------
>>   1 file changed, 9 insertions(+), 9 deletions(-)
>>
>> diff --git a/drivers/iio/industrialio-buffer.c b/drivers/iio/industrialio-buffer.c
>> index df919f4..24085db 100644
>> --- a/drivers/iio/industrialio-buffer.c
>> +++ b/drivers/iio/industrialio-buffer.c
>> @@ -71,8 +71,9 @@ static bool iio_buffer_ready(struct iio_dev *indio_dev, struct iio_buffer *buf,
>>
>>   	if (avail >= to_wait) {
>>   		/* force a flush for non-blocking reads */
>> -		if (!to_wait && !avail && to_flush)
>> -			iio_buffer_flush_hwfifo(indio_dev, buf, to_flush);
>> +		if (!to_wait && avail < to_flush)
>> +			iio_buffer_flush_hwfifo(indio_dev, buf,
>> +						to_flush - avail);
>>   		return true;
>>   	}
>>
>> @@ -100,8 +101,7 @@ ssize_t iio_buffer_read_first_n_outer(struct file *filp, char __user *buf,
>>   	struct iio_dev *indio_dev = filp->private_data;
>>   	struct iio_buffer *rb = indio_dev->buffer;
>>   	size_t datum_size;
>> -	size_t to_wait = 0;
>> -	size_t to_read;
>> +	size_t to_wait;
>>   	int ret;
>>
>>   	if (!indio_dev->info)
>> @@ -119,14 +119,14 @@ ssize_t iio_buffer_read_first_n_outer(struct file *filp, char __user *buf,
>>   	if (!datum_size)
>>   		return 0;
>>
>> -	to_read = min_t(size_t, n / datum_size, rb->watermark);
>> -
>> -	if (!(filp->f_flags & O_NONBLOCK))
>> -		to_wait = to_read;
>> +	if (filp->f_flags & O_NONBLOCK)
>> +		to_wait = 0;
>> +	else
>> +		to_wait = min_t(size_t, n / datum_size, rb->watermark);
>>
>>   	do {
>>   		ret = wait_event_interruptible(rb->pollq,
>> -			iio_buffer_ready(indio_dev, rb, to_wait, to_read));
>> +		      iio_buffer_ready(indio_dev, rb, to_wait, n / datum_size));
>>   		if (ret)
>>   			return ret;
>>
>>
>


  reply	other threads:[~2015-06-15 11:44 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-06-05 12:56 [PATCH v2] iio: allow userspace to flush the hwfifo with non-blocking reads Octavian Purdila
2015-06-14 14:33 ` Jonathan Cameron
2015-06-15 11:44   ` Lars-Peter Clausen [this message]
2015-06-21 13:52     ` Jonathan Cameron
2015-06-21 13:52       ` Jonathan Cameron

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=557EBAB6.6060809@metafoo.de \
    --to=lars@metafoo.de \
    --cc=jic23@kernel.org \
    --cc=knaack.h@gmx.de \
    --cc=linux-iio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=octavian.purdila@intel.com \
    --cc=pmeerw@pmeerw.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.