On Fri, 30 May 2008, Eric Dumazet wrote:Hum, maybe, but then we broke modules that might request up to PAGE_SIZE alignement for their percpu section,
+static DEFINE_PER_CPU(UNIT_TYPE, area[UNITS]);area[] is not guaranteed to be aligned on anything but 4 bytes.
If someone then needs to call cpu_alloc(8, GFP_KERNEL, 8), it might get an non
aligned result.
Either you should add an __attribute__((__aligned__(PAGE_SIZE))),
or take into account the real address of area[] in cpu_alloc() to avoid waste
of up to PAGE_SIZE bytes
per cpu.
I think cacheline aligning should be sufficient. People should not allocate large page aligned objects here.