Okay, this is getting somewhat annoying. Several people now have missed
the point.
Noone has talked about the actual placement of the percpu segment data.
Using RIP-based references, however, are *cheaper* than using absolute
references. For RIP-based references to be valid, then the *offsets*
need to be in the range [-2 GB + CONFIG_PHYSICAL_START ...
CONFIG_PHYSICAL_START). This is similar to the constraint on absolute
refereces, where the *offsets* have to be in the range [-2 GB, 2 GB).
None of this affects the absolute positioning of the data. The final
address are determined by:
fs_base + rip + offset
or
fs_base + offset
... respectively. fs_base is an arbitrary 64-bit number; rip (in the
kernel) is in the range [-2 GB + CONFIG_PHYSICAL_START, 0), and offset
is in the range [-2 GB, 2 GB).
(The high end of the rip range above is slightly too wide.)
-hpa
--