x86: memtest bootparam

Signed-off-by: Yinghai Lu <yhlu.kernel@gmail.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
Yinghai Lu 2008-03-21 18:56:19 -07:00 committed by Ingo Molnar
parent 9b967106da
commit c64df70793
4 changed files with 56 additions and 12 deletions

View file

@ -1147,6 +1147,11 @@ and is between 256 and 4096 characters. It is defined in the file
or
memmap=0x10000$0x18690000
memtest= [KNL,X86_64] Enable memtest
Format: <integer>
range: 0,4 : pattern number
default : 0 <disable>
meye.*= [HW] Set MotionEye Camera parameters
See Documentation/video4linux/meye.txt.

View file

@ -382,6 +382,35 @@ config PARAVIRT
endif
config MEMTEST_BOOTPARAM
bool "Memtest boot parameter"
depends on X86_64
default y
help
This option adds a kernel parameter 'memtest', which allows memtest
to be disabled at boot. If this option is selected, memtest
functionality can be disabled with memtest=0 on the kernel
command line. The purpose of this option is to allow a single
kernel image to be distributed with memtest built in, but not
necessarily enabled.
If you are unsure how to answer this question, answer Y.
config MEMTEST_BOOTPARAM_VALUE
int "Memtest boot parameter default value (0-4)"
depends on MEMTEST_BOOTPARAM
range 0 4
default 0
help
This option sets the default value for the kernel parameter
'memtest', which allows memtest to be disabled at boot. If this
option is set to 0 (zero), the memtest kernel parameter will
default to 0, disabling memtest at bootup. If this option is
set to 4, the memtest kernel parameter will default to 4,
enabling memtest at bootup, and use that as pattern number.
If you are unsure how to answer this question, answer 0.
config ACPI_SRAT
def_bool y
depends on X86_32 && ACPI && NUMA && (X86_SUMMIT || X86_GENERICARCH)

View file

@ -241,7 +241,9 @@ unsigned long __init find_e820_area(unsigned long start, unsigned long end,
/*
* Find next free range after *start
*/
unsigned long __init find_e820_area_size(unsigned long start, unsigned long *sizep, unsigned long align)
unsigned long __init find_e820_area_size(unsigned long start,
unsigned long *sizep,
unsigned long align)
{
int i;
@ -254,17 +256,15 @@ unsigned long __init find_e820_area_size(unsigned long start, unsigned long *siz
continue;
addr = round_up(ei->addr, align);
ei_last = ei->addr + ei->size;
// printk(KERN_DEBUG "find_e820_area_size : e820 %d [%llx, %lx]\n", i, ei->addr, ei_last);
if (addr < start)
addr = round_up(start, align);
// printk(KERN_DEBUG "find_e820_area_size : 0 [%lx, %lx]\n", addr, ei_last);
if (addr >= ei_last)
continue;
*sizep = ei_last - addr;
while (bad_addr_size(&addr, sizep, align) && addr+ *sizep <= ei_last)
while (bad_addr_size(&addr, sizep, align) &&
addr + *sizep <= ei_last)
;
last = addr + *sizep;
// printk(KERN_DEBUG "find_e820_area_size : 1 [%lx, %lx]\n", addr, last);
if (last > ei_last)
continue;
return addr;

View file

@ -427,7 +427,10 @@ static void __init init_gbpages(void)
direct_gbpages = 0;
}
static void __init memtest(unsigned long start_phys, unsigned long size, unsigned pattern)
#ifdef CONFIG_MEMTEST_BOOTPARAM
static void __init memtest(unsigned long start_phys, unsigned long size,
unsigned pattern)
{
unsigned long i;
unsigned long *start;
@ -486,11 +489,12 @@ static void __init memtest(unsigned long start_phys, unsigned long size, unsigne
}
static int __initdata memtest_pattern;
static int memtest_pattern __initdata = CONFIG_MEMTEST_BOOTPARAM_VALUE;
static int __init parse_memtest(char *arg)
{
if (arg)
memtest_pattern = simple_strtoul(arg, NULL, 0) + 1;
memtest_pattern = simple_strtoul(arg, NULL, 0);
return 0;
}
@ -501,8 +505,10 @@ static void __init early_memtest(unsigned long start, unsigned long end)
unsigned long t_start, t_size;
unsigned pattern;
if (memtest_pattern)
printk(KERN_INFO "early_memtest: pattern num %d", memtest_pattern);
if (!memtest_pattern)
return;
printk(KERN_INFO "early_memtest: pattern num %d", memtest_pattern);
for (pattern = 0; pattern < memtest_pattern; pattern++) {
t_start = start;
t_size = 0;
@ -523,9 +529,13 @@ static void __init early_memtest(unsigned long start, unsigned long end)
t_start += t_size;
}
}
if (memtest_pattern)
printk(KERN_CONT "\n");
printk(KERN_CONT "\n");
}
#else
static void __init early_memtest(unsigned long start, unsigned long end)
{
}
#endif
/*
* Setup the direct mapping of the physical memory at PAGE_OFFSET.