All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jonathan Cameron <jic23@kernel.org>
To: linux-iio@vger.kernel.org,
	Andy Shevchenko <andy.shevchenko@gmail.com>,
	Nuno Sa <Nuno.Sa@analog.com>
Cc: Linus Walleij <linus.walleij@linaro.org>,
	Jan Kiszka <jan.kiszka@siemens.com>,
	Jonathan Cameron <Jonathan.Cameron@huawei.com>
Subject: Re: [PATCH v2 0/4] IIO: Alignment fixes part 4 - bounce buffers for the hard cases.
Date: Sun, 3 Oct 2021 16:54:19 +0100	[thread overview]
Message-ID: <20211003165419.191055ea@jic23-huawei> (raw)
In-Reply-To: <20210718155559.4eb7bf7a@jic23-huawei>

On Sun, 18 Jul 2021 15:55:59 +0100
Jonathan Cameron <jic23@kernel.org> wrote:

> On Sun, 13 Jun 2021 16:10:35 +0100
> Jonathan Cameron <jic23@kernel.org> wrote:
> 
> > From: Jonathan Cameron <Jonathan.Cameron@huawei.com>  
> Hi All,
> 
> If anyone has time to take a look at this, particularly the first patch which
> does the interesting stuff and patch 3 which I don't think has had any review
> yet that would be great.

It might have helped if I'd identified patch 2 as the one that was
missing reviews.  Ah well. I've done something I really dislike doing and
given up on getting a review for that patch.  As such I've applied
this series to the togreg branch of iio.git and pushed it out as testing for
0-day to see if it can find anything we missed.

If anyone has a chance to sanity check patch 2 for any idiocy on my part it
would still be very much appreciated!

Thanks to Nuno, Andy and Linus for their reviews of this fiddly series.

Thanks,

Jonathan

> 
> Thanks,
> 
> Jonathan
> 
> > 
> > Thanks to Andy and Nuno for reviews.
> > 
> > Chances since V1/RFC:
> > * Renamed the function to iio_push_to_buffer_with_ts_unaligned()
> > * Fixed the various bugs people pointed out.
> > * Used more standard realloc handling to be more 'obviously' correct.
> > * Added some additional comments on the sizing of the copy to explain why
> >   it is a conservative estimate and may copy more than strictly necessary.
> > 
> > A few things we discussed I didn't do (for now)...
> > 
> > I decided against adding explicit bounce buffer allocation calls for now,
> > though I'm open to doing that in future if we find doing the somewhat hidden
> > realloc to be a problem.
> > 
> > I haven't computed a more precise data_sz as I don't thing the benefits
> > of a more precise copy or not passing the size, make it worth the slight
> > reduction in complexity for the callers.  Again, open to revisiting this
> > in future!
> > 
> > I tested it by hacking the dummy driver to shift it's data by one
> > byte and call iio_push_to_buffers_with_ts_unaligned().
> > 
> > Strictly a hack. I definitely don't want to move this driver over to this
> > new interface as it might encourage inappropriate use.
> > 
> > diff --git a/drivers/iio/dummy/iio_simple_dummy_buffer.c b/drivers/iio/dummy/iio_simple_dummy_buffer.c
> > index 59aa60d4ca37..b47af7df8efc 100644
> > --- a/drivers/iio/dummy/iio_simple_dummy_buffer.c
> > +++ b/drivers/iio/dummy/iio_simple_dummy_buffer.c
> > @@ -19,6 +19,7 @@
> >  #include <linux/iio/buffer.h>
> >  #include <linux/iio/trigger_consumer.h>
> >  #include <linux/iio/triggered_buffer.h>
> > +#include <asm/unaligned.h>
> >  
> >  #include "iio_simple_dummy.h"
> >  
> > @@ -78,12 +79,13 @@ static irqreturn_t iio_simple_dummy_trigger_h(int irq, void *p)
> >                         j = find_next_bit(indio_dev->active_scan_mask,
> >                                           indio_dev->masklength, j);
> >                         /* random access read from the 'device' */
> > -                       data[i] = fakedata[j];
> > +//                     data[i] = fakedata[j];
> > +                       put_unaligned_le16(fakedata[j], ((u8 *)(&data[i])) + 1);
> >                         len += 2;
> >                 }
> >         }
> >  
> > -       iio_push_to_buffers_with_timestamp(indio_dev, data,
> > +       iio_push_to_buffers_with_ts_unaligned(indio_dev, ((u8 *)(data)) + 1, indio_dev->scan_bytes - 8,
> >                                            iio_get_time_ns(indio_dev));
> > 
> > 
> > v1 description:
> > 
> > I finally got around to do a manual audit of all the calls to
> > iio_push_to_buffers_with_timestamp() which has the somewhat odd requirements
> > of:
> > 1. 8 byte alignment of the provided buffer.
> > 2. space for an 8 byte naturally aligned timestamp to be inserted at the
> >    end.
> > 
> > Unfortunately there were rather a lot of these left, but time to bite the bullet
> > and clean them up.
> > 
> > As discussed previous in
> > https://lore.kernel.org/linux-iio/20200920112742.170751-1-jic23@kernel.org/
> > it is not easy to fix the alignment issue without requiring a bounce buffer.
> > This final part of the 4 sets of fixes is concerned with the cases where
> > bounce buffers are the proposed solutions.
> > 
> > In these cases we have hardware that reads a prefix that we wish to
> > drop. That makes it hard to directly read the data into the correct location.
> > 
> > Rather than implementing bouce buffers in each case, this set provides some
> > magic in the core to handle them via a new function.
> > iio_push_to_buffers_with_ts_na() - non aligned
> > 
> > Note this is totally untested as I don't have suitable hardware or emulation.
> > I can fake something up in the dummy driver or via QEMU but I definitely want
> > both eyes and testing on this series!
> > 
> > Jonathan Cameron (4):
> >   iio: core: Introduce iio_push_to_buffers_with_ts_unaligned()
> >   iio: adc: ti-adc108s102: Fix alignment of buffer pushed to iio
> >     buffers.
> >   iio: gyro: mpu3050: Fix alignment and size issues with buffers.
> >   iio: imu: adis16400: Fix buffer alignment requirements.
> > 
> >  drivers/iio/adc/ti-adc108s102.c   | 11 ++++----
> >  drivers/iio/gyro/mpu3050-core.c   | 24 ++++++++--------
> >  drivers/iio/imu/adis16400.c       | 20 ++++++++++----
> >  drivers/iio/industrialio-buffer.c | 46 +++++++++++++++++++++++++++++++
> >  include/linux/iio/buffer.h        |  4 +++
> >  include/linux/iio/iio-opaque.h    |  4 +++
> >  6 files changed, 86 insertions(+), 23 deletions(-)
> >   
> 


      reply	other threads:[~2021-10-03 15:50 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-06-13 15:10 Jonathan Cameron
2021-06-13 15:10 ` [PATCH v2 1/4] iio: core: Introduce iio_push_to_buffers_with_ts_unaligned() Jonathan Cameron
2021-06-14  8:33   ` Sa, Nuno
2021-06-13 15:10 ` [PATCH v2 2/4] iio: adc: ti-adc108s102: Fix alignment of buffer pushed to iio buffers Jonathan Cameron
2021-06-13 15:10 ` [PATCH v2 3/4] iio: gyro: mpu3050: Fix alignment and size issues with buffers Jonathan Cameron
2021-06-13 15:10 ` [PATCH v2 4/4] iio: imu: adis16400: Fix buffer alignment requirements Jonathan Cameron
2021-06-14  8:25   ` Sa, Nuno
2021-07-18 14:55 ` [PATCH v2 0/4] IIO: Alignment fixes part 4 - bounce buffers for the hard cases Jonathan Cameron
2021-10-03 15:54   ` 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=20211003165419.191055ea@jic23-huawei \
    --to=jic23@kernel.org \
    --cc=Jonathan.Cameron@huawei.com \
    --cc=Nuno.Sa@analog.com \
    --cc=andy.shevchenko@gmail.com \
    --cc=jan.kiszka@siemens.com \
    --cc=linus.walleij@linaro.org \
    --cc=linux-iio@vger.kernel.org \
    --subject='Re: [PATCH v2 0/4] IIO: Alignment fixes part 4 - bounce buffers for the hard cases.' \
    /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

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.