| From 453ee324eb4485117e192f65e62eafda4dcb57cf Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Sat, 1 May 2021 18:01:09 +0100 |
| Subject: iio: accel: stk8ba50: Fix buffer alignment in |
| iio_push_to_buffers_with_timestamp() |
| |
| From: Jonathan Cameron <Jonathan.Cameron@huawei.com> |
| |
| [ Upstream commit 334883894bc1e145a1e0f5de1b0d1b6a1133f0e6 ] |
| |
| 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 this function. |
| |
| Fixes: db6a19b8251f ("iio: accel: Add trigger support for STK8BA50") |
| Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> |
| Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com> |
| Link: https://lore.kernel.org/r/20210501170121.512209-8-jic23@kernel.org |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/iio/accel/stk8ba50.c | 17 ++++++++--------- |
| 1 file changed, 8 insertions(+), 9 deletions(-) |
| |
| diff --git a/drivers/iio/accel/stk8ba50.c b/drivers/iio/accel/stk8ba50.c |
| index 3ead378b02c9..e8087d7ee49f 100644 |
| --- a/drivers/iio/accel/stk8ba50.c |
| +++ b/drivers/iio/accel/stk8ba50.c |
| @@ -91,12 +91,11 @@ struct stk8ba50_data { |
| u8 sample_rate_idx; |
| struct iio_trigger *dready_trig; |
| bool dready_trigger_on; |
| - /* |
| - * 3 x 16-bit channels (10-bit data, 6-bit padding) + |
| - * 1 x 16 padding + |
| - * 4 x 16 64-bit timestamp |
| - */ |
| - s16 buffer[8]; |
| + /* Ensure timestamp is naturally aligned */ |
| + struct { |
| + s16 chans[3]; |
| + s64 timetamp __aligned(8); |
| + } scan; |
| }; |
| |
| #define STK8BA50_ACCEL_CHANNEL(index, reg, axis) { \ |
| @@ -324,7 +323,7 @@ static irqreturn_t stk8ba50_trigger_handler(int irq, void *p) |
| ret = i2c_smbus_read_i2c_block_data(data->client, |
| STK8BA50_REG_XOUT, |
| STK8BA50_ALL_CHANNEL_SIZE, |
| - (u8 *)data->buffer); |
| + (u8 *)data->scan.chans); |
| if (ret < STK8BA50_ALL_CHANNEL_SIZE) { |
| dev_err(&data->client->dev, "register read failed\n"); |
| goto err; |
| @@ -337,10 +336,10 @@ static irqreturn_t stk8ba50_trigger_handler(int irq, void *p) |
| if (ret < 0) |
| goto err; |
| |
| - data->buffer[i++] = ret; |
| + data->scan.chans[i++] = ret; |
| } |
| } |
| - iio_push_to_buffers_with_timestamp(indio_dev, data->buffer, |
| + iio_push_to_buffers_with_timestamp(indio_dev, &data->scan, |
| pf->timestamp); |
| err: |
| mutex_unlock(&data->lock); |
| -- |
| 2.30.2 |
| |