On Thu, Apr 23, 2020 at 09:40:01PM +0100, Lee Jones wrote: > From: Alexey Brodkin <alexey.brodkin@xxxxxxxxxxxx> > > [ Upstream commit a66d972465d15b1d89281258805eb8b47d66bd36 ] > > Initially we bumped into problem with 32-bit aligned atomic64_t > on ARC, see [1]. And then during quite lengthly discussion Peter Z. > mentioned ARCH_KMALLOC_MINALIGN which IMHO makes perfect sense. > If allocation is done by plain kmalloc() obtained buffer will be > ARCH_KMALLOC_MINALIGN aligned and then why buffer obtained via > devm_kmalloc() should have any other alignment? > > This way we at least get the same behavior for both types of > allocation. > > [1] http://lists.infradead.org/pipermail/linux-snps-arc/2018-July/004009.html > [2] http://lists.infradead.org/pipermail/linux-snps-arc/2018-July/004036.html > > Signed-off-by: Alexey Brodkin <abrodkin@xxxxxxxxxxxx> > Cc: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> > Cc: Geert Uytterhoeven <geert@xxxxxxxxxxxxxx> > Cc: David Laight <David.Laight@xxxxxxxxxx> > Cc: Peter Zijlstra <peterz@xxxxxxxxxxxxx> > Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx> > Cc: Vineet Gupta <vgupta@xxxxxxxxxxxx> > Cc: Will Deacon <will.deacon@xxxxxxx> > Cc: Greg KH <greg@xxxxxxxxx> > Cc: <stable@xxxxxxxxxxxxxxx> # 4.8+ > Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> > Signed-off-by: Lee Jones <lee.jones@xxxxxxxxxx> > --- > drivers/base/devres.c | 10 ++++++++-- > 1 file changed, 8 insertions(+), 2 deletions(-) > > diff --git a/drivers/base/devres.c b/drivers/base/devres.c > index 8fc654f0807bf..9763325a9c944 100644 > --- a/drivers/base/devres.c > +++ b/drivers/base/devres.c > @@ -24,8 +24,14 @@ struct devres_node { > > struct devres { > struct devres_node node; > - /* -- 3 pointers */ > - unsigned long long data[]; /* guarantee ull alignment */ > + /* > + * Some archs want to perform DMA into kmalloc caches > + * and need a guaranteed alignment larger than > + * the alignment of a 64-bit integer. > + * Thus we use ARCH_KMALLOC_MINALIGN here and get exactly the same > + * buffer alignment as if it was allocated by plain kmalloc(). > + */ > + u8 __aligned(ARCH_KMALLOC_MINALIGN) data[]; > }; > > struct devres_group { > -- > 2.25.1 > I don't want to apply this to older kernels as it could cause extra memory usage for no good reason. I have no idea why a non ARC system would want it :( greg k-h