Re: _proxy_pda still makes linking modules fail
From: Paul Mackerras
Date: Tue Mar 13 2007 - 05:05:17 EST
Rusty Russell writes:
> The ideal solution has always been to use __thread, but no architecture
> has yet managed it (I tried for i386, and it quickly caused unbearable
> pain). On x86-64 that uses "%fs" on x86-64, not "%gs" as the kernel
> does, but I might try that if I feel particularly masochistic soon...
There is a fundamental problem with using __thread, which is that gcc
assumes that the addresses of __thread variables are constant within
one thread, and that therefore it can cache the result of address
calculations. However, with preempt, threads in the kernel can't rely
on staying on one cpu, and therefore the addresses of per-cpu
variables can change. There appears to be no way to tell gcc to drop
all cached __thread variable address calculations at a given point
(e.g. when enabling or disabling preemption). That is basically why I
gave up on using __thread for per-cpu variables on powerpc.
We could use __thread for per-task variables quite naturally. There
doesn't seem to be much point, though, since we already have a way to
do per-task variables - it's called struct task_struct. :-/
Paul.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/