lkml.org 
[lkml]   [2021]   [Jul]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 126/315] iio: accel: stk8ba50: Fix buffer alignment in iio_push_to_buffers_with_timestamp()
    Date
    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 300d955bad00..5ca179cea2fb 100644
    --- a/drivers/iio/accel/stk8ba50.c
    +++ b/drivers/iio/accel/stk8ba50.c
    @@ -94,12 +94,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) { \
    @@ -329,7 +328,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;
    @@ -342,10 +341,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


    \
     
     \ /
      Last update: 2021-07-19 18:10    [W:4.723 / U:0.040 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site