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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, 2020-05-15 at 07:12 +0000, Sa, Nuno wrote:
> Hey Alex,
> 
> Just a small question...
> 
> > From: linux-iio-owner@xxxxxxxxxxxxxxx <linux-iio-owner@xxxxxxxxxxxxxxx>
> > On Behalf Of Alexandru Ardelean
> > Sent: Donnerstag, 14. Mai 2020 15:17
> > To: linux-iio@xxxxxxxxxxxxxxx; linux-arm-kernel@xxxxxxxxxxxxxxxxxxx; linux-
> > stm32@xxxxxxxxxxxxxxxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx
> > Cc: ludovic.desroches@xxxxxxxxxxxxx; eugen.hristev@xxxxxxxxxxxxx;
> > jic23@xxxxxxxxxx; nicolas.ferre@xxxxxxxxxxxxx;
> > alexandre.belloni@xxxxxxxxxxx; alexandre.torgue@xxxxxx;
> > mcoquelin.stm32@xxxxxxxxx; ak@xxxxxxxxxxxxx; Ardelean, Alexandru
> > <alexandru.Ardelean@xxxxxxxxxx>
> > 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
> > 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 <alexandru.ardelean@xxxxxxxxxx>
> > ---
> >  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)
> >  	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
> += 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.

Tbh, the discussions around this alignment/cacheline-alignment are a bit fuzzy
to me. I haven't run into any of these complicated issues.

> 
> - Nuno Sá
> 




[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Input]     [Linux Kernel]     [Linux SCSI]     [X.org]

  Powered by Linux