Message ID | 20210501170121.512209-14-jic23@kernel.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | IIO: Alignment fixes part 2 - struct used to ensure alignment | expand |
On Sat, May 1, 2021 at 10:03 AM Jonathan Cameron <jic23@kernel.org> wrote: > > From: Jonathan Cameron <Jonathan.Cameron@huawei.com> > > To make code more readable, use a structure to express the channel > layout and ensure the timestamp is 8 byte aligned. > > Found during an audit of all calls of uses of > iio_push_to_buffers_with_timestamp() > > Fixes: cb119d535083 ("iio: proximity: add support for PulsedLight LIDAR") > Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> Acked-by: Matt Ranostay <matt.ranostay@konsulko.com> > Cc: Matt Ranostay <matt.ranostay@konsulko.com> > --- > drivers/iio/proximity/pulsedlight-lidar-lite-v2.c | 10 +++++++--- > 1 file changed, 7 insertions(+), 3 deletions(-) > > diff --git a/drivers/iio/proximity/pulsedlight-lidar-lite-v2.c b/drivers/iio/proximity/pulsedlight-lidar-lite-v2.c > index c685f10b5ae4..822a68ae5e03 100644 > --- a/drivers/iio/proximity/pulsedlight-lidar-lite-v2.c > +++ b/drivers/iio/proximity/pulsedlight-lidar-lite-v2.c > @@ -44,7 +44,11 @@ struct lidar_data { > int (*xfer)(struct lidar_data *data, u8 reg, u8 *val, int len); > int i2c_enabled; > > - u16 buffer[8]; /* 2 byte distance + 8 byte timestamp */ > + /* Ensure timestamp is naturally aligned */ > + struct { > + u16 chan; > + s64 timestamp __aligned(8); > + } scan; > }; > > static const struct iio_chan_spec lidar_channels[] = { > @@ -229,9 +233,9 @@ static irqreturn_t lidar_trigger_handler(int irq, void *private) > struct lidar_data *data = iio_priv(indio_dev); > int ret; > > - ret = lidar_get_measurement(data, data->buffer); > + ret = lidar_get_measurement(data, &data->scan.chan); > if (!ret) { > - iio_push_to_buffers_with_timestamp(indio_dev, data->buffer, > + iio_push_to_buffers_with_timestamp(indio_dev, &data->scan, > iio_get_time_ns(indio_dev)); > } else if (ret != -EINVAL) { > dev_err(&data->client->dev, "cannot read LIDAR measurement"); > -- > 2.31.1 >
diff --git a/drivers/iio/proximity/pulsedlight-lidar-lite-v2.c b/drivers/iio/proximity/pulsedlight-lidar-lite-v2.c index c685f10b5ae4..822a68ae5e03 100644 --- a/drivers/iio/proximity/pulsedlight-lidar-lite-v2.c +++ b/drivers/iio/proximity/pulsedlight-lidar-lite-v2.c @@ -44,7 +44,11 @@ struct lidar_data { int (*xfer)(struct lidar_data *data, u8 reg, u8 *val, int len); int i2c_enabled; - u16 buffer[8]; /* 2 byte distance + 8 byte timestamp */ + /* Ensure timestamp is naturally aligned */ + struct { + u16 chan; + s64 timestamp __aligned(8); + } scan; }; static const struct iio_chan_spec lidar_channels[] = { @@ -229,9 +233,9 @@ static irqreturn_t lidar_trigger_handler(int irq, void *private) struct lidar_data *data = iio_priv(indio_dev); int ret; - ret = lidar_get_measurement(data, data->buffer); + ret = lidar_get_measurement(data, &data->scan.chan); if (!ret) { - iio_push_to_buffers_with_timestamp(indio_dev, data->buffer, + iio_push_to_buffers_with_timestamp(indio_dev, &data->scan, iio_get_time_ns(indio_dev)); } else if (ret != -EINVAL) { dev_err(&data->client->dev, "cannot read LIDAR measurement");