From: Jonathan Cameron <jic23@kernel.org>
To: Lorenzo Bianconi <lorenzo.bianconi@redhat.com>
Cc: linux-iio@vger.kernel.org
Subject: Re: [PATCH 1/2] iio: imu: st_lsm6dsx: pre-allocate read buffer at bootstrap
Date: Sun, 7 Jan 2018 16:20:03 +0000 [thread overview]
Message-ID: <20180107162003.1c3e1efd@archlinux> (raw)
In-Reply-To: <20180106222325.17442-2-lorenzo.bianconi@redhat.com>
On Sat, 6 Jan 2018 23:23:24 +0100
Lorenzo Bianconi <lorenzo.bianconi@redhat.com> wrote:
> Allocate device read buffer at bootstrap and do not put it on the stack
> since it is pretty big (~200B) and its size will increase adding support
> to device hw timestamp.
> Moreover this patch fixes following sparse warnings:
> drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c:250:17: warning: Variable length
> array is used.
> drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c:283:55: error: cannot size
> expression
>
> Fixes: 290a6ce11d93 ("iio: imu: add support to lsm6dsx driver")
> Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@redhat.com>
Applied to the togreg branch of iio.git and pushed out as testing for
the autobuilders to play with it.
Thanks,
Jonathan
> ---
> drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h | 4 ++++
> drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c | 7 +++----
> drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c | 4 ++++
> 3 files changed, 11 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h
> index ccbe44cef41a..35acb9c96745 100644
> --- a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h
> +++ b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h
> @@ -27,6 +27,7 @@ enum st_lsm6dsx_hw_id {
> ST_LSM6DSX_MAX_ID,
> };
>
> +#define ST_LSM6DSX_BUFF_SIZE 256
> #define ST_LSM6DSX_CHAN_SIZE 2
> #define ST_LSM6DSX_SAMPLE_SIZE 6
> #define ST_LSM6DSX_MAX_WORD_LEN ((32 / ST_LSM6DSX_SAMPLE_SIZE) * \
> @@ -122,6 +123,7 @@ struct st_lsm6dsx_sensor {
> * @fifo_mode: FIFO operating mode supported by the device.
> * @enable_mask: Enabled sensor bitmask.
> * @sip: Total number of samples (acc/gyro) in a given pattern.
> + * @buff: Device read buffer.
> * @iio_devs: Pointers to acc/gyro iio_dev instances.
> * @settings: Pointer to the specific sensor settings in use.
> */
> @@ -137,6 +139,8 @@ struct st_lsm6dsx_hw {
> u8 enable_mask;
> u8 sip;
>
> + u8 *buff;
> +
> struct iio_dev *iio_devs[ST_LSM6DSX_ID_MAX];
>
> const struct st_lsm6dsx_settings *settings;
> diff --git a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c
> index 093f9750974a..1d6aa9b1a4cf 100644
> --- a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c
> +++ b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_buffer.c
> @@ -247,7 +247,6 @@ static int st_lsm6dsx_read_fifo(struct st_lsm6dsx_hw *hw)
> struct st_lsm6dsx_sensor *acc_sensor, *gyro_sensor;
> s64 acc_ts, acc_delta_ts, gyro_ts, gyro_delta_ts;
> u8 iio_buff[ALIGN(ST_LSM6DSX_SAMPLE_SIZE, sizeof(s64)) + sizeof(s64)];
> - u8 buff[pattern_len];
> __le16 fifo_status;
>
> err = regmap_bulk_read(hw->regmap,
> @@ -280,7 +279,7 @@ static int st_lsm6dsx_read_fifo(struct st_lsm6dsx_hw *hw)
> samples);
>
> for (read_len = 0; read_len < fifo_len; read_len += pattern_len) {
> - err = st_lsm6dsx_read_block(hw, buff, sizeof(buff));
> + err = st_lsm6dsx_read_block(hw, hw->buff, pattern_len);
> if (err < 0)
> return err;
>
> @@ -305,7 +304,7 @@ static int st_lsm6dsx_read_fifo(struct st_lsm6dsx_hw *hw)
>
> while (acc_sip > 0 || gyro_sip > 0) {
> if (gyro_sip-- > 0) {
> - memcpy(iio_buff, &buff[offset],
> + memcpy(iio_buff, &hw->buff[offset],
> ST_LSM6DSX_SAMPLE_SIZE);
> iio_push_to_buffers_with_timestamp(
> hw->iio_devs[ST_LSM6DSX_ID_GYRO],
> @@ -315,7 +314,7 @@ static int st_lsm6dsx_read_fifo(struct st_lsm6dsx_hw *hw)
> }
>
> if (acc_sip-- > 0) {
> - memcpy(iio_buff, &buff[offset],
> + memcpy(iio_buff, &hw->buff[offset],
> ST_LSM6DSX_SAMPLE_SIZE);
> iio_push_to_buffers_with_timestamp(
> hw->iio_devs[ST_LSM6DSX_ID_ACC],
> diff --git a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c
> index 819a85bb86ec..c2fa3239b9c6 100644
> --- a/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c
> +++ b/drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c
> @@ -722,6 +722,10 @@ int st_lsm6dsx_probe(struct device *dev, int irq, int hw_id, const char *name,
> mutex_init(&hw->fifo_lock);
> mutex_init(&hw->conf_lock);
>
> + hw->buff = devm_kzalloc(dev, ST_LSM6DSX_BUFF_SIZE, GFP_KERNEL);
> + if (!hw->buff)
> + return -ENOMEM;
> +
> hw->dev = dev;
> hw->irq = irq;
> hw->regmap = regmap;
prev parent reply other threads:[~2018-01-07 16:20 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-01-06 22:23 [PATCH 1/2] iio: imu: st_lsm6dsx: pre-allocate read buffer at bootstrap Lorenzo Bianconi
2018-01-07 16:20 ` Jonathan Cameron [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180107162003.1c3e1efd@archlinux \
--to=jic23@kernel.org \
--cc=linux-iio@vger.kernel.org \
--cc=lorenzo.bianconi@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.