All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jonathan Cameron <jic23@kernel.org>
To: linux-iio@vger.kernel.org
Cc: "Alexandru Lazar" <alazar@startmail.com>,
	"Akinobu Mita" <akinobu.mita@gmail.com>,
	"Alexandru Tachici" <alexandru.tachici@analog.com>,
	"Antoniu Miclaus" <antoniu.miclaus@analog.com>,
	"Charles-Antoine Couret" <charles-antoine.couret@essensium.com>,
	"Cosmin Tanislav" <cosmin.tanislav@analog.com>,
	"David Lechner" <david@lechnology.com>,
	"Ivan Mikhaylov" <i.mikhaylov@yadro.com>,
	"Jacopo Mondi" <jacopo+renesas@jmondi.org>,
	"Jean-Baptiste Maneyrol" <jmaneyrol@invensense.com>,
	"Lars-Peter Clausen" <lars@metafoo.de>,
	"Marcelo Schmitt" <marcelo.schmitt1@gmail.com>,
	"Mårten Lindahl" <martenli@axis.com>,
	"Matt Ranostay" <mranostay@gmail.com>,
	"Matt Ranostay" <matt.ranostay@konsulko.com>,
	"Michael Hennerich" <michael.hennerich@analog.com>,
	"Michael Welling" <mwelling@ieee.org>,
	"Mugilraj Dhavachelvan" <dmugil2000@gmail.com>,
	"Navin Sankar Velliangiri" <navin@linumiz.com>,
	"Nuno Sá" <nuno.sa@analog.com>,
	"Paul Cercueil" <paul@crapouillou.net>,
	"Phil Reid" <preid@electromag.com.au>,
	"Puranjay Mohan" <puranjay12@gmail.com>,
	"Ricardo Ribalda" <ribalda@kernel.org>,
	"Robert Jones" <rjones@gateworks.com>,
	"Rui Miguel Silva" <rui.silva@linaro.org>,
	"Sean Nyekjaer" <sean.nyekjaer@prevas.dk>,
	"Tomas Melin" <tomas.melin@vaisala.com>,
	"Tomislav Denis" <tomislav.denis@avl.com>,
	"Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>,
	"Jonathan Cameron" <Jonathan.Cameron@huawei.com>
Subject: [PATCH v2 01/92] iio: core: Fix IIO_ALIGN and rename as it was not sufficiently large
Date: Sun,  8 May 2022 18:55:41 +0100	[thread overview]
Message-ID: <20220508175712.647246-2-jic23@kernel.org> (raw)
In-Reply-To: <20220508175712.647246-1-jic23@kernel.org>

From: Jonathan Cameron <Jonathan.Cameron@huawei.com>

Discussion of the series:
https://lore.kernel.org/all/20220405135758.774016-1-catalin.marinas@arm.com/
mm, arm64: Reduce ARCH_KMALLOC_MINALIGN brought to my attention that
our current IIO usage of L1CACHE_ALIGN is insufficient as their are Arm
platforms out their with non coherent DMA and larger cache lines at
at higher levels of their cache hierarchy.

Rename the define to make it's purpose more explicit. It will be used
much more widely going forwards (to replace incorrect ____cacheline_aligned
markings.

Note this patch will greatly reduce the padding on some architectures
that have smaller requirements for DMA safe buffers.

The history of changing values of ARCH_KMALLOC_MINALIGN via
ARCH_DMA_MINALIGN on arm64 is rather complex. I'm not tagging this
as fixing a particular patch from that route as it's not clear what to tag.

Most recently a change to bring them back inline was reverted because
of some Qualcomm Kryo cores with an L2 cache with 128-byte lines
sitting above the point of coherency.

c1132702c71f Revert "arm64: cache: Lower ARCH_DMA_MINALIGN to 64 (L1_CACHE_BYTES)"
That reverts:
65688d2a05de arm64: cache: Lower ARCH_DMA_MINALIGN to 64 (L1_CACHE_BYTES) which
refers to the change originally being motivated by Thunder x1 performance
rather than correctness.

Fixes: 6f7c8ee585e9d ("staging:iio: Add ability to allocate private data space to iio_allocate_device")
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Acked-by: Nuno Sá <nuno.sa@analog.com>
---
 drivers/iio/adc/adi-axi-adc.c   |  7 ++++---
 drivers/iio/industrialio-core.c |  4 ++--
 include/linux/iio/iio.h         | 10 ++++++++--
 3 files changed, 14 insertions(+), 7 deletions(-)

diff --git a/drivers/iio/adc/adi-axi-adc.c b/drivers/iio/adc/adi-axi-adc.c
index a73e3c2d212f..099be9d47223 100644
--- a/drivers/iio/adc/adi-axi-adc.c
+++ b/drivers/iio/adc/adi-axi-adc.c
@@ -84,7 +84,8 @@ void *adi_axi_adc_conv_priv(struct adi_axi_adc_conv *conv)
 {
 	struct adi_axi_adc_client *cl = conv_to_client(conv);
 
-	return (char *)cl + ALIGN(sizeof(struct adi_axi_adc_client), IIO_ALIGN);
+	return (char *)cl + ALIGN(sizeof(struct adi_axi_adc_client),
+				  IIO_DMA_MINALIGN);
 }
 EXPORT_SYMBOL_GPL(adi_axi_adc_conv_priv);
 
@@ -169,9 +170,9 @@ static struct adi_axi_adc_conv *adi_axi_adc_conv_register(struct device *dev,
 	struct adi_axi_adc_client *cl;
 	size_t alloc_size;
 
-	alloc_size = ALIGN(sizeof(struct adi_axi_adc_client), IIO_ALIGN);
+	alloc_size = ALIGN(sizeof(struct adi_axi_adc_client), IIO_DMA_MINALIGN);
 	if (sizeof_priv)
-		alloc_size += ALIGN(sizeof_priv, IIO_ALIGN);
+		alloc_size += ALIGN(sizeof_priv, IIO_DMA_MINALIGN);
 
 	cl = kzalloc(alloc_size, GFP_KERNEL);
 	if (!cl)
diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c
index e1ed44dec2ab..b4218f3b1ac2 100644
--- a/drivers/iio/industrialio-core.c
+++ b/drivers/iio/industrialio-core.c
@@ -1640,7 +1640,7 @@ struct iio_dev *iio_device_alloc(struct device *parent, int sizeof_priv)
 
 	alloc_size = sizeof(struct iio_dev_opaque);
 	if (sizeof_priv) {
-		alloc_size = ALIGN(alloc_size, IIO_ALIGN);
+		alloc_size = ALIGN(alloc_size, IIO_DMA_MINALIGN);
 		alloc_size += sizeof_priv;
 	}
 
@@ -1650,7 +1650,7 @@ struct iio_dev *iio_device_alloc(struct device *parent, int sizeof_priv)
 
 	indio_dev = &iio_dev_opaque->indio_dev;
 	indio_dev->priv = (char *)iio_dev_opaque +
-		ALIGN(sizeof(struct iio_dev_opaque), IIO_ALIGN);
+		ALIGN(sizeof(struct iio_dev_opaque), IIO_DMA_MINALIGN);
 
 	indio_dev->dev.parent = parent;
 	indio_dev->dev.type = &iio_device_type;
diff --git a/include/linux/iio/iio.h b/include/linux/iio/iio.h
index faf00f2c0be6..c4ce02293f1f 100644
--- a/include/linux/iio/iio.h
+++ b/include/linux/iio/iio.h
@@ -9,6 +9,7 @@
 
 #include <linux/device.h>
 #include <linux/cdev.h>
+#include <linux/slab.h>
 #include <linux/iio/types.h>
 #include <linux/of.h>
 /* IIO TODO LIST */
@@ -657,8 +658,13 @@ static inline void *iio_device_get_drvdata(const struct iio_dev *indio_dev)
 	return dev_get_drvdata(&indio_dev->dev);
 }
 
-/* Can we make this smaller? */
-#define IIO_ALIGN L1_CACHE_BYTES
+/*
+ * Used to ensure the iio_priv() structure is aligned to allow that structure
+ * to in turn include IIO_DMA_MINALIGN'd elements such as buffers which
+ * must not share  cachelines with the rest of the structure, thus making
+ * them safe for use with non-coherent DMA.
+ */
+#define IIO_DMA_MINALIGN ARCH_KMALLOC_MINALIGN
 struct iio_dev *iio_device_alloc(struct device *parent, int sizeof_priv);
 
 /* The information at the returned address is guaranteed to be cacheline aligned */
-- 
2.36.0


  reply	other threads:[~2022-05-08 19:13 UTC|newest]

Thread overview: 97+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-05-08 17:55 [PATCH v2 00/92] IIO: Fix alignment of buffers for DMA Jonathan Cameron
2022-05-08 17:55 ` Jonathan Cameron [this message]
2022-06-04 16:56   ` [PATCH v2 01/92] iio: core: Fix IIO_ALIGN and rename as it was not sufficiently large Jonathan Cameron
2022-05-08 17:55 ` [PATCH v2 02/92] iio: accel: adxl313: Fix alignment for DMA safety Jonathan Cameron
2022-05-08 17:55 ` [PATCH v2 03/92] iio: accel: adxl355: " Jonathan Cameron
2022-05-08 17:55 ` [PATCH v2 04/92] iio: accel: adxl367: " Jonathan Cameron
2022-05-08 17:55 ` [PATCH v2 05/92] iio: accel: bma220: " Jonathan Cameron
2022-05-08 17:55 ` [PATCH v2 06/92] iio: accel: bmi088: " Jonathan Cameron
2022-05-08 17:55 ` [PATCH v2 07/92] iio: accel: sca3000: " Jonathan Cameron
2022-05-08 17:55 ` [PATCH v2 08/92] iio: accel: sca3300: " Jonathan Cameron
2022-05-08 17:55 ` [PATCH v2 09/92] iio: adc: ad7266: " Jonathan Cameron
2022-05-08 17:55 ` [PATCH v2 10/92] iio: adc: ad7280a: " Jonathan Cameron
2022-05-08 17:55 ` [PATCH v2 11/92] iio: adc: ad7292: " Jonathan Cameron
2022-05-08 17:55 ` [PATCH v2 12/92] iio: adc: ad7298: " Jonathan Cameron
2022-05-08 17:55 ` [PATCH v2 13/92] iio: adc: ad7476: " Jonathan Cameron
2022-05-08 17:55 ` [PATCH v2 14/92] iio: adc: ad7606: " Jonathan Cameron
2022-05-08 17:55 ` [PATCH v2 15/92] iio: adc: ad7766: " Jonathan Cameron
2022-05-08 17:55 ` [PATCH v2 16/92] iio: adc: ad7768-1: " Jonathan Cameron
2022-05-08 17:55 ` [PATCH v2 17/92] iio: adc: ad7887: " Jonathan Cameron
2022-05-08 17:55 ` [PATCH v2 18/92] iio: adc: ad7923: " Jonathan Cameron
2022-05-08 17:55 ` [PATCH v2 19/92] iio: adc: ad7949: " Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 20/92] iio: adc: hi8435: " Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 21/92] iio: adc: ltc2496: " Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 22/92] iio: adc: ltc2497: " Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 23/92] iio: adc: max1027: " Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 24/92] iio: adc: max11100: " Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 25/92] iio: adc: max1118: " Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 26/92] iio: adc: max1241: " Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 27/92] iio: adc: mcp320x: " Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 28/92] iio: adc: ti-adc0832: " Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 29/92] iio: adc: ti-adc084s021: " Jonathan Cameron
2022-05-09  8:34   ` Marten Lindahl
2022-05-08 17:56 ` [PATCH v2 30/92] iio: adc: ti-adc108s102: " Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 31/92] iio: adc: ti-adc12138: " Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 32/92] iio: adc: ti-adc128s052: " Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 33/92] iio: adc: ti-adc161s626: " Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 34/92] iio: adc: ti-ads124s08: " Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 35/92] iio: adc: ti-ads131e08: " Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 36/92] iio: adc: ti-ads7950: " Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 37/92] iio: adc: ti-ads8344: " Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 38/92] iio: adc: ti-ads8688: " Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 39/92] iio: adc: ti-tlc4541: " Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 40/92] iio: addac: ad74413r: " Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 41/92] iio: amplifiers: ad8366: " Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 42/92] iio: common: ssp: " Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 43/92] iio: dac: ad5064: " Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 44/92] iio: dac: ad5360: " Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 45/92] iio: dac: ad5421: " Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 46/92] iio: dac: ad5449: " Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 47/92] iio: dac: ad5504: " Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 48/92] iio: dac: ad5592r: " Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 49/92] iio: dac: ad5686: " Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 50/92] iio: dac: ad5755: " Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 51/92] iio: dac: ad5761: " Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 52/92] iio: dac: ad5764: " Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 53/92] iio: dac: ad5766: " Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 54/92] iio: dac: ad5770r: " Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 55/92] iio: dac: ad5791: Fix alignment for DMA saftey Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 56/92] iio: dac: ad7293: Fix alignment for DMA safety Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 57/92] iio: dac: ad7303: " Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 58/92] iio: dac: ad8801: " Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 59/92] iio: dac: ltc2688: " Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 60/92] iio: dac: mcp4922: " Jonathan Cameron
2022-05-08 22:31   ` Michael Welling
2022-05-08 17:56 ` [PATCH v2 61/92] iio: dac: ti-dac082s085: " Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 62/92] iio: dac: ti-dac5571: " Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 63/92] iio: dac: ti-dac7311: " Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 64/92] iio: dac: ti-dac7612: " Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 65/92] iio: frequency: ad9523: " Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 66/92] iio: frequency: adf4350: " Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 67/92] iio: frequency: adf4371: " Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 68/92] iio: frequency: admv1013: " Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 69/92] iio: frequency: admv1014: " Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 70/92] iio: frequency: admv4420: " Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 71/92] iio: frequency: adrf6780: " Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 72/92] iio: gyro: adis16080: " Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 73/92] iio: gyro: adis16130: " Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 74/92] iio: gyro: adxrs450: " Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 75/92] iio: gyro: fxas210002c: " Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 76/92] iio: imu: fxos8700: " Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 77/92] iio: imu: inv_icm42600: " Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 78/92] iio: imu: inv_icm42600: Fix alignment for DMA safety in buffer code Jonathan Cameron
2022-05-08 17:56 ` [PATCH v2 79/92] iio: imu: mpu6050: Fix alignment for DMA safety Jonathan Cameron
2022-05-08 17:57 ` [PATCH v2 80/92] iio: potentiometer: ad5110: " Jonathan Cameron
2022-05-08 17:57 ` [PATCH v2 81/92] iio: potentiometer: ad5272: " Jonathan Cameron
2022-05-08 17:57 ` [PATCH v2 82/92] iio: potentiometer: max5481: " Jonathan Cameron
2022-05-08 17:57 ` [PATCH v2 83/92] iio: potentiometer: mcp41010: " Jonathan Cameron
2022-05-08 17:57 ` [PATCH v2 84/92] iio: potentiometer: mcp4131: " Jonathan Cameron
2022-05-08 17:57 ` [PATCH v2 85/92] iio: pressure: dlhl60d: Drop unnecessary alignment forcing Jonathan Cameron
2022-05-08 17:57 ` [PATCH v2 86/92] iio: proximity: as3935: Fix alignment for DMA safety Jonathan Cameron
2022-05-08 17:57 ` [PATCH v2 87/92] iio: proximity: vcnl3020: Drop unnecessary alignment requirement for i2c device Jonathan Cameron
2022-05-08 17:57 ` [PATCH v2 88/92] iio: resolver: ad2s1200: Fix alignment for DMA safety Jonathan Cameron
2022-05-08 17:57 ` [PATCH v2 89/92] iio: resolver: ad2s90: " Jonathan Cameron
2022-05-08 17:57 ` [PATCH v2 90/92] iio: temp: ltc2983: " Jonathan Cameron
2022-05-08 17:57 ` [PATCH v2 91/92] iio: temp: max31865: " Jonathan Cameron
2022-05-08 17:57 ` [PATCH v2 92/92] iio: temp: maxim_thermocouple: " Jonathan Cameron
2022-06-04 16:53 ` [PATCH v2 00/92] IIO: Fix alignment of buffers for DMA Jonathan Cameron

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=20220508175712.647246-2-jic23@kernel.org \
    --to=jic23@kernel.org \
    --cc=Jonathan.Cameron@huawei.com \
    --cc=akinobu.mita@gmail.com \
    --cc=alazar@startmail.com \
    --cc=alexandru.tachici@analog.com \
    --cc=antoniu.miclaus@analog.com \
    --cc=charles-antoine.couret@essensium.com \
    --cc=cosmin.tanislav@analog.com \
    --cc=david@lechnology.com \
    --cc=dmugil2000@gmail.com \
    --cc=i.mikhaylov@yadro.com \
    --cc=jacopo+renesas@jmondi.org \
    --cc=jmaneyrol@invensense.com \
    --cc=lars@metafoo.de \
    --cc=linux-iio@vger.kernel.org \
    --cc=marcelo.schmitt1@gmail.com \
    --cc=martenli@axis.com \
    --cc=matt.ranostay@konsulko.com \
    --cc=michael.hennerich@analog.com \
    --cc=mranostay@gmail.com \
    --cc=mwelling@ieee.org \
    --cc=navin@linumiz.com \
    --cc=nuno.sa@analog.com \
    --cc=paul@crapouillou.net \
    --cc=preid@electromag.com.au \
    --cc=puranjay12@gmail.com \
    --cc=ribalda@kernel.org \
    --cc=rjones@gateworks.com \
    --cc=rui.silva@linaro.org \
    --cc=sean.nyekjaer@prevas.dk \
    --cc=tomas.melin@vaisala.com \
    --cc=tomislav.denis@avl.com \
    --cc=u.kleine-koenig@pengutronix.de \
    /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.