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.
 
 
 
 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)
 
 /*
  * 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;
 
                        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;
 
                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;
 
 }
 
-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;
 }
 
        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;
                        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.