Out of MTRRs at boot

Thanks to harrymc, I discovered that you can actually rewrite /proc/mtrr. I put the following in /etc/rc.local, rebooted, and my MTRR table was correct.

echo "disable=7" > /proc/mtrr
echo "disable=6" > /proc/mtrr
echo "disable=5" > /proc/mtrr
echo "disable=4" > /proc/mtrr
echo "disable=3" > /proc/mtrr
echo "disable=2" > /proc/mtrr
echo "disable=1" > /proc/mtrr
echo "disable=0" > /proc/mtrr
echo "base=0x000000000 size=0x40000000 type=write-back" > /proc/mtrr
echo "base=0x03f500000 size=0x00100000 type=uncachable" > /proc/mtrr
echo "base=0x03f600000 size=0x00200000 type=uncachable" > /proc/mtrr
echo "base=0x03f800000 size=0x00800000 type=write-back" > /proc/mtrr
echo "base=0x040000000 size=0x10000000 type=write-combining" > /proc/mtrr

Also, after talking to a few people that are involved with kernel development, I have been informed that CONFIG_MTRR_SANITIZER has been broken for the past few kernels, hence why it worked for others in the past.


Quoting from the answer to your own question on Arch Linux forums :

From the dmesg, it is easy to see that it runs out of mtrr during i915/drm graphics initialization. I have no specific experience with this problem, but here's my suggestions:

  1. Boot with 'mtrr_spare_reg_nr=2' and you may also need 'enable_mtrr_cleanup=1 (add to kernel line in /boot/grub/menu.lst).
  2. Try kernel 2.6.38 from [testing].

From the look of your /proc/mtrr, you ATOM CPU has only 8 MTRRs, and they are truly all used up. However, the way memory is broken up into such small fragments is puzzling. In general, such a problem may be caused by :

  • The BIOS - look for parameters that cause memory allocation for devices.
  • The graphics card which might have shared memory with the CPU and which the BIOS might cause to be allocated brutally in the middle of the memory.
  • The graphics card driver - search for the latest version.
  • A misconfigured kernel.

The greatest puzzle I can see is that /proc/mtrr says you have 8GB. But in /proc/cpuinfo the 'flags' entry doesn't contain 'lm', which the Arch64 FAQ says is required for the processor to be x86_64 compatible. The FAQ further says :

Note that Arch32 does not support more than 3GB of RAM by default: you have to turn to Arch64 if you have more.

So it seems that you have Arch32 and 8GB of RAM, which the documentation contradicts.
Could you maybe throw some light on this puzzle ?