On Mon, Jul 09, 2018 at 03:54:09PM +0200, Peter Zijlstra wrote: > On Mon, Jul 09, 2018 at 04:45:50PM +0300, Alexey Brodkin wrote: > > diff --git a/drivers/base/devres.c b/drivers/base/devres.c > > index f98a097e73f2..d65327cb83c9 100644 > > --- a/drivers/base/devres.c > > +++ b/drivers/base/devres.c > > @@ -24,8 +24,12 @@ struct devres_node { > > > > struct devres { > > struct devres_node node; > > - /* -- 3 pointers */ > > - unsigned long long data[]; /* guarantee ull alignment */ > > + /* > > + * data[] must be 64 bit aligned even on 32 bit architectures > > + * because it might be accessed by instructions that require > > + * aligned memory arguments such as atomic64_t. > > + */ > > + u8 __aligned(8) data[]; > > }; > > From a quick reading in Documentation/driver-model/devres.txt this > devres muck is supposed to be device memory, right? It's for associating resources (e.g. memory allocations) with a struct device. e.g. you do: devm_kmalloc(dev, size, GFP_KERNEL); ... and that allocates sizeof(struct devres) + size, putting some accounting data into that devres, and returning a pointer to the remaining size bytes. The data[] thing is a hack to ensure that the structure is padded to 64-bit alignment, in case you'd done: struct foo { atomic64_t counter; } struct foo *f = devm_kmalloc(dev, sizeof(*f), GFP_KERNEL); Mark.