All of lore.kernel.org
 help / color / mirror / Atom feed
From: Bartosz Golaszewski <brgl@bgdev.pl>
To: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Cc: Jonathan Cameron <jic23@kernel.org>,
	Hartmut Knaack <knaack.h@gmx.de>,
	Lars-Peter Clausen <lars@metafoo.de>,
	Peter Meerwald-Stadler <pmeerw@pmeerw.net>,
	Michal Simek <michal.simek@xilinx.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Guenter Roeck <linux@roeck-us.net>,
	linux-iio <linux-iio@vger.kernel.org>,
	Linux ARM <linux-arm-kernel@lists.infradead.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Bartosz Golaszewski <bgolaszewski@baylibre.com>
Subject: Re: [PATCH v8 1/3] devres: provide devm_krealloc()
Date: Fri, 21 Aug 2020 18:00:02 +0200	[thread overview]
Message-ID: <CAMRc=MfLkBRKu9ofSUGH=k3hxiJk-g=MMvab2awcsmeyF4RAKg@mail.gmail.com> (raw)
In-Reply-To: <20200821110403.GP1891694@smile.fi.intel.com>

On Fri, Aug 21, 2020 at 1:04 PM Andy Shevchenko
<andriy.shevchenko@linux.intel.com> wrote:
>
> On Fri, Aug 21, 2020 at 01:51:19PM +0300, Andy Shevchenko wrote:
> > On Fri, Aug 21, 2020 at 10:59:19AM +0200, Bartosz Golaszewski wrote:
> > > On Fri, Aug 21, 2020 at 10:35 AM Andy Shevchenko
> > > <andriy.shevchenko@linux.intel.com> wrote:
> > > > On Thu, Aug 20, 2020 at 08:51:08PM +0200, Bartosz Golaszewski wrote:
>
> ...
>
> > > > > +static struct devres *to_devres(void *data)
> > > > > +{
> > > > > +     return data - ALIGN(sizeof(struct devres), ARCH_KMALLOC_MINALIGN);
> > > > > +}
> > > > > +
> > > > > +static size_t devres_data_size(size_t total_size)
> > > > > +{
> > > > > +     return total_size - ALIGN(sizeof(struct devres), ARCH_KMALLOC_MINALIGN);
> > > > > +}
>
> > > The data pointer in struct devres is defined as:
> > >
> > >     u8 __aligned(ARCH_KMALLOC_MINALIGN) data[];
> > >
> > > And this value (assigned the value of ARCH_DMA_MINALIGN) varies from
> > > one arch to another. I wasn't really sure if offsetof() would work for
> > > every case so I went with something very explicit.
> >
> > I have checked with a small program simulating to_devres() with your variant,
> > offsetof() and container_of().
> >
> > The result is this: if MINALIGN < sizeof(long) and since struct is unpacked the
> > offsetof(), and thus container_of(), gives correct result, while ALIGN()
> > approach mistakenly moves pointer too back.
>
> ...
>
> > I think you need to change this to use container_of() and offsetof().
>
> To be clear, there is probably no real problem, except unlikely possible
> MINALIGN=4 on 64-bit arch, but for sake of the correctness.
>

Thanks for taking the time to check it. I'll switch to container_of()
for (hopefully) the last iteration.

Bart

WARNING: multiple messages have this Message-ID (diff)
From: Bartosz Golaszewski <brgl@bgdev.pl>
To: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Cc: Linux ARM <linux-arm-kernel@lists.infradead.org>,
	Lars-Peter Clausen <lars@metafoo.de>,
	linux-iio <linux-iio@vger.kernel.org>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Michal Simek <michal.simek@xilinx.com>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Bartosz Golaszewski <bgolaszewski@baylibre.com>,
	Guenter Roeck <linux@roeck-us.net>,
	Peter Meerwald-Stadler <pmeerw@pmeerw.net>,
	Hartmut Knaack <knaack.h@gmx.de>,
	Jonathan Cameron <jic23@kernel.org>
Subject: Re: [PATCH v8 1/3] devres: provide devm_krealloc()
Date: Fri, 21 Aug 2020 18:00:02 +0200	[thread overview]
Message-ID: <CAMRc=MfLkBRKu9ofSUGH=k3hxiJk-g=MMvab2awcsmeyF4RAKg@mail.gmail.com> (raw)
In-Reply-To: <20200821110403.GP1891694@smile.fi.intel.com>

On Fri, Aug 21, 2020 at 1:04 PM Andy Shevchenko
<andriy.shevchenko@linux.intel.com> wrote:
>
> On Fri, Aug 21, 2020 at 01:51:19PM +0300, Andy Shevchenko wrote:
> > On Fri, Aug 21, 2020 at 10:59:19AM +0200, Bartosz Golaszewski wrote:
> > > On Fri, Aug 21, 2020 at 10:35 AM Andy Shevchenko
> > > <andriy.shevchenko@linux.intel.com> wrote:
> > > > On Thu, Aug 20, 2020 at 08:51:08PM +0200, Bartosz Golaszewski wrote:
>
> ...
>
> > > > > +static struct devres *to_devres(void *data)
> > > > > +{
> > > > > +     return data - ALIGN(sizeof(struct devres), ARCH_KMALLOC_MINALIGN);
> > > > > +}
> > > > > +
> > > > > +static size_t devres_data_size(size_t total_size)
> > > > > +{
> > > > > +     return total_size - ALIGN(sizeof(struct devres), ARCH_KMALLOC_MINALIGN);
> > > > > +}
>
> > > The data pointer in struct devres is defined as:
> > >
> > >     u8 __aligned(ARCH_KMALLOC_MINALIGN) data[];
> > >
> > > And this value (assigned the value of ARCH_DMA_MINALIGN) varies from
> > > one arch to another. I wasn't really sure if offsetof() would work for
> > > every case so I went with something very explicit.
> >
> > I have checked with a small program simulating to_devres() with your variant,
> > offsetof() and container_of().
> >
> > The result is this: if MINALIGN < sizeof(long) and since struct is unpacked the
> > offsetof(), and thus container_of(), gives correct result, while ALIGN()
> > approach mistakenly moves pointer too back.
>
> ...
>
> > I think you need to change this to use container_of() and offsetof().
>
> To be clear, there is probably no real problem, except unlikely possible
> MINALIGN=4 on 64-bit arch, but for sake of the correctness.
>

Thanks for taking the time to check it. I'll switch to container_of()
for (hopefully) the last iteration.

Bart

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2020-08-21 16:00 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-08-20 18:51 [PATCH v8 0/3] devres: provide and use devm_krealloc() Bartosz Golaszewski
2020-08-20 18:51 ` Bartosz Golaszewski
2020-08-20 18:51 ` [PATCH v8 1/3] devres: provide devm_krealloc() Bartosz Golaszewski
2020-08-20 18:51   ` Bartosz Golaszewski
2020-08-21  8:15   ` Andy Shevchenko
2020-08-21  8:15     ` Andy Shevchenko
2020-08-21  8:18     ` Andy Shevchenko
2020-08-21  8:18       ` Andy Shevchenko
2020-08-21  8:59     ` Bartosz Golaszewski
2020-08-21  8:59       ` Bartosz Golaszewski
2020-08-21 10:51       ` Andy Shevchenko
2020-08-21 10:51         ` Andy Shevchenko
2020-08-21 11:04         ` Andy Shevchenko
2020-08-21 11:04           ` Andy Shevchenko
2020-08-21 16:00           ` Bartosz Golaszewski [this message]
2020-08-21 16:00             ` Bartosz Golaszewski
2020-08-20 18:51 ` [PATCH v8 2/3] hwmon: pmbus: use more devres helpers Bartosz Golaszewski
2020-08-20 18:51   ` Bartosz Golaszewski
2020-08-20 18:51 ` [PATCH v8 3/3] iio: adc: xilinx-xadc: use devm_krealloc() Bartosz Golaszewski
2020-08-20 18:51   ` Bartosz Golaszewski

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='CAMRc=MfLkBRKu9ofSUGH=k3hxiJk-g=MMvab2awcsmeyF4RAKg@mail.gmail.com' \
    --to=brgl@bgdev.pl \
    --cc=andriy.shevchenko@linux.intel.com \
    --cc=bgolaszewski@baylibre.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=jic23@kernel.org \
    --cc=knaack.h@gmx.de \
    --cc=lars@metafoo.de \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-iio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@roeck-us.net \
    --cc=michal.simek@xilinx.com \
    --cc=pmeerw@pmeerw.net \
    /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.