The rationale for the 46 bits is that the kernel needs roughly 4x as
much virtual space as physical space and the virtual space is limited
to 48bits.
To be exact 47 bits is always user space and the 47 bits remaining
for the kernel are split into half, with one half for the direct mapping
and the other half for random mappings. With some pushing you could
extend it to 46.5 bits or so, but beyond that you'll be in trouble.
It's not arbitrary at all.
-Andi
--