From: "Nuno Sá" <noname.nuno@gmail.com>
To: "David Lechner" <dlechner@baylibre.com>,
"Jonathan Cameron" <jic23@kernel.org>,
"Nuno Sá" <nuno.sa@analog.com>,
"Andy Shevchenko" <andy@kernel.org>,
"Lars-Peter Clausen" <lars@metafoo.de>,
"Michael Hennerich" <Michael.Hennerich@analog.com>,
"Eugen Hristev" <eugen.hristev@linaro.org>,
"Nicolas Ferre" <nicolas.ferre@microchip.com>,
"Alexandre Belloni" <alexandre.belloni@bootlin.com>,
"Claudiu Beznea" <claudiu.beznea@tuxon.dev>
Cc: linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v2 1/6] iio: introduce IIO_DECLARE_BUFFER_WITH_TS macros
Date: Wed, 23 Apr 2025 10:18:55 +0100 [thread overview]
Message-ID: <701bfc6a715046044dbc789f1c11c7f85395c7a8.camel@gmail.com> (raw)
In-Reply-To: <20250422-iio-introduce-iio_declare_buffer_with_ts-v2-1-3fd36475c706@baylibre.com>
Hi David,
Nice patch, I really think these will be very helpful... Just one comment bellow
On Tue, 2025-04-22 at 17:07 -0500, David Lechner wrote:
> Add new macros to help with the common case of declaring a buffer that
> is safe to use with iio_push_to_buffers_with_ts(). This is not trivial
> to do correctly because of the alignment requirements of the timestamp.
> This will make it easier for both authors and reviewers.
>
> To avoid double __align() attributes in cases where we also need DMA
> alignment, add a 2nd variant IIO_DECLARE_DMA_BUFFER_WITH_TS.
>
> Signed-off-by: David Lechner <dlechner@baylibre.com>
> ---
> include/linux/iio/iio.h | 36 ++++++++++++++++++++++++++++++++++++
> 1 file changed, 36 insertions(+)
>
> diff --git a/include/linux/iio/iio.h b/include/linux/iio/iio.h
> index
> 638cf2420fbd85cf2924d09d061df601d1d4bb2a..4dd811e3530e228a6fadbd80cfb2f5068c3d
> 6a9a 100644
> --- a/include/linux/iio/iio.h
> +++ b/include/linux/iio/iio.h
> @@ -7,6 +7,7 @@
> #ifndef _INDUSTRIAL_IO_H_
> #define _INDUSTRIAL_IO_H_
>
> +#include <linux/align.h>
> #include <linux/device.h>
> #include <linux/cdev.h>
> #include <linux/compiler_types.h>
> @@ -777,6 +778,41 @@ static inline void *iio_device_get_drvdata(const struct
> iio_dev *indio_dev)
> * them safe for use with non-coherent DMA.
> */
> #define IIO_DMA_MINALIGN ARCH_DMA_MINALIGN
> +
> +#define _IIO_DECLARE_BUFFER_WITH_TS(type, name, count) \
> + type name[ALIGN((count), sizeof(s64) / sizeof(type)) + sizeof(s64) /
> sizeof(type)]
> +
> +/**
> + * IIO_DECLARE_BUFFER_WITH_TS() - Declare a buffer with timestamp
> + * @type: element type of the buffer
> + * @name: identifier name of the buffer
> + * @count: number of elements in the buffer
> + *
> + * Declares a buffer that is safe to use with iio_push_to_buffer_with_ts().
> In
> + * addition to allocating enough space for @count elements of @type, it also
> + * allocates space for a s64 timestamp at the end of the buffer and ensures
> + * proper alignment of the timestamp.
> + */
> +#define IIO_DECLARE_BUFFER_WITH_TS(type, name, count) \
> + _IIO_DECLARE_BUFFER_WITH_TS(type, name, count) __aligned(sizeof(s64))
> +
> +/**
> + * IIO_DECLARE_DMA_BUFFER_WITH_TS() - Declare a DMA-aligned buffer with
> timestamp
> + * @type: element type of the buffer
> + * @name: identifier name of the buffer
> + * @count: number of elements in the buffer
> + *
> + * Same as IIO_DECLARE_BUFFER_WITH_TS(), but is uses
> __aligned(IIO_DMA_MINALIGN)
> + * to ensure that the buffer doesn't share cachelines with anything that
> comes
> + * before it in a struct. This should not be used for stack-allocated buffers
> + * as stack memory cannot generally be used for DMA.
> + */
> +#define IIO_DECLARE_DMA_BUFFER_WITH_TS(type, name, count) \
> + _IIO_DECLARE_BUFFER_WITH_TS(type, name, count)
> __aligned(IIO_DMA_MINALIGN)
> +
> +_Static_assert(sizeof(IIO_DMA_MINALIGN) % sizeof(s64) == 0,
> + "macros above assume that IIO_DMA_MINALIGN also ensures s64 timestamp
> alignment");
>
I wonder about the usefulness of the above assert... AFAICT, the default
alignment is 8 bytes and I could not find any arch defining ARCH_DMA_MINALIGN
smaller than that (would be very odd to have a cacheline smaller than that these
days). For bigger values, nowadays they are all power of 2 and I would be
surprised otherwise. But the more important question to me is what if the above
assert fails? Will we not allow IIO or some drivers to be used in that
architecture? It can become a very "painful" situation (assuming these macros
get widely used). So, IMHO, either we assume the above can happen and rework the
macros to make it work for that hypotetical case or we assume the above is
always true and drop the assert. TBH, I think it would be a fair assumption...
On top of that the assertion is wrong:
sizeof(IIO_DMA_MINALIGN) != IIO_DMA_MINALIGN :)
On the other hand, as I mentioned in V1, I think that an assertion or
BUILD_BUG_ON_MSG for making sure 'count' is a compile time constant expression
would be helpful. Sure, we'll get -Wvla but some developers might still ignore
the warning and send patches with these arrays. So, it would be neater if we
fail to build and force them to fix their code.
- Nuno Sá
next prev parent reply other threads:[~2025-04-23 9:18 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-22 22:07 [PATCH v2 0/6] iio: introduce IIO_DECLARE_BUFFER_WITH_TS David Lechner
2025-04-22 22:07 ` [PATCH v2 1/6] iio: introduce IIO_DECLARE_BUFFER_WITH_TS macros David Lechner
2025-04-22 22:30 ` Andy Shevchenko
2025-04-22 22:37 ` David Lechner
2025-04-22 22:50 ` Andy Shevchenko
2025-04-23 9:18 ` Nuno Sá [this message]
2025-04-23 14:51 ` David Lechner
2025-04-23 15:43 ` Andy Shevchenko
2025-04-24 7:44 ` Nuno Sá
2025-04-26 11:19 ` Jonathan Cameron
2025-04-23 17:25 ` kernel test robot
2025-04-23 17:46 ` kernel test robot
2025-04-22 22:07 ` [PATCH v2 2/6] iio: adc: ad4695: use u16 for buffer elements David Lechner
2025-04-22 22:07 ` [PATCH v2 3/6] iio: adc: ad4695: use IIO_DECLARE_BUFFER_WITH_TS David Lechner
2025-04-22 22:34 ` Andy Shevchenko
2025-04-22 22:07 ` [PATCH v2 4/6] iio: adc: ad7380: " David Lechner
2025-04-22 22:33 ` Andy Shevchenko
2025-04-22 22:41 ` David Lechner
2025-04-22 22:53 ` Andy Shevchenko
2025-04-22 22:07 ` [PATCH v2 5/6] iio: accel: sca3300: " David Lechner
2025-04-22 22:07 ` [PATCH v2 6/6] iio: adc: at91-sama5d2: " David Lechner
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=701bfc6a715046044dbc789f1c11c7f85395c7a8.camel@gmail.com \
--to=noname.nuno@gmail.com \
--cc=Michael.Hennerich@analog.com \
--cc=alexandre.belloni@bootlin.com \
--cc=andy@kernel.org \
--cc=claudiu.beznea@tuxon.dev \
--cc=dlechner@baylibre.com \
--cc=eugen.hristev@linaro.org \
--cc=jic23@kernel.org \
--cc=lars@metafoo.de \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=nicolas.ferre@microchip.com \
--cc=nuno.sa@analog.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox