I'm sorry if this is poorly worded, but I've done a memory test on one of my computers, and certain memory addresses have errors. This is the first time I've searched. If you need more information, then I can provide it.
If you look in
/etc/default/grub, you'll find a
GRUB_BADRAM= parameter where you can identify what bad memory locations there are.
# Uncomment to enable BadRAM filtering, modify to suit your needs # This works with Linux (no patch required) and with any kernel that obtains # the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...) #GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"
After setting the addresses, run
sudo update-grub to apply.
BADRAM setting in Grub2
The GRUB2 config file in Natty has a line for configuring kernel bad ram exclusions. So, I will assume that is the preferred way of mapping out a section of memory that is showing errors. The line I set was
The suggested way on every web site I could find was to set this was to run memtest86 and let it show you the BadRAM settings. memtest86 gave me a page of stuff I would have had to enter. I could see that all the addresses were in one 16K block, so I just wanted to map that 16K block out of action. Here is how I generated the correct entry.
The first parameter is easy. That is the base address of the bad memory. In my case, I could see that all the bad addresses were greater than 0x7DDF0000 and less than 0x7DDF4000. So, I took the beginning of the 16K block as my starting address.
The second parameter is a mask. You put 1s where the address range you want shares the same values and 0s where it will vary. This means you need to pick your address range such that only the low order bits vary. Looking at my address, the first part of the mask is easy. You want to start with 0xffff. For the next nibble, I will explain with bit maps. I want to range from 0000 to 0011. So, the mask for badram would be 1100 or a hex c. The last 3 nibbles need to be all 0s in the mask, since we want the entire range mapped out. So, we get a total result of 0xffffc000.
After setting this line in /etc/default/grub, I ran sudo update-grub and rebooted and my bad memory was no longer being used. No kernel patches are needed to map out bad memory using this method.
Of course, the best action plan would be to replace the defective RAM.
I found the easiest and most robust way for me is to add a kernel parameter
memtest=4 to my Grub config. This adds a couple of seconds to bootup where the kernel checks your ram and then marks them as bad for you \o/ (thank God as I'm not able to replace my ram in this Covid19 lockdown)
- sudo nano /etc/default/grub
- update this line:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash memtest=4"
- sudo update-grub
- optionally check that it is working by running
dmesgand see logs like this:
[ 5.043917] aaaaaaaaaaaaaaaa bad mem addr 0x0000000581a90000 - 0x0000000581a90010 reserved