From: Vlastimil Babka > Sent: 29 September 2022 14:01 > > On 9/29/22 13:53, David Laight wrote: > >> -static void rcu_free_slab(struct rcu_head *h) > >> +/* > >> + * rcu_free_slab() must be __aligned(4) because its address is saved > >> + * in the rcu_head field, which coincides with page->mapping, which > >> + * causes trouble if compaction mistakes it for PAGE_MAPPING_MOVABLE. > >> + */ > >> +__aligned(4) static void rcu_free_slab(struct rcu_head *h) > >> { > >> struct slab *slab = container_of(h, struct slab, rcu_head); > >> > > > > Isn't that going to cause grief with options that align > > functions on 16/32byte boundaries when adding space for > > 'other stuff'? > > How is that done exactly? Also having higher alignment (16/32) is not in > conflict with asking for 4? It depends on which one is actually used. The __aligned(4) might take precedence over the default alignment. David - Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK Registration No: 1397386 (Wales)