Thread (22 messages) flat view 22 messages, 3 authors, 2020-05-22

RE: [PATCH v2 7/8] iio: core: simplify alloc alignment code

From: "Sa, Nuno" <Nuno.Sa@analog.com>
Date: 2020-05-15 12:37:51
Also in: linux-iio, lkml

From: Ardelean, Alexandru <redacted>
Sent: Freitag, 15. Mai 2020 13:48
To: linux-arm-kernel@lists.infradead.org; linux-stm32@st-md-
mailman.stormreply.com; Sa, Nuno [off-list ref]; linux-
kernel@vger.kernel.org; linux-iio@vger.kernel.org
Cc: ludovic.desroches@microchip.com; nicolas.ferre@microchip.com;
alexandre.torgue@st.com; ak@it-klinger.de; jic23@kernel.org;
eugen.hristev@microchip.com; mcoquelin.stm32@gmail.com;
alexandre.belloni@bootlin.com
Subject: Re: [PATCH v2 7/8] iio: core: simplify alloc alignment code

On Fri, 2020-05-15 at 07:12 +0000, Sa, Nuno wrote:
quoted
Hey Alex,

Just a small question...
quoted
From: linux-iio-owner@vger.kernel.org <linux-iio-
owner@vger.kernel.org>
quoted
quoted
On Behalf Of Alexandru Ardelean
Sent: Donnerstag, 14. Mai 2020 15:17
To: linux-iio@vger.kernel.org; linux-arm-kernel@lists.infradead.org;
linux-
quoted
quoted
stm32@st-md-mailman.stormreply.com; linux-kernel@vger.kernel.org
Cc: ludovic.desroches@microchip.com; eugen.hristev@microchip.com;
jic23@kernel.org; nicolas.ferre@microchip.com;
alexandre.belloni@bootlin.com; alexandre.torgue@st.com;
mcoquelin.stm32@gmail.com; ak@it-klinger.de; Ardelean, Alexandru
[off-list ref]
Subject: [PATCH v2 7/8] iio: core: simplify alloc alignment code

There was a recent discussion about this code:
  https://urldefense.com/v3/__https://lore.kernel.org/linux-
iio/20200322165317.0b1f0674@archlinux/__;!!A3Ni8CS0y2Y!pgdUSayJCfxMiE
quoted
quoted
w8Fpv0LkEZurCSkX0sEcLnXeDSCLmhpu1xont6-vBQj3ZbCw$

This looks like a good time to rework this, since any issues about it
should pop-up under testing, because the iio_dev is having a bit of an
overhaul and stuff being moved to iio_dev_priv.

Signed-off-by: Alexandru Ardelean <redacted>
---
 drivers/iio/industrialio-core.c | 10 +++-------
 1 file changed, 3 insertions(+), 7 deletions(-)
diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-
core.c
index a1b29e0f8fd6..7671d36efae7 100644
--- a/drivers/iio/industrialio-core.c
+++ b/drivers/iio/industrialio-core.c
@@ -1514,13 +1514,9 @@ struct iio_dev *iio_device_alloc(int
sizeof_priv)
quoted
quoted
 	struct iio_dev *dev;
 	size_t alloc_size;

-	alloc_size = sizeof(struct iio_dev_opaque);
-	if (sizeof_priv) {
-		alloc_size = ALIGN(alloc_size, IIO_ALIGN);
-		alloc_size += sizeof_priv;
-	}
-	/* ensure 32-byte alignment of whole construct ? */
-	alloc_size += IIO_ALIGN - 1;
+	alloc_size = ALIGN(sizeof(struct iio_dev_opaque), IIO_ALIGN);
+	if (sizeof_priv)
+		alloc_size += ALIGN(sizeof_priv, IIO_ALIGN);
Do we actually need to do the `ALIGN` again? It seems to me that
`alloc_size
quoted
+= sizeof_priv`
would be enough or am I missing something obvious?
Well, it's not always clear what value 'sizeof_priv' has, and whether it is
provided already aligned.
The requirement is usually that this data be cacheline aligned.

So, sizeof(struct iio_dev_opaque) is aligned already a few lines above, but
the
private information should also be aligned [given that it's an unknown value
provided by the driver].
I think this is mostly important, if we need to do DMA access to buffers
allocated on the driver's state-struct, which is allocated here, and which is
usually provided as sizeof_priv.
Yes, AFAIU this is to guarantee that the priv struct will start at an address that is 
DMA safe (cacheline-aligned). Hence, if there is any data in 'priv' that needs to be DMA
safe, we are fine...

Well, I was also misreading the code. Still, I think it should look something like:

````
alloc_size = sizeof(struct iio_dev_opaque)
if (sizeof_priv)
	alloc_size += ALIGN(alloc_size, IIO_ALIGN);
````

If there is no priv, I think we don't need the padding bytes...

- Nuno Sá

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help