System RAM relocation to address higher than 4G
I have running 2.6.26. Linux on x86 system that has the following BIOS mappings:
BIOS-provided physical RAM map:
[ 0.000000] BIOS-e820: 0000000000000000 – 000000000009c000 (usable)
[ 0.000000] BIOS-e820: 000000000009c000 - 00000000000a0000 (reserved)
[ 0.000000] BIOS-e820: 00000000000e0000 - 0000000000100000 (reserved)
[ 0.000000] BIOS-e820: 0000000000100000 – 000000007d5d8000 (usable - system RAM)
[ 0.000000] BIOS-e820: 000000007d5d8000 – 000000007d5dfc00 (ACPI data)
[ 0.000000] BIOS-e820: 000000007d5dfc00 – 000000007d5e0000 (ACPI NVS)
[ 0.000000] BIOS-e820: 000000007d5e0000 – 000000007de00000 (reserved)
[ 0.000000] BIOS-e820: 00000000e0000000 – 00000000f0000000 (reserved)
[ 0.000000] BIOS-e820: 00000000fec00000 - 0000000100000000 (reserved)
Now, i have additional PCIe devices, which together require 2.5G address space, and since those device can operate only on 32-bit addresses, they require 2.5G address space in the range between 0 to 4G .
Therefore I need to move system RAM to the address space higher than 4G.
I tried to use mem and memmap=exactmap kernel boot options, setting the System RAM address at 0x100000000,but the kernel simply crushes during boot.
Is there is a way to tell kernel to load at address higher than 4G? Or is some hack needed after the MMU is configured, so that the page tables are translated to the addresses higher than 4G?