Re: [RFC][PATCH] net drivers and cache alignment
From: Daniel Jacobowitz <hidden>
Date: 2002-12-08 01:07:02
Also in:
lkml
On Sat, Dec 07, 2002 at 03:29:16PM -0800, Andrew Morton wrote:
Jeff Garzik wrote:quoted
David S. Miller wrote:quoted
Can't the cacheline_aligned attribute be applied to individual struct members? I remember doing this for thread_struct on sparc ages ago.Looks like it from the 2.4 processor.h code. Attached is cut #2. Thanks for all the near-instant feedback so far :) Andrew, does the attached still need padding on SMP?It needs padding _only_ on SMP. ____cacheline_aligned_in_smp. #define offsetof(t, m) ((int)(&((t *)0)->m)) struct foo { int a; int b __attribute__((__aligned__(1024))); int c; } foo; main() { printf("%d\n", sizeof(struct foo)); printf("%d\n", offsetof(struct foo, a)); printf("%d\n", offsetof(struct foo, b)); printf("%d\n", offsetof(struct foo, c)); } ./a.out 2048 0 1024 1028 So your patch will do what you want it to do. You should just tag the first member of a group with ____cacheline_aligned_in_smp, and keep an eye on things with offsetof(). Not sure why sizeof() returned 2048 though.
The structure contains an __aligned__(1024) item. Think about an array of 'struct foo' items. They have to be 2048 bytes or you won't align correctly. C allows for empty space in structure padding, but not in arrays, AFAIK. -- Daniel Jacobowitz MontaVista Software Debian GNU/Linux Developer