linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/6] make memtest a generic kernel feature
@ 2015-03-09 10:27 Vladimir Murzin
  2015-03-09 10:27 ` [PATCH 1/6] mm: move memtest under /mm Vladimir Murzin
                   ` (6 more replies)
  0 siblings, 7 replies; 10+ messages in thread
From: Vladimir Murzin @ 2015-03-09 10:27 UTC (permalink / raw)
  To: linux-kernel, linux-mm, linux-arch, x86, linux-arm-kernel
  Cc: tglx, mingo, hpa, akpm, lauraa, catalin.marinas, will.deacon,
	linux, arnd, mark.rutland, ard.biesheuvel, baruch, rdunlap

Hi,

Memtest is a simple feature which fills the memory with a given set of
patterns and validates memory contents, if bad memory regions is detected it
reserves them via memblock API. Since memblock API is widely used by other
architectures this feature can be enabled outside of x86 world.

This patch set promotes memtest to live under generic mm umbrella and enables
memtest feature for arm/arm64.

It was reported that this patch set was useful for tracking down an issue with
some errant DMA on an arm64 platform.

Since it touches x86 and mm bits it'd be great to get ACK/NAK for these bits.

Changelog:

    RFC -> v1
        - updated kernel-parameters.txt for memtest entry
        - updated number of test patterns in Kconfig menu
        - added Acked/Tested tags for arm64 bits
        - rebased on v4.0-rc3

Vladimir Murzin (6):
  mm: move memtest under /mm
  memtest: use phys_addr_t for physical addresses
  arm64: add support for memtest
  arm: add support for memtest
  Kconfig: memtest: update number of test patterns up to 17
  Documentation: update arch list in the 'memtest' entry

 Documentation/kernel-parameters.txt |    2 +-
 arch/arm/mm/init.c                  |    3 +
 arch/arm64/mm/init.c                |    2 +
 arch/x86/Kconfig                    |   11 ----
 arch/x86/include/asm/e820.h         |    8 ---
 arch/x86/mm/Makefile                |    2 -
 arch/x86/mm/memtest.c               |  118 -----------------------------------
 include/linux/memblock.h            |    8 +++
 lib/Kconfig.debug                   |   11 ++++
 mm/Makefile                         |    1 +
 mm/memtest.c                        |  118 +++++++++++++++++++++++++++++++++++
 11 files changed, 144 insertions(+), 140 deletions(-)
 delete mode 100644 arch/x86/mm/memtest.c
 create mode 100644 mm/memtest.c

-- 
1.7.9.5



^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH 1/6] mm: move memtest under /mm
  2015-03-09 10:27 [PATCH 0/6] make memtest a generic kernel feature Vladimir Murzin
@ 2015-03-09 10:27 ` Vladimir Murzin
  2015-03-09 10:27 ` [PATCH 2/6] memtest: use phys_addr_t for physical addresses Vladimir Murzin
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 10+ messages in thread
From: Vladimir Murzin @ 2015-03-09 10:27 UTC (permalink / raw)
  To: linux-kernel, linux-mm, linux-arch, x86, linux-arm-kernel
  Cc: tglx, mingo, hpa, akpm, lauraa, catalin.marinas, will.deacon,
	linux, arnd, mark.rutland, ard.biesheuvel, baruch, rdunlap

There is nothing platform dependent in the core memtest code, so other platform
might benefit of this feature too.

Signed-off-by: Vladimir Murzin <vladimir.murzin@arm.com>
Acked-by: Will Deacon <will.deacon@arm.com>
Tested-by: Mark Rutland <mark.rutland@arm.com>
---
 arch/x86/Kconfig            |   11 ----
 arch/x86/include/asm/e820.h |    8 ---
 arch/x86/mm/Makefile        |    2 -
 arch/x86/mm/memtest.c       |  118 -------------------------------------------
 include/linux/memblock.h    |    8 +++
 lib/Kconfig.debug           |   11 ++++
 mm/Makefile                 |    1 +
 mm/memtest.c                |  118 +++++++++++++++++++++++++++++++++++++++++++
 8 files changed, 138 insertions(+), 139 deletions(-)
 delete mode 100644 arch/x86/mm/memtest.c
 create mode 100644 mm/memtest.c

diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index b7d31ca..d16e510 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -716,17 +716,6 @@ endif #HYPERVISOR_GUEST
 config NO_BOOTMEM
 	def_bool y
 
-config MEMTEST
-	bool "Memtest"
-	---help---
-	  This option adds a kernel parameter 'memtest', which allows memtest
-	  to be set.
-	        memtest=0, mean disabled; -- default
-	        memtest=1, mean do 1 test pattern;
-	        ...
-	        memtest=4, mean do 4 test patterns.
-	  If you are unsure how to answer this question, answer N.
-
 source "arch/x86/Kconfig.cpu"
 
 config HPET_TIMER
diff --git a/arch/x86/include/asm/e820.h b/arch/x86/include/asm/e820.h
index 779c2ef..3ab0537 100644
--- a/arch/x86/include/asm/e820.h
+++ b/arch/x86/include/asm/e820.h
@@ -40,14 +40,6 @@ static inline void e820_mark_nosave_regions(unsigned long limit_pfn)
 }
 #endif
 
-#ifdef CONFIG_MEMTEST
-extern void early_memtest(unsigned long start, unsigned long end);
-#else
-static inline void early_memtest(unsigned long start, unsigned long end)
-{
-}
-#endif
-
 extern unsigned long e820_end_of_ram_pfn(void);
 extern unsigned long e820_end_of_low_ram_pfn(void);
 extern u64 early_reserve_e820(u64 sizet, u64 align);
diff --git a/arch/x86/mm/Makefile b/arch/x86/mm/Makefile
index c4cc740..a482d10 100644
--- a/arch/x86/mm/Makefile
+++ b/arch/x86/mm/Makefile
@@ -32,6 +32,4 @@ obj-$(CONFIG_AMD_NUMA)		+= amdtopology.o
 obj-$(CONFIG_ACPI_NUMA)		+= srat.o
 obj-$(CONFIG_NUMA_EMU)		+= numa_emulation.o
 
-obj-$(CONFIG_MEMTEST)		+= memtest.o
-
 obj-$(CONFIG_X86_INTEL_MPX)	+= mpx.o
diff --git a/arch/x86/mm/memtest.c b/arch/x86/mm/memtest.c
deleted file mode 100644
index 1e9da79..0000000
--- a/arch/x86/mm/memtest.c
+++ /dev/null
@@ -1,118 +0,0 @@
-#include <linux/kernel.h>
-#include <linux/errno.h>
-#include <linux/string.h>
-#include <linux/types.h>
-#include <linux/mm.h>
-#include <linux/smp.h>
-#include <linux/init.h>
-#include <linux/pfn.h>
-#include <linux/memblock.h>
-
-static u64 patterns[] __initdata = {
-	/* The first entry has to be 0 to leave memtest with zeroed memory */
-	0,
-	0xffffffffffffffffULL,
-	0x5555555555555555ULL,
-	0xaaaaaaaaaaaaaaaaULL,
-	0x1111111111111111ULL,
-	0x2222222222222222ULL,
-	0x4444444444444444ULL,
-	0x8888888888888888ULL,
-	0x3333333333333333ULL,
-	0x6666666666666666ULL,
-	0x9999999999999999ULL,
-	0xccccccccccccccccULL,
-	0x7777777777777777ULL,
-	0xbbbbbbbbbbbbbbbbULL,
-	0xddddddddddddddddULL,
-	0xeeeeeeeeeeeeeeeeULL,
-	0x7a6c7258554e494cULL, /* yeah ;-) */
-};
-
-static void __init reserve_bad_mem(u64 pattern, u64 start_bad, u64 end_bad)
-{
-	printk(KERN_INFO "  %016llx bad mem addr %010llx - %010llx reserved\n",
-	       (unsigned long long) pattern,
-	       (unsigned long long) start_bad,
-	       (unsigned long long) end_bad);
-	memblock_reserve(start_bad, end_bad - start_bad);
-}
-
-static void __init memtest(u64 pattern, u64 start_phys, u64 size)
-{
-	u64 *p, *start, *end;
-	u64 start_bad, last_bad;
-	u64 start_phys_aligned;
-	const size_t incr = sizeof(pattern);
-
-	start_phys_aligned = ALIGN(start_phys, incr);
-	start = __va(start_phys_aligned);
-	end = start + (size - (start_phys_aligned - start_phys)) / incr;
-	start_bad = 0;
-	last_bad = 0;
-
-	for (p = start; p < end; p++)
-		*p = pattern;
-
-	for (p = start; p < end; p++, start_phys_aligned += incr) {
-		if (*p == pattern)
-			continue;
-		if (start_phys_aligned == last_bad + incr) {
-			last_bad += incr;
-			continue;
-		}
-		if (start_bad)
-			reserve_bad_mem(pattern, start_bad, last_bad + incr);
-		start_bad = last_bad = start_phys_aligned;
-	}
-	if (start_bad)
-		reserve_bad_mem(pattern, start_bad, last_bad + incr);
-}
-
-static void __init do_one_pass(u64 pattern, u64 start, u64 end)
-{
-	u64 i;
-	phys_addr_t this_start, this_end;
-
-	for_each_free_mem_range(i, NUMA_NO_NODE, &this_start, &this_end, NULL) {
-		this_start = clamp_t(phys_addr_t, this_start, start, end);
-		this_end = clamp_t(phys_addr_t, this_end, start, end);
-		if (this_start < this_end) {
-			printk(KERN_INFO "  %010llx - %010llx pattern %016llx\n",
-			       (unsigned long long)this_start,
-			       (unsigned long long)this_end,
-			       (unsigned long long)cpu_to_be64(pattern));
-			memtest(pattern, this_start, this_end - this_start);
-		}
-	}
-}
-
-/* default is disabled */
-static int memtest_pattern __initdata;
-
-static int __init parse_memtest(char *arg)
-{
-	if (arg)
-		memtest_pattern = simple_strtoul(arg, NULL, 0);
-	else
-		memtest_pattern = ARRAY_SIZE(patterns);
-
-	return 0;
-}
-
-early_param("memtest", parse_memtest);
-
-void __init early_memtest(unsigned long start, unsigned long end)
-{
-	unsigned int i;
-	unsigned int idx = 0;
-
-	if (!memtest_pattern)
-		return;
-
-	printk(KERN_INFO "early_memtest: # of tests: %d\n", memtest_pattern);
-	for (i = memtest_pattern-1; i < UINT_MAX; --i) {
-		idx = i % ARRAY_SIZE(patterns);
-		do_one_pass(patterns[idx], start, end);
-	}
-}
diff --git a/include/linux/memblock.h b/include/linux/memblock.h
index e8cc453..6724cb0 100644
--- a/include/linux/memblock.h
+++ b/include/linux/memblock.h
@@ -365,6 +365,14 @@ static inline unsigned long memblock_region_reserved_end_pfn(const struct memblo
 #define __initdata_memblock
 #endif
 
+#ifdef CONFIG_MEMTEST
+extern void early_memtest(unsigned long start, unsigned long end);
+#else
+static inline void early_memtest(unsigned long start, unsigned long end)
+{
+}
+#endif
+
 #else
 static inline phys_addr_t memblock_alloc(phys_addr_t size, phys_addr_t align)
 {
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
index c5cefb3..8eb064fd 100644
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -1732,6 +1732,17 @@ config TEST_UDELAY
 
 	  If unsure, say N.
 
+config MEMTEST
+	bool "Memtest"
+	---help---
+	  This option adds a kernel parameter 'memtest', which allows memtest
+	  to be set.
+	        memtest=0, mean disabled; -- default
+	        memtest=1, mean do 1 test pattern;
+	        ...
+	        memtest=4, mean do 4 test patterns.
+	  If you are unsure how to answer this question, answer N.
+
 source "samples/Kconfig"
 
 source "lib/Kconfig.kgdb"
diff --git a/mm/Makefile b/mm/Makefile
index 3c1caa2..e925708 100644
--- a/mm/Makefile
+++ b/mm/Makefile
@@ -76,3 +76,4 @@ obj-$(CONFIG_GENERIC_EARLY_IOREMAP) += early_ioremap.o
 obj-$(CONFIG_CMA)	+= cma.o
 obj-$(CONFIG_MEMORY_BALLOON) += balloon_compaction.o
 obj-$(CONFIG_PAGE_EXTENSION) += page_ext.o
+obj-$(CONFIG_MEMTEST)		+= memtest.o
diff --git a/mm/memtest.c b/mm/memtest.c
new file mode 100644
index 0000000..1e9da79
--- /dev/null
+++ b/mm/memtest.c
@@ -0,0 +1,118 @@
+#include <linux/kernel.h>
+#include <linux/errno.h>
+#include <linux/string.h>
+#include <linux/types.h>
+#include <linux/mm.h>
+#include <linux/smp.h>
+#include <linux/init.h>
+#include <linux/pfn.h>
+#include <linux/memblock.h>
+
+static u64 patterns[] __initdata = {
+	/* The first entry has to be 0 to leave memtest with zeroed memory */
+	0,
+	0xffffffffffffffffULL,
+	0x5555555555555555ULL,
+	0xaaaaaaaaaaaaaaaaULL,
+	0x1111111111111111ULL,
+	0x2222222222222222ULL,
+	0x4444444444444444ULL,
+	0x8888888888888888ULL,
+	0x3333333333333333ULL,
+	0x6666666666666666ULL,
+	0x9999999999999999ULL,
+	0xccccccccccccccccULL,
+	0x7777777777777777ULL,
+	0xbbbbbbbbbbbbbbbbULL,
+	0xddddddddddddddddULL,
+	0xeeeeeeeeeeeeeeeeULL,
+	0x7a6c7258554e494cULL, /* yeah ;-) */
+};
+
+static void __init reserve_bad_mem(u64 pattern, u64 start_bad, u64 end_bad)
+{
+	printk(KERN_INFO "  %016llx bad mem addr %010llx - %010llx reserved\n",
+	       (unsigned long long) pattern,
+	       (unsigned long long) start_bad,
+	       (unsigned long long) end_bad);
+	memblock_reserve(start_bad, end_bad - start_bad);
+}
+
+static void __init memtest(u64 pattern, u64 start_phys, u64 size)
+{
+	u64 *p, *start, *end;
+	u64 start_bad, last_bad;
+	u64 start_phys_aligned;
+	const size_t incr = sizeof(pattern);
+
+	start_phys_aligned = ALIGN(start_phys, incr);
+	start = __va(start_phys_aligned);
+	end = start + (size - (start_phys_aligned - start_phys)) / incr;
+	start_bad = 0;
+	last_bad = 0;
+
+	for (p = start; p < end; p++)
+		*p = pattern;
+
+	for (p = start; p < end; p++, start_phys_aligned += incr) {
+		if (*p == pattern)
+			continue;
+		if (start_phys_aligned == last_bad + incr) {
+			last_bad += incr;
+			continue;
+		}
+		if (start_bad)
+			reserve_bad_mem(pattern, start_bad, last_bad + incr);
+		start_bad = last_bad = start_phys_aligned;
+	}
+	if (start_bad)
+		reserve_bad_mem(pattern, start_bad, last_bad + incr);
+}
+
+static void __init do_one_pass(u64 pattern, u64 start, u64 end)
+{
+	u64 i;
+	phys_addr_t this_start, this_end;
+
+	for_each_free_mem_range(i, NUMA_NO_NODE, &this_start, &this_end, NULL) {
+		this_start = clamp_t(phys_addr_t, this_start, start, end);
+		this_end = clamp_t(phys_addr_t, this_end, start, end);
+		if (this_start < this_end) {
+			printk(KERN_INFO "  %010llx - %010llx pattern %016llx\n",
+			       (unsigned long long)this_start,
+			       (unsigned long long)this_end,
+			       (unsigned long long)cpu_to_be64(pattern));
+			memtest(pattern, this_start, this_end - this_start);
+		}
+	}
+}
+
+/* default is disabled */
+static int memtest_pattern __initdata;
+
+static int __init parse_memtest(char *arg)
+{
+	if (arg)
+		memtest_pattern = simple_strtoul(arg, NULL, 0);
+	else
+		memtest_pattern = ARRAY_SIZE(patterns);
+
+	return 0;
+}
+
+early_param("memtest", parse_memtest);
+
+void __init early_memtest(unsigned long start, unsigned long end)
+{
+	unsigned int i;
+	unsigned int idx = 0;
+
+	if (!memtest_pattern)
+		return;
+
+	printk(KERN_INFO "early_memtest: # of tests: %d\n", memtest_pattern);
+	for (i = memtest_pattern-1; i < UINT_MAX; --i) {
+		idx = i % ARRAY_SIZE(patterns);
+		do_one_pass(patterns[idx], start, end);
+	}
+}
-- 
1.7.9.5



^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 2/6] memtest: use phys_addr_t for physical addresses
  2015-03-09 10:27 [PATCH 0/6] make memtest a generic kernel feature Vladimir Murzin
  2015-03-09 10:27 ` [PATCH 1/6] mm: move memtest under /mm Vladimir Murzin
@ 2015-03-09 10:27 ` Vladimir Murzin
  2015-03-09 10:27 ` [PATCH 3/6] arm64: add support for memtest Vladimir Murzin
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 10+ messages in thread
From: Vladimir Murzin @ 2015-03-09 10:27 UTC (permalink / raw)
  To: linux-kernel, linux-mm, linux-arch, x86, linux-arm-kernel
  Cc: tglx, mingo, hpa, akpm, lauraa, catalin.marinas, will.deacon,
	linux, arnd, mark.rutland, ard.biesheuvel, baruch, rdunlap

Since memtest might be used by other architectures pass input parameters
as phys_addr_t instead of long to prevent overflow.

Signed-off-by: Vladimir Murzin <vladimir.murzin@arm.com>
Acked-by: Will Deacon <will.deacon@arm.com>
Tested-by: Mark Rutland <mark.rutland@arm.com>
---
 include/linux/memblock.h |    4 ++--
 mm/memtest.c             |   16 ++++++++--------
 2 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/include/linux/memblock.h b/include/linux/memblock.h
index 6724cb0..9497ec7 100644
--- a/include/linux/memblock.h
+++ b/include/linux/memblock.h
@@ -366,9 +366,9 @@ static inline unsigned long memblock_region_reserved_end_pfn(const struct memblo
 #endif
 
 #ifdef CONFIG_MEMTEST
-extern void early_memtest(unsigned long start, unsigned long end);
+extern void early_memtest(phys_addr_t start, phys_addr_t end);
 #else
-static inline void early_memtest(unsigned long start, unsigned long end)
+static inline void early_memtest(phys_addr_t start, phys_addr_t end)
 {
 }
 #endif
diff --git a/mm/memtest.c b/mm/memtest.c
index 1e9da79..1997d93 100644
--- a/mm/memtest.c
+++ b/mm/memtest.c
@@ -29,7 +29,7 @@ static u64 patterns[] __initdata = {
 	0x7a6c7258554e494cULL, /* yeah ;-) */
 };
 
-static void __init reserve_bad_mem(u64 pattern, u64 start_bad, u64 end_bad)
+static void __init reserve_bad_mem(u64 pattern, phys_addr_t start_bad, phys_addr_t end_bad)
 {
 	printk(KERN_INFO "  %016llx bad mem addr %010llx - %010llx reserved\n",
 	       (unsigned long long) pattern,
@@ -38,11 +38,11 @@ static void __init reserve_bad_mem(u64 pattern, u64 start_bad, u64 end_bad)
 	memblock_reserve(start_bad, end_bad - start_bad);
 }
 
-static void __init memtest(u64 pattern, u64 start_phys, u64 size)
+static void __init memtest(u64 pattern, phys_addr_t start_phys, phys_addr_t size)
 {
 	u64 *p, *start, *end;
-	u64 start_bad, last_bad;
-	u64 start_phys_aligned;
+	phys_addr_t start_bad, last_bad;
+	phys_addr_t start_phys_aligned;
 	const size_t incr = sizeof(pattern);
 
 	start_phys_aligned = ALIGN(start_phys, incr);
@@ -69,14 +69,14 @@ static void __init memtest(u64 pattern, u64 start_phys, u64 size)
 		reserve_bad_mem(pattern, start_bad, last_bad + incr);
 }
 
-static void __init do_one_pass(u64 pattern, u64 start, u64 end)
+static void __init do_one_pass(u64 pattern, phys_addr_t start, phys_addr_t end)
 {
 	u64 i;
 	phys_addr_t this_start, this_end;
 
 	for_each_free_mem_range(i, NUMA_NO_NODE, &this_start, &this_end, NULL) {
-		this_start = clamp_t(phys_addr_t, this_start, start, end);
-		this_end = clamp_t(phys_addr_t, this_end, start, end);
+		this_start = clamp(this_start, start, end);
+		this_end = clamp(this_end, start, end);
 		if (this_start < this_end) {
 			printk(KERN_INFO "  %010llx - %010llx pattern %016llx\n",
 			       (unsigned long long)this_start,
@@ -102,7 +102,7 @@ static int __init parse_memtest(char *arg)
 
 early_param("memtest", parse_memtest);
 
-void __init early_memtest(unsigned long start, unsigned long end)
+void __init early_memtest(phys_addr_t start, phys_addr_t end)
 {
 	unsigned int i;
 	unsigned int idx = 0;
-- 
1.7.9.5



^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 3/6] arm64: add support for memtest
  2015-03-09 10:27 [PATCH 0/6] make memtest a generic kernel feature Vladimir Murzin
  2015-03-09 10:27 ` [PATCH 1/6] mm: move memtest under /mm Vladimir Murzin
  2015-03-09 10:27 ` [PATCH 2/6] memtest: use phys_addr_t for physical addresses Vladimir Murzin
@ 2015-03-09 10:27 ` Vladimir Murzin
  2015-03-09 10:27 ` [PATCH 4/6] arm: " Vladimir Murzin
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 10+ messages in thread
From: Vladimir Murzin @ 2015-03-09 10:27 UTC (permalink / raw)
  To: linux-kernel, linux-mm, linux-arch, x86, linux-arm-kernel
  Cc: tglx, mingo, hpa, akpm, lauraa, catalin.marinas, will.deacon,
	linux, arnd, mark.rutland, ard.biesheuvel, baruch, rdunlap

Add support for memtest command line option.

Signed-off-by: Vladimir Murzin <vladimir.murzin@arm.com>
Acked-by: Will Deacon <will.deacon@arm.com>
Tested-by: Mark Rutland <mark.rutland@arm.com>
---
 arch/arm64/mm/init.c |    2 ++
 1 file changed, 2 insertions(+)

diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c
index ae85da6..597831b 100644
--- a/arch/arm64/mm/init.c
+++ b/arch/arm64/mm/init.c
@@ -190,6 +190,8 @@ void __init bootmem_init(void)
 	min = PFN_UP(memblock_start_of_DRAM());
 	max = PFN_DOWN(memblock_end_of_DRAM());
 
+	early_memtest(min << PAGE_SHIFT, max << PAGE_SHIFT);
+
 	/*
 	 * Sparsemem tries to allocate bootmem in memory_present(), so must be
 	 * done after the fixed reservations.
-- 
1.7.9.5



^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 4/6] arm: add support for memtest
  2015-03-09 10:27 [PATCH 0/6] make memtest a generic kernel feature Vladimir Murzin
                   ` (2 preceding siblings ...)
  2015-03-09 10:27 ` [PATCH 3/6] arm64: add support for memtest Vladimir Murzin
@ 2015-03-09 10:27 ` Vladimir Murzin
  2015-03-09 10:27 ` [PATCH 5/6] Kconfig: memtest: update number of test patterns up to 17 Vladimir Murzin
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 10+ messages in thread
From: Vladimir Murzin @ 2015-03-09 10:27 UTC (permalink / raw)
  To: linux-kernel, linux-mm, linux-arch, x86, linux-arm-kernel
  Cc: tglx, mingo, hpa, akpm, lauraa, catalin.marinas, will.deacon,
	linux, arnd, mark.rutland, ard.biesheuvel, baruch, rdunlap

Add support for memtest command line option.

Signed-off-by: Vladimir Murzin <vladimir.murzin@arm.com>
Acked-by: Will Deacon <will.deacon@arm.com>
---
 arch/arm/mm/init.c |    3 +++
 1 file changed, 3 insertions(+)

diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c
index 1609b02..3d0e9ae 100644
--- a/arch/arm/mm/init.c
+++ b/arch/arm/mm/init.c
@@ -335,6 +335,9 @@ void __init bootmem_init(void)
 
 	find_limits(&min, &max_low, &max_high);
 
+	early_memtest((phys_addr_t)min << PAGE_SHIFT,
+		      (phys_addr_t)max_low << PAGE_SHIFT);
+
 	/*
 	 * Sparsemem tries to allocate bootmem in memory_present(),
 	 * so must be done after the fixed reservations
-- 
1.7.9.5



^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 5/6] Kconfig: memtest: update number of test patterns up to 17
  2015-03-09 10:27 [PATCH 0/6] make memtest a generic kernel feature Vladimir Murzin
                   ` (3 preceding siblings ...)
  2015-03-09 10:27 ` [PATCH 4/6] arm: " Vladimir Murzin
@ 2015-03-09 10:27 ` Vladimir Murzin
  2015-03-09 10:27 ` [PATCH 6/6] Documentation: update arch list in the 'memtest' entry Vladimir Murzin
  2015-03-17 17:18 ` [PATCH 0/6] make memtest a generic kernel feature Will Deacon
  6 siblings, 0 replies; 10+ messages in thread
From: Vladimir Murzin @ 2015-03-09 10:27 UTC (permalink / raw)
  To: linux-kernel, linux-mm, linux-arch, x86, linux-arm-kernel
  Cc: tglx, mingo, hpa, akpm, lauraa, catalin.marinas, will.deacon,
	linux, arnd, mark.rutland, ard.biesheuvel, baruch, rdunlap

Additional test patterns for memtest were introduced since 63823126
"x86: memtest: add additional (regular) test patterns", but looks like
Kconfig was not updated that time.

Update Kconfig entry with the actual number of maximum test patterns.

Signed-off-by: Vladimir Murzin <vladimir.murzin@arm.com>
---
 lib/Kconfig.debug |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
index 8eb064fd..2832b0e 100644
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -1740,7 +1740,7 @@ config MEMTEST
 	        memtest=0, mean disabled; -- default
 	        memtest=1, mean do 1 test pattern;
 	        ...
-	        memtest=4, mean do 4 test patterns.
+	        memtest=17, mean do 17 test patterns.
 	  If you are unsure how to answer this question, answer N.
 
 source "samples/Kconfig"
-- 
1.7.9.5



^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 6/6] Documentation: update arch list in the 'memtest' entry
  2015-03-09 10:27 [PATCH 0/6] make memtest a generic kernel feature Vladimir Murzin
                   ` (4 preceding siblings ...)
  2015-03-09 10:27 ` [PATCH 5/6] Kconfig: memtest: update number of test patterns up to 17 Vladimir Murzin
@ 2015-03-09 10:27 ` Vladimir Murzin
  2015-03-17 17:18 ` [PATCH 0/6] make memtest a generic kernel feature Will Deacon
  6 siblings, 0 replies; 10+ messages in thread
From: Vladimir Murzin @ 2015-03-09 10:27 UTC (permalink / raw)
  To: linux-kernel, linux-mm, linux-arch, x86, linux-arm-kernel
  Cc: tglx, mingo, hpa, akpm, lauraa, catalin.marinas, will.deacon,
	linux, arnd, mark.rutland, ard.biesheuvel, baruch, rdunlap

Since arm64/arm support memtest command line option update the "memtest"
entry.

Signed-off-by: Vladimir Murzin <vladimir.murzin@arm.com>
---
 Documentation/kernel-parameters.txt |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
index bfcb1a6..ea11c98 100644
--- a/Documentation/kernel-parameters.txt
+++ b/Documentation/kernel-parameters.txt
@@ -1988,7 +1988,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
 			seconds.  Use this parameter to check at some
 			other rate.  0 disables periodic checking.
 
-	memtest=	[KNL,X86] Enable memtest
+	memtest=	[KNL,X86,ARM] Enable memtest
 			Format: <integer>
 			default : 0 <disable>
 			Specifies the number of memtest passes to be
-- 
1.7.9.5



^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH 0/6] make memtest a generic kernel feature
  2015-03-09 10:27 [PATCH 0/6] make memtest a generic kernel feature Vladimir Murzin
                   ` (5 preceding siblings ...)
  2015-03-09 10:27 ` [PATCH 6/6] Documentation: update arch list in the 'memtest' entry Vladimir Murzin
@ 2015-03-17 17:18 ` Will Deacon
  2015-03-17 17:20   ` Vladimir Murzin
  6 siblings, 1 reply; 10+ messages in thread
From: Will Deacon @ 2015-03-17 17:18 UTC (permalink / raw)
  To: Vladimir Murzin
  Cc: linux-kernel, linux-mm, linux-arch, x86, linux-arm-kernel, tglx,
	mingo, hpa, akpm, lauraa, Catalin Marinas, linux, arnd,
	Mark Rutland, ard.biesheuvel, baruch, rdunlap

On Mon, Mar 09, 2015 at 10:27:04AM +0000, Vladimir Murzin wrote:
> Memtest is a simple feature which fills the memory with a given set of
> patterns and validates memory contents, if bad memory regions is detected it
> reserves them via memblock API. Since memblock API is widely used by other
> architectures this feature can be enabled outside of x86 world.
> 
> This patch set promotes memtest to live under generic mm umbrella and enables
> memtest feature for arm/arm64.
> 
> It was reported that this patch set was useful for tracking down an issue with
> some errant DMA on an arm64 platform.
> 
> Since it touches x86 and mm bits it'd be great to get ACK/NAK for these bits.

Is your intention for akpm to merge this? I don't mind how it goes upstream,
but that seems like a sensible route to me.

Will

> Changelog:
> 
>     RFC -> v1
>         - updated kernel-parameters.txt for memtest entry
>         - updated number of test patterns in Kconfig menu
>         - added Acked/Tested tags for arm64 bits
>         - rebased on v4.0-rc3
> 
> Vladimir Murzin (6):
>   mm: move memtest under /mm
>   memtest: use phys_addr_t for physical addresses
>   arm64: add support for memtest
>   arm: add support for memtest
>   Kconfig: memtest: update number of test patterns up to 17
>   Documentation: update arch list in the 'memtest' entry
> 
>  Documentation/kernel-parameters.txt |    2 +-
>  arch/arm/mm/init.c                  |    3 +
>  arch/arm64/mm/init.c                |    2 +
>  arch/x86/Kconfig                    |   11 ----
>  arch/x86/include/asm/e820.h         |    8 ---
>  arch/x86/mm/Makefile                |    2 -
>  arch/x86/mm/memtest.c               |  118 -----------------------------------
>  include/linux/memblock.h            |    8 +++
>  lib/Kconfig.debug                   |   11 ++++
>  mm/Makefile                         |    1 +
>  mm/memtest.c                        |  118 +++++++++++++++++++++++++++++++++++
>  11 files changed, 144 insertions(+), 140 deletions(-)
>  delete mode 100644 arch/x86/mm/memtest.c
>  create mode 100644 mm/memtest.c
> 
> -- 
> 1.7.9.5
> 

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 0/6] make memtest a generic kernel feature
  2015-03-17 17:18 ` [PATCH 0/6] make memtest a generic kernel feature Will Deacon
@ 2015-03-17 17:20   ` Vladimir Murzin
  2015-03-17 17:31     ` Will Deacon
  0 siblings, 1 reply; 10+ messages in thread
From: Vladimir Murzin @ 2015-03-17 17:20 UTC (permalink / raw)
  To: Will Deacon
  Cc: linux-kernel, linux-mm, linux-arch, x86, linux-arm-kernel, tglx,
	mingo, hpa, akpm, lauraa, Catalin Marinas, linux, arnd,
	Mark Rutland, ard.biesheuvel, baruch, rdunlap

On 17/03/15 17:18, Will Deacon wrote:
> On Mon, Mar 09, 2015 at 10:27:04AM +0000, Vladimir Murzin wrote:
>> Memtest is a simple feature which fills the memory with a given set of
>> patterns and validates memory contents, if bad memory regions is detected it
>> reserves them via memblock API. Since memblock API is widely used by other
>> architectures this feature can be enabled outside of x86 world.
>>
>> This patch set promotes memtest to live under generic mm umbrella and enables
>> memtest feature for arm/arm64.
>>
>> It was reported that this patch set was useful for tracking down an issue with
>> some errant DMA on an arm64 platform.
>>
>> Since it touches x86 and mm bits it'd be great to get ACK/NAK for these bits.
> 
> Is your intention for akpm to merge this? I don't mind how it goes upstream,
> but that seems like a sensible route to me.
> 

It is already in -mm tree.

Vladimir

> Will
> 
>> Changelog:
>>
>>     RFC -> v1
>>         - updated kernel-parameters.txt for memtest entry
>>         - updated number of test patterns in Kconfig menu
>>         - added Acked/Tested tags for arm64 bits
>>         - rebased on v4.0-rc3
>>
>> Vladimir Murzin (6):
>>   mm: move memtest under /mm
>>   memtest: use phys_addr_t for physical addresses
>>   arm64: add support for memtest
>>   arm: add support for memtest
>>   Kconfig: memtest: update number of test patterns up to 17
>>   Documentation: update arch list in the 'memtest' entry
>>
>>  Documentation/kernel-parameters.txt |    2 +-
>>  arch/arm/mm/init.c                  |    3 +
>>  arch/arm64/mm/init.c                |    2 +
>>  arch/x86/Kconfig                    |   11 ----
>>  arch/x86/include/asm/e820.h         |    8 ---
>>  arch/x86/mm/Makefile                |    2 -
>>  arch/x86/mm/memtest.c               |  118 -----------------------------------
>>  include/linux/memblock.h            |    8 +++
>>  lib/Kconfig.debug                   |   11 ++++
>>  mm/Makefile                         |    1 +
>>  mm/memtest.c                        |  118 +++++++++++++++++++++++++++++++++++
>>  11 files changed, 144 insertions(+), 140 deletions(-)
>>  delete mode 100644 arch/x86/mm/memtest.c
>>  create mode 100644 mm/memtest.c
>>
>> -- 
>> 1.7.9.5
>>
> 
> --
> To unsubscribe, send a message with 'unsubscribe linux-mm' in
> the body to majordomo@kvack.org.  For more info on Linux MM,
> see: http://www.linux-mm.org/ .
> Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
> 
> 
> 



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 0/6] make memtest a generic kernel feature
  2015-03-17 17:20   ` Vladimir Murzin
@ 2015-03-17 17:31     ` Will Deacon
  0 siblings, 0 replies; 10+ messages in thread
From: Will Deacon @ 2015-03-17 17:31 UTC (permalink / raw)
  To: Vladimir Murzin
  Cc: linux-kernel, linux-mm, linux-arch, x86, linux-arm-kernel, tglx,
	mingo, hpa, akpm, lauraa, Catalin Marinas, linux, arnd,
	Mark Rutland, ard.biesheuvel, baruch, rdunlap

On Tue, Mar 17, 2015 at 05:20:31PM +0000, Vladimir Murzin wrote:
> On 17/03/15 17:18, Will Deacon wrote:
> > On Mon, Mar 09, 2015 at 10:27:04AM +0000, Vladimir Murzin wrote:
> >> Memtest is a simple feature which fills the memory with a given set of
> >> patterns and validates memory contents, if bad memory regions is detected it
> >> reserves them via memblock API. Since memblock API is widely used by other
> >> architectures this feature can be enabled outside of x86 world.
> >>
> >> This patch set promotes memtest to live under generic mm umbrella and enables
> >> memtest feature for arm/arm64.
> >>
> >> It was reported that this patch set was useful for tracking down an issue with
> >> some errant DMA on an arm64 platform.
> >>
> >> Since it touches x86 and mm bits it'd be great to get ACK/NAK for these bits.
> > 
> > Is your intention for akpm to merge this? I don't mind how it goes upstream,
> > but that seems like a sensible route to me.
> > 
> 
> It is already in -mm tree.

Cracking, I missed the memo somehow.

Will

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2015-03-17 17:31 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-03-09 10:27 [PATCH 0/6] make memtest a generic kernel feature Vladimir Murzin
2015-03-09 10:27 ` [PATCH 1/6] mm: move memtest under /mm Vladimir Murzin
2015-03-09 10:27 ` [PATCH 2/6] memtest: use phys_addr_t for physical addresses Vladimir Murzin
2015-03-09 10:27 ` [PATCH 3/6] arm64: add support for memtest Vladimir Murzin
2015-03-09 10:27 ` [PATCH 4/6] arm: " Vladimir Murzin
2015-03-09 10:27 ` [PATCH 5/6] Kconfig: memtest: update number of test patterns up to 17 Vladimir Murzin
2015-03-09 10:27 ` [PATCH 6/6] Documentation: update arch list in the 'memtest' entry Vladimir Murzin
2015-03-17 17:18 ` [PATCH 0/6] make memtest a generic kernel feature Will Deacon
2015-03-17 17:20   ` Vladimir Murzin
2015-03-17 17:31     ` Will Deacon

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).