On Fri, Aug 21, 2020 at 10:35 AM Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx> wrote: > > On Thu, Aug 20, 2020 at 08:51:08PM +0200, Bartosz Golaszewski wrote: > > From: Bartosz Golaszewski <bgolaszewski@xxxxxxxxxxxx> > > > > Implement the managed variant of krealloc(). This function works with > > all memory allocated by devm_kmalloc() (or devres functions using it > > implicitly like devm_kmemdup(), devm_kstrdup() etc.). > > > > Managed realloc'ed chunks can be manually released with devm_kfree(). > > > > Signed-off-by: Bartosz Golaszewski <bgolaszewski@xxxxxxxxxxxx> > > Reviewed-by: Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx> > > ... > > > +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); > > +} > > I'm fine with above, but here is a side note, perhaps > > offsetof(struct devres, data) > > will be more practical (no duplication of alignment and hence slightly better > maintenance)? (Note, I didn't check if it provides the correct result) > Hi Andy, 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. > Another side note: do we have existing users of these helpers? > Which ones? Because I assume you're not referring to the ones I'm adding in this patch. :) Bart