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

From: Richard Henderson (rth@twiddle.net)
Date: Wed Jan 30 2002 - 03:22:04 EST


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/



This archive was generated by hypermail 2b29 : Thu Jan 31 2002 - 21:01:14 EST