linux-iio.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] iio: accel: kxsd9: Fix alignment of local buffer.
@ 2020-05-03 17:22 jic23
  2020-05-03 18:01 ` Nuno Sá
  0 siblings, 1 reply; 3+ messages in thread
From: jic23 @ 2020-05-03 17:22 UTC (permalink / raw)
  To: linux-iio; +Cc: Jonathan Cameron, Lars-Peter Clausen

From: Jonathan Cameron <Jonathan.Cameron@huawei.com>

iio_push_to_buffers_with_timestamp assumes 8 byte alignment which
is not guaranteed by an array of 8 __be16.

Reported-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---
 drivers/iio/accel/kxsd9.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/drivers/iio/accel/kxsd9.c b/drivers/iio/accel/kxsd9.c
index 0b876b2dc5bd..4c42d1200914 100644
--- a/drivers/iio/accel/kxsd9.c
+++ b/drivers/iio/accel/kxsd9.c
@@ -209,14 +209,16 @@ static irqreturn_t kxsd9_trigger_handler(int irq, void *p)
 	const struct iio_poll_func *pf = p;
 	struct iio_dev *indio_dev = pf->indio_dev;
 	struct kxsd9_state *st = iio_priv(indio_dev);
+	struct {
+		__be16 chan[4];
+		u64 ts;
+	} hw_values;
 	int ret;
-	/* 4 * 16bit values AND timestamp */
-	__be16 hw_values[8];
 
 	ret = regmap_bulk_read(st->map,
 			       KXSD9_REG_X,
-			       &hw_values,
-			       8);
+			       hw_values.chan,
+			       sizeof(hw_values.chan));
 	if (ret) {
 		dev_err(st->dev,
 			"error reading data\n");
@@ -224,7 +226,7 @@ static irqreturn_t kxsd9_trigger_handler(int irq, void *p)
 	}
 
 	iio_push_to_buffers_with_timestamp(indio_dev,
-					   hw_values,
+					   &hw_values,
 					   iio_get_time_ns(indio_dev));
 	iio_trigger_notify_done(indio_dev->trig);
 
-- 
2.26.2


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] iio: accel: kxsd9: Fix alignment of local buffer.
  2020-05-03 17:22 [PATCH] iio: accel: kxsd9: Fix alignment of local buffer jic23
@ 2020-05-03 18:01 ` Nuno Sá
  2020-05-04  9:47   ` Jonathan Cameron
  0 siblings, 1 reply; 3+ messages in thread
From: Nuno Sá @ 2020-05-03 18:01 UTC (permalink / raw)
  To: jic23, linux-iio; +Cc: Jonathan Cameron, Lars-Peter Clausen

On Sun, 2020-05-03 at 18:22 +0100, jic23@kernel.org wrote:
> From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> 
> iio_push_to_buffers_with_timestamp assumes 8 byte alignment which
> is not guaranteed by an array of 8 __be16.
> 
> Reported-by: Lars-Peter Clausen <lars@metafoo.de>
> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> ---
>  drivers/iio/accel/kxsd9.c | 12 +++++++-----
>  1 file changed, 7 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/iio/accel/kxsd9.c b/drivers/iio/accel/kxsd9.c
> index 0b876b2dc5bd..4c42d1200914 100644
> --- a/drivers/iio/accel/kxsd9.c
> +++ b/drivers/iio/accel/kxsd9.c
> @@ -209,14 +209,16 @@ static irqreturn_t kxsd9_trigger_handler(int
> irq, void *p)
>  	const struct iio_poll_func *pf = p;
>  	struct iio_dev *indio_dev = pf->indio_dev;
>  	struct kxsd9_state *st = iio_priv(indio_dev);
> +	struct {
> +		__be16 chan[4];
> +		u64 ts;
> +	} hw_values;

A nitpick from my side. Maybe a comment woudn't be that noisy. It might
be not that obvious for some people why this construct is needed and it
might prevent new driver's from doing the same mistake.

- Nuno Sá



^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] iio: accel: kxsd9: Fix alignment of local buffer.
  2020-05-03 18:01 ` Nuno Sá
@ 2020-05-04  9:47   ` Jonathan Cameron
  0 siblings, 0 replies; 3+ messages in thread
From: Jonathan Cameron @ 2020-05-04  9:47 UTC (permalink / raw)
  To: Nuno Sá; +Cc: jic23, linux-iio, Lars-Peter Clausen

On Sun, 3 May 2020 20:01:56 +0200
Nuno Sá <noname.nuno@gmail.com> wrote:

> On Sun, 2020-05-03 at 18:22 +0100, jic23@kernel.org wrote:
> > From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> > 
> > iio_push_to_buffers_with_timestamp assumes 8 byte alignment which
> > is not guaranteed by an array of 8 __be16.
> > 
> > Reported-by: Lars-Peter Clausen <lars@metafoo.de>
> > Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> > ---
> >  drivers/iio/accel/kxsd9.c | 12 +++++++-----
> >  1 file changed, 7 insertions(+), 5 deletions(-)
> > 
> > diff --git a/drivers/iio/accel/kxsd9.c b/drivers/iio/accel/kxsd9.c
> > index 0b876b2dc5bd..4c42d1200914 100644
> > --- a/drivers/iio/accel/kxsd9.c
> > +++ b/drivers/iio/accel/kxsd9.c
> > @@ -209,14 +209,16 @@ static irqreturn_t kxsd9_trigger_handler(int
> > irq, void *p)
> >  	const struct iio_poll_func *pf = p;
> >  	struct iio_dev *indio_dev = pf->indio_dev;
> >  	struct kxsd9_state *st = iio_priv(indio_dev);
> > +	struct {
> > +		__be16 chan[4];
> > +		u64 ts;
> > +	} hw_values;  
> 
> A nitpick from my side. Maybe a comment woudn't be that noisy. It might
> be not that obvious for some people why this construct is needed and it
> might prevent new driver's from doing the same mistake.

Good point. I'll add something like

/* Ensure correct positioning and alignment of timestamp */

above the struct definition.


> 
> - Nuno Sá
> 
> 



^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2020-05-04  9:48 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-05-03 17:22 [PATCH] iio: accel: kxsd9: Fix alignment of local buffer jic23
2020-05-03 18:01 ` Nuno Sá
2020-05-04  9:47   ` Jonathan Cameron

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).