提交 c64df707 编写于 作者: Y Yinghai Lu 提交者: Ingo Molnar

x86: memtest bootparam

Signed-off-by: NYinghai Lu <yhlu.kernel@gmail.com>
Signed-off-by: NIngo Molnar <mingo@elte.hu>
上级 9b967106
......@@ -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.
......
......@@ -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)
......
......@@ -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;
......
......@@ -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.
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册