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:
parent
9b967106da
commit
c64df70793
4 changed files with 56 additions and 12 deletions
|
@ -1147,6 +1147,11 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
or
|
or
|
||||||
memmap=0x10000$0x18690000
|
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
|
meye.*= [HW] Set MotionEye Camera parameters
|
||||||
See Documentation/video4linux/meye.txt.
|
See Documentation/video4linux/meye.txt.
|
||||||
|
|
||||||
|
|
|
@ -382,6 +382,35 @@ config PARAVIRT
|
||||||
|
|
||||||
endif
|
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
|
config ACPI_SRAT
|
||||||
def_bool y
|
def_bool y
|
||||||
depends on X86_32 && ACPI && NUMA && (X86_SUMMIT || X86_GENERICARCH)
|
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
|
* 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;
|
int i;
|
||||||
|
|
||||||
|
@ -254,17 +256,15 @@ unsigned long __init find_e820_area_size(unsigned long start, unsigned long *siz
|
||||||
continue;
|
continue;
|
||||||
addr = round_up(ei->addr, align);
|
addr = round_up(ei->addr, align);
|
||||||
ei_last = ei->addr + ei->size;
|
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)
|
if (addr < start)
|
||||||
addr = round_up(start, align);
|
addr = round_up(start, align);
|
||||||
// printk(KERN_DEBUG "find_e820_area_size : 0 [%lx, %lx]\n", addr, ei_last);
|
|
||||||
if (addr >= ei_last)
|
if (addr >= ei_last)
|
||||||
continue;
|
continue;
|
||||||
*sizep = ei_last - addr;
|
*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;
|
last = addr + *sizep;
|
||||||
// printk(KERN_DEBUG "find_e820_area_size : 1 [%lx, %lx]\n", addr, last);
|
|
||||||
if (last > ei_last)
|
if (last > ei_last)
|
||||||
continue;
|
continue;
|
||||||
return addr;
|
return addr;
|
||||||
|
|
|
@ -427,7 +427,10 @@ static void __init init_gbpages(void)
|
||||||
direct_gbpages = 0;
|
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 i;
|
||||||
unsigned long *start;
|
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)
|
static int __init parse_memtest(char *arg)
|
||||||
{
|
{
|
||||||
if (arg)
|
if (arg)
|
||||||
memtest_pattern = simple_strtoul(arg, NULL, 0) + 1;
|
memtest_pattern = simple_strtoul(arg, NULL, 0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -501,7 +505,9 @@ static void __init early_memtest(unsigned long start, unsigned long end)
|
||||||
unsigned long t_start, t_size;
|
unsigned long t_start, t_size;
|
||||||
unsigned pattern;
|
unsigned pattern;
|
||||||
|
|
||||||
if (memtest_pattern)
|
if (!memtest_pattern)
|
||||||
|
return;
|
||||||
|
|
||||||
printk(KERN_INFO "early_memtest: pattern num %d", memtest_pattern);
|
printk(KERN_INFO "early_memtest: pattern num %d", memtest_pattern);
|
||||||
for (pattern = 0; pattern < memtest_pattern; pattern++) {
|
for (pattern = 0; pattern < memtest_pattern; pattern++) {
|
||||||
t_start = start;
|
t_start = start;
|
||||||
|
@ -523,9 +529,13 @@ static void __init early_memtest(unsigned long start, unsigned long end)
|
||||||
t_start += t_size;
|
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.
|
* Setup the direct mapping of the physical memory at PAGE_OFFSET.
|
||||||
|
|
Loading…
Reference in a new issue