Re: [PATCH v3 1/6] iio: Set device watermark based on watermark of all attached buffers

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

 



On 13/10/15 17:10, Lars-Peter Clausen wrote:
> Currently the watermark of the device is only set based on the watermark
> that is set for the user space buffer. This doesn't consider the watermarks
> set on any attached in-kernel buffers.
> 
> Change this so that the watermark of the device should be the minimum of
> the watermarks over all attached buffers.
> 
> Signed-off-by: Lars-Peter Clausen <lars@xxxxxxxxxx>
Applied to the togreg branch of iio.git - initially pushed out as testing.

These have missed the coming merge window, but in someways I'm happier having
these have a very long bake in linux-next (and hopefully some user get added
before they mainline!)

Jonathan
> ---
>  drivers/iio/industrialio-buffer.c | 14 ++++++++++----
>  1 file changed, 10 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/iio/industrialio-buffer.c b/drivers/iio/industrialio-buffer.c
> index d7e908a..7340922 100644
> --- a/drivers/iio/industrialio-buffer.c
> +++ b/drivers/iio/industrialio-buffer.c
> @@ -610,6 +610,7 @@ static void iio_free_scan_mask(struct iio_dev *indio_dev,
>  
>  struct iio_device_config {
>  	unsigned int mode;
> +	unsigned int watermark;
>  	const unsigned long *scan_mask;
>  	unsigned int scan_bytes;
>  	bool scan_timestamp;
> @@ -642,10 +643,14 @@ static int iio_verify_update(struct iio_dev *indio_dev,
>  		if (buffer == remove_buffer)
>  			continue;
>  		modes &= buffer->access->modes;
> +		config->watermark = min(config->watermark, buffer->watermark);
>  	}
>  
> -	if (insert_buffer)
> +	if (insert_buffer) {
>  		modes &= insert_buffer->access->modes;
> +		config->watermark = min(config->watermark,
> +			insert_buffer->watermark);
> +	}
>  
>  	/* Definitely possible for devices to support both of these. */
>  	if ((modes & INDIO_BUFFER_TRIGGERED) && indio_dev->trig) {
> @@ -743,6 +748,10 @@ static int iio_enable_buffers(struct iio_dev *indio_dev,
>  		}
>  	}
>  
> +	if (indio_dev->info->hwfifo_set_watermark)
> +		indio_dev->info->hwfifo_set_watermark(indio_dev,
> +			config->watermark);
> +
>  	indio_dev->currentmode = config->mode;
>  
>  	if (indio_dev->setup_ops->postenable) {
> @@ -974,9 +983,6 @@ static ssize_t iio_buffer_store_watermark(struct device *dev,
>  	}
>  
>  	buffer->watermark = val;
> -
> -	if (indio_dev->info->hwfifo_set_watermark)
> -		indio_dev->info->hwfifo_set_watermark(indio_dev, val);
>  out:
>  	mutex_unlock(&indio_dev->mlock);
>  
> 

--
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