diff mbox series

[2/2] iio: at91-sama5d2: Limit requested watermark value to hwfifo size

Message ID 20220117102512.31725-2-paul@crapouillou.net (mailing list archive)
State Accepted
Headers show
Series [1/2] iio: imu: st_lsm6dsx: Limit requested watermark value to hwfifo size | expand

Commit Message

Paul Cercueil Jan. 17, 2022, 10:25 a.m. UTC
Instead of returning an error if the watermark value is too high, which
the core will silently ignore anyway, limit the value to the hardware
FIFO size; a lower-than-requested value is still better than using the
default, which is usually 1.

Cc: Eugen Hristev <eugen.hristev@microchip.com>
Cc: Nicolas Ferre <nicolas.ferre@microchip.com>
Cc: Alexandre Belloni <alexandre.belloni@bootlin.com>
Cc: Ludovic Desroches <ludovic.desroches@microchip.com>
Signed-off-by: Paul Cercueil <paul@crapouillou.net>
---
 drivers/iio/adc/at91-sama5d2_adc.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Jonathan Cameron Jan. 22, 2022, 5:04 p.m. UTC | #1
On Mon, 17 Jan 2022 10:25:12 +0000
Paul Cercueil <paul@crapouillou.net> wrote:

> Instead of returning an error if the watermark value is too high, which
> the core will silently ignore anyway, limit the value to the hardware
> FIFO size; a lower-than-requested value is still better than using the
> default, which is usually 1.

There is another potential error condition in this function which will
also be ignored by the core.

As such whilst I agree this is a sensible thing to do in this
particular case I think we should also be handling the error in the core.

I think it would be better to clean that up at the same time
as these improvements - particularly as I'd guess you have a convenient
test setup to check the error unwind is correct?

Thanks,

Jonathan

> 
> Cc: Eugen Hristev <eugen.hristev@microchip.com>
> Cc: Nicolas Ferre <nicolas.ferre@microchip.com>
> Cc: Alexandre Belloni <alexandre.belloni@bootlin.com>
> Cc: Ludovic Desroches <ludovic.desroches@microchip.com>
> Signed-off-by: Paul Cercueil <paul@crapouillou.net>
> ---
>  drivers/iio/adc/at91-sama5d2_adc.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/iio/adc/at91-sama5d2_adc.c b/drivers/iio/adc/at91-sama5d2_adc.c
> index 854b1f81d807..5cc84f4a17bb 100644
> --- a/drivers/iio/adc/at91-sama5d2_adc.c
> +++ b/drivers/iio/adc/at91-sama5d2_adc.c
> @@ -1752,7 +1752,7 @@ static int at91_adc_set_watermark(struct iio_dev *indio_dev, unsigned int val)
>  	int ret;
>  
>  	if (val > AT91_HWFIFO_MAX_SIZE)
> -		return -EINVAL;
> +		val = AT91_HWFIFO_MAX_SIZE;
>  
>  	if (!st->selected_trig->hw_trig) {
>  		dev_dbg(&indio_dev->dev, "we need hw trigger for DMA\n");
Jonathan Cameron June 4, 2022, 3:05 p.m. UTC | #2
On Sat, 22 Jan 2022 17:04:47 +0000
Jonathan Cameron <jic23@kernel.org> wrote:

> On Mon, 17 Jan 2022 10:25:12 +0000
> Paul Cercueil <paul@crapouillou.net> wrote:
> 
> > Instead of returning an error if the watermark value is too high, which
> > the core will silently ignore anyway, limit the value to the hardware
> > FIFO size; a lower-than-requested value is still better than using the
> > default, which is usually 1.  
> 
> There is another potential error condition in this function which will
> also be ignored by the core.
> 
> As such whilst I agree this is a sensible thing to do in this
> particular case I think we should also be handling the error in the core.
> 
> I think it would be better to clean that up at the same time
> as these improvements - particularly as I'd guess you have a convenient
> test setup to check the error unwind is correct?

Hi Paul,

I was trawling through patchwork and realised this one is stalled.

Thoughts on the above?

Thanks,

Jonathan

> 
> Thanks,
> 
> Jonathan
> 
> > 
> > Cc: Eugen Hristev <eugen.hristev@microchip.com>
> > Cc: Nicolas Ferre <nicolas.ferre@microchip.com>
> > Cc: Alexandre Belloni <alexandre.belloni@bootlin.com>
> > Cc: Ludovic Desroches <ludovic.desroches@microchip.com>
> > Signed-off-by: Paul Cercueil <paul@crapouillou.net>
> > ---
> >  drivers/iio/adc/at91-sama5d2_adc.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/drivers/iio/adc/at91-sama5d2_adc.c b/drivers/iio/adc/at91-sama5d2_adc.c
> > index 854b1f81d807..5cc84f4a17bb 100644
> > --- a/drivers/iio/adc/at91-sama5d2_adc.c
> > +++ b/drivers/iio/adc/at91-sama5d2_adc.c
> > @@ -1752,7 +1752,7 @@ static int at91_adc_set_watermark(struct iio_dev *indio_dev, unsigned int val)
> >  	int ret;
> >  
> >  	if (val > AT91_HWFIFO_MAX_SIZE)
> > -		return -EINVAL;
> > +		val = AT91_HWFIFO_MAX_SIZE;
> >  
> >  	if (!st->selected_trig->hw_trig) {
> >  		dev_dbg(&indio_dev->dev, "we need hw trigger for DMA\n");  
>
Paul Cercueil June 4, 2022, 10:41 p.m. UTC | #3
Hi Jonathan,

Le sam., juin 4 2022 at 16:05:57 +0100, Jonathan Cameron 
<jic23@kernel.org> a écrit :
> On Sat, 22 Jan 2022 17:04:47 +0000
> Jonathan Cameron <jic23@kernel.org> wrote:
> 
>>  On Mon, 17 Jan 2022 10:25:12 +0000
>>  Paul Cercueil <paul@crapouillou.net> wrote:
>> 
>>  > Instead of returning an error if the watermark value is too high, 
>> which
>>  > the core will silently ignore anyway, limit the value to the 
>> hardware
>>  > FIFO size; a lower-than-requested value is still better than 
>> using the
>>  > default, which is usually 1.
>> 
>>  There is another potential error condition in this function which 
>> will
>>  also be ignored by the core.
>> 
>>  As such whilst I agree this is a sensible thing to do in this
>>  particular case I think we should also be handling the error in the 
>> core.
>> 
>>  I think it would be better to clean that up at the same time
>>  as these improvements - particularly as I'd guess you have a 
>> convenient
>>  test setup to check the error unwind is correct?
> 
> Hi Paul,
> 
> I was trawling through patchwork and realised this one is stalled.
> 
> Thoughts on the above?

Totally forgot about this patch.

Aren't you afraid that if we start handling these errors in the core, 
we'll somehow break the ABI?

-Paul

> Thanks,
> 
> Jonathan
> 
>> 
>>  Thanks,
>> 
>>  Jonathan
>> 
>>  >
>>  > Cc: Eugen Hristev <eugen.hristev@microchip.com>
>>  > Cc: Nicolas Ferre <nicolas.ferre@microchip.com>
>>  > Cc: Alexandre Belloni <alexandre.belloni@bootlin.com>
>>  > Cc: Ludovic Desroches <ludovic.desroches@microchip.com>
>>  > Signed-off-by: Paul Cercueil <paul@crapouillou.net>
>>  > ---
>>  >  drivers/iio/adc/at91-sama5d2_adc.c | 2 +-
>>  >  1 file changed, 1 insertion(+), 1 deletion(-)
>>  >
>>  > diff --git a/drivers/iio/adc/at91-sama5d2_adc.c 
>> b/drivers/iio/adc/at91-sama5d2_adc.c
>>  > index 854b1f81d807..5cc84f4a17bb 100644
>>  > --- a/drivers/iio/adc/at91-sama5d2_adc.c
>>  > +++ b/drivers/iio/adc/at91-sama5d2_adc.c
>>  > @@ -1752,7 +1752,7 @@ static int at91_adc_set_watermark(struct 
>> iio_dev *indio_dev, unsigned int val)
>>  >  	int ret;
>>  >
>>  >  	if (val > AT91_HWFIFO_MAX_SIZE)
>>  > -		return -EINVAL;
>>  > +		val = AT91_HWFIFO_MAX_SIZE;
>>  >
>>  >  	if (!st->selected_trig->hw_trig) {
>>  >  		dev_dbg(&indio_dev->dev, "we need hw trigger for DMA\n");
>> 
>
Jonathan Cameron June 12, 2022, 8:49 a.m. UTC | #4
On Sat, 04 Jun 2022 23:41:02 +0100
Paul Cercueil <paul@crapouillou.net> wrote:

> Hi Jonathan,
> 
> Le sam., juin 4 2022 at 16:05:57 +0100, Jonathan Cameron 
> <jic23@kernel.org> a écrit :
> > On Sat, 22 Jan 2022 17:04:47 +0000
> > Jonathan Cameron <jic23@kernel.org> wrote:
> >   
> >>  On Mon, 17 Jan 2022 10:25:12 +0000
> >>  Paul Cercueil <paul@crapouillou.net> wrote:
> >>   
> >>  > Instead of returning an error if the watermark value is too high,   
> >> which  
> >>  > the core will silently ignore anyway, limit the value to the   
> >> hardware  
> >>  > FIFO size; a lower-than-requested value is still better than   
> >> using the  
> >>  > default, which is usually 1.  
> >> 
> >>  There is another potential error condition in this function which 
> >> will
> >>  also be ignored by the core.
> >> 
> >>  As such whilst I agree this is a sensible thing to do in this
> >>  particular case I think we should also be handling the error in the 
> >> core.
> >> 
> >>  I think it would be better to clean that up at the same time
> >>  as these improvements - particularly as I'd guess you have a 
> >> convenient
> >>  test setup to check the error unwind is correct?  
> > 
> > Hi Paul,
> > 
> > I was trawling through patchwork and realised this one is stalled.
> > 
> > Thoughts on the above?  
> 
> Totally forgot about this patch.
> 
> Aren't you afraid that if we start handling these errors in the core, 
> we'll somehow break the ABI?
> 
Been a while, but I think my concern was more that there are other
error conditions in these calls.  Whilst we can indeed clamp the
watermark, the other conditions should probably be handled in the core.

I guess that doesn't mean i shouldn't take these in the meantime, just
that there is more work to do here and I was sneakily trying to make
it your problem *evil laugh*

As such, applied these two to, but if anyone has time to take a look
at handling the error returns in the core that would be great.

Applied to the togreg branch of iio.git and I'll push out as testing
later (on train with dodgy wifi) for 0-day to take a look.

Thanks,

Jonathan

> -Paul
> 
> > Thanks,
> > 
> > Jonathan
> >   
> >> 
> >>  Thanks,
> >> 
> >>  Jonathan
> >>   
> >>  >
> >>  > Cc: Eugen Hristev <eugen.hristev@microchip.com>
> >>  > Cc: Nicolas Ferre <nicolas.ferre@microchip.com>
> >>  > Cc: Alexandre Belloni <alexandre.belloni@bootlin.com>
> >>  > Cc: Ludovic Desroches <ludovic.desroches@microchip.com>
> >>  > Signed-off-by: Paul Cercueil <paul@crapouillou.net>
> >>  > ---
> >>  >  drivers/iio/adc/at91-sama5d2_adc.c | 2 +-
> >>  >  1 file changed, 1 insertion(+), 1 deletion(-)
> >>  >
> >>  > diff --git a/drivers/iio/adc/at91-sama5d2_adc.c   
> >> b/drivers/iio/adc/at91-sama5d2_adc.c  
> >>  > index 854b1f81d807..5cc84f4a17bb 100644
> >>  > --- a/drivers/iio/adc/at91-sama5d2_adc.c
> >>  > +++ b/drivers/iio/adc/at91-sama5d2_adc.c
> >>  > @@ -1752,7 +1752,7 @@ static int at91_adc_set_watermark(struct   
> >> iio_dev *indio_dev, unsigned int val)  
> >>  >  	int ret;
> >>  >
> >>  >  	if (val > AT91_HWFIFO_MAX_SIZE)
> >>  > -		return -EINVAL;
> >>  > +		val = AT91_HWFIFO_MAX_SIZE;
> >>  >
> >>  >  	if (!st->selected_trig->hw_trig) {
> >>  >  		dev_dbg(&indio_dev->dev, "we need hw trigger for DMA\n");  
> >>   
> >   
> 
>
diff mbox series

Patch

diff --git a/drivers/iio/adc/at91-sama5d2_adc.c b/drivers/iio/adc/at91-sama5d2_adc.c
index 854b1f81d807..5cc84f4a17bb 100644
--- a/drivers/iio/adc/at91-sama5d2_adc.c
+++ b/drivers/iio/adc/at91-sama5d2_adc.c
@@ -1752,7 +1752,7 @@  static int at91_adc_set_watermark(struct iio_dev *indio_dev, unsigned int val)
 	int ret;
 
 	if (val > AT91_HWFIFO_MAX_SIZE)
-		return -EINVAL;
+		val = AT91_HWFIFO_MAX_SIZE;
 
 	if (!st->selected_trig->hw_trig) {
 		dev_dbg(&indio_dev->dev, "we need hw trigger for DMA\n");