Commit c64df707 authored by Yinghai Lu's avatar Yinghai Lu Committed by Ingo Molnar
Browse files

x86: memtest bootparam



Signed-off-by: default avatarYinghai Lu <yhlu.kernel@gmail.com>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent 9b967106
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -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.

+29 −0
Original line number Diff line number Diff line
@@ -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)
+5 −5
Original line number Diff line number Diff line
@@ -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;
+17 −7
Original line number Diff line number Diff line
@@ -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,7 +505,9 @@ static void __init early_memtest(unsigned long start, unsigned long end)
	unsigned long t_start, t_size;
	unsigned pattern;

	if (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;
@@ -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");
}
#else
static void __init early_memtest(unsigned long start, unsigned long end)
{
}
#endif

/*
 * Setup the direct mapping of the physical memory at PAGE_OFFSET.