Jeremy Fitzhardinge <jeremy@xxxxxxxx> writes:
Which means that my idea of using the technique we use on x86_32 will notwork.
No, the compiler memory model we use guarantees that everything will be within
2G of each other. The linker will spew loudly if that's not the case.
The per cpu area is at least theoretically dynamically allocated. And we
really want to put it in cpu local memory. Which means on any reasonable
NUMA machine the per cpu areas should be all over the box.
So there is no guarantee that with an arbitrary 64bit address in %gs of anything.
Grr. Except you are correct. We have to guarantee that the offsets we have
chosen at compile time still work. And we know all of the compile time offsets
will be in the -2G range. So they are all 32bit numbers. Negative 32bit
numbers to be sure. That trivially leaves us with everything working except
the nasty hard coded decimal 40.