Re: [PATCH] per-cpu areas for 2.5.3-pre6

Richard Henderson (rth@twiddle.net)
Wed, 30 Jan 2002 00:22:04 -0800


On Wed, Jan 30, 2002 at 01:00:26PM +1100, Rusty Russell wrote:
> +#define per_cpu(var, cpu) \
> +(*((__typeof__(&var))((void *)&var + per_cpu_offset(cpu))))

Have we already forgotten the ppc reloc flamefest? Better
written as

#define per_cpu(var, cpu) \
({ __typeof__(&(var)) __ptr; \
__asm__ ("" : "=g"(__ptr) \
: "0"((void *)&(var) + per_cpu_offset(cpu))); \
*__ptr; })

> +/* Created by linker magic */
> +extern char __per_cpu_start, __per_cpu_end;
[...]
> + per_cpu_size = ((&__per_cpu_end - &__per_cpu_start) + PAGE_SIZE-1)

Will fail on targets (e.g. alpha and mips) that have a notion of a
"small data area" that can be addressed with special relocs.

Better written as

extern char __per_cpu_start[], __per_cpu_end[];
per_cpu_size = (__per_cpu_end - __per_cpu_start) ...

r~
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/