linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/7] x86: memtest update
@ 2009-02-13 14:46 Andreas Herrmann
  2009-02-13 14:49 ` [PATCH 1/7] x86: memtest: reuse test patterns when memtest parameter exceeds number of available patterns Andreas Herrmann
                   ` (6 more replies)
  0 siblings, 7 replies; 16+ messages in thread
From: Andreas Herrmann @ 2009-02-13 14:46 UTC (permalink / raw)
  To: Ingo Molnar, Thomas Gleixner, H. Peter Anvin; +Cc: linux-kernel

Hi,

Following patches contain minor fixes and changes of memtest code.
Please apply.


Thanks,

Andreas



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

* [PATCH 1/7] x86: memtest: reuse test patterns when memtest parameter exceeds number of available patterns
  2009-02-13 14:46 [PATCH 0/7] x86: memtest update Andreas Herrmann
@ 2009-02-13 14:49 ` Andreas Herrmann
  2009-02-13 14:51 ` [PATCH 2/7] x86: memtest: introduce array to store memtest patterns Andreas Herrmann
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 16+ messages in thread
From: Andreas Herrmann @ 2009-02-13 14:49 UTC (permalink / raw)
  To: Ingo Molnar, Thomas Gleixner, H. Peter Anvin; +Cc: linux-kernel

Impact: fix unexpected behaviour when pattern number is out of range

Current implementation provides 4 patterns for memtest. The code doesn't
check whether the memtest parameter value exceeds the maximum pattern number.

Instead the memtest code pretends to test with non-existing patterns, e.g.
when booting with memtest=10 I've observed the following

  ...
  early_memtest: pattern num 10
  0000001000 - 0000006000 pattern 0
  ...
  0000001000 - 0000006000 pattern 1
  ...
  0000001000 - 0000006000 pattern 2
  ...
  0000001000 - 0000006000 pattern 3
  ...
  0000001000 - 0000006000 pattern 4
  ...
  0000001000 - 0000006000 pattern 5
  ...
  0000001000 - 0000006000 pattern 6
  ...
  0000001000 - 0000006000 pattern 7
  ...
  0000001000 - 0000006000 pattern 8
  ...
  0000001000 - 0000006000 pattern 9
  ...

But in fact Linux didn't test anything for patterns > 4 as the default
case in memtest() is to leave the function.

I suggest to use the memtest parameter as the number of tests to be
performed and to re-iterate over all existing patterns.

Signed-off-by: Andreas Herrmann <andreas.herrmann3@amd.com>
---
 arch/x86/mm/memtest.c |    9 +++++++--
 1 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/arch/x86/mm/memtest.c b/arch/x86/mm/memtest.c
index 9cab18b..00b8bdc 100644
--- a/arch/x86/mm/memtest.c
+++ b/arch/x86/mm/memtest.c
@@ -9,6 +9,8 @@
 
 #include <asm/e820.h>
 
+#define _MAX_MEM_PATTERNS 4
+
 static void __init memtest(unsigned long start_phys, unsigned long size,
 				 unsigned pattern)
 {
@@ -21,6 +23,8 @@ static void __init memtest(unsigned long start_phys, unsigned long size,
 	unsigned long count;
 	unsigned long incr;
 
+	pattern = pattern % _MAX_MEM_PATTERNS;
+
 	switch (pattern) {
 	case 0:
 		val = 0UL;
@@ -110,8 +114,9 @@ void __init early_memtest(unsigned long start, unsigned long end)
 				t_size = end - t_start;
 
 			printk(KERN_CONT "\n  %010llx - %010llx pattern %d",
-				(unsigned long long)t_start,
-				(unsigned long long)t_start + t_size, pattern);
+			       (unsigned long long)t_start,
+			       (unsigned long long)t_start + t_size,
+			       pattern % _MAX_MEM_PATTERNS);
 
 			memtest(t_start, t_size, pattern);
 
-- 
1.6.1.2




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

* [PATCH 2/7] x86: memtest: introduce array to store memtest patterns
  2009-02-13 14:46 [PATCH 0/7] x86: memtest update Andreas Herrmann
  2009-02-13 14:49 ` [PATCH 1/7] x86: memtest: reuse test patterns when memtest parameter exceeds number of available patterns Andreas Herrmann
@ 2009-02-13 14:51 ` Andreas Herrmann
  2009-02-13 17:52   ` H. Peter Anvin
  2009-02-13 14:52 ` [PATCH 3/7] x86: memtest: cleanup memtest function Andreas Herrmann
                   ` (4 subsequent siblings)
  6 siblings, 1 reply; 16+ messages in thread
From: Andreas Herrmann @ 2009-02-13 14:51 UTC (permalink / raw)
  To: Ingo Molnar, Thomas Gleixner, H. Peter Anvin; +Cc: linux-kernel

Impact: code cleanup

Signed-off-by: Andreas Herrmann <andreas.herrmann3@amd.com>
---
 arch/x86/mm/memtest.c |   61 ++++++++++++++++++------------------------------
 1 files changed, 23 insertions(+), 38 deletions(-)

diff --git a/arch/x86/mm/memtest.c b/arch/x86/mm/memtest.c
index 00b8bdc..a8a6c51 100644
--- a/arch/x86/mm/memtest.c
+++ b/arch/x86/mm/memtest.c
@@ -9,47 +9,29 @@
 
 #include <asm/e820.h>
 
-#define _MAX_MEM_PATTERNS 4
+static unsigned long patterns[] = {
+	0UL,
+	-1UL,
+#ifdef CONFIG_X86_64
+	0x5555555555555555UL,
+	0xaaaaaaaaaaaaaaaaUL,
+#else
+	0x55555555UL,
+	0xaaaaaaaaUL,
+#endif
+};
 
 static void __init memtest(unsigned long start_phys, unsigned long size,
-				 unsigned pattern)
+			   unsigned long pattern)
 {
 	unsigned long i;
 	unsigned long *start;
 	unsigned long start_bad;
 	unsigned long last_bad;
-	unsigned long val;
 	unsigned long start_phys_aligned;
 	unsigned long count;
 	unsigned long incr;
 
-	pattern = pattern % _MAX_MEM_PATTERNS;
-
-	switch (pattern) {
-	case 0:
-		val = 0UL;
-		break;
-	case 1:
-		val = -1UL;
-		break;
-	case 2:
-#ifdef CONFIG_X86_64
-		val = 0x5555555555555555UL;
-#else
-		val = 0x55555555UL;
-#endif
-		break;
-	case 3:
-#ifdef CONFIG_X86_64
-		val = 0xaaaaaaaaaaaaaaaaUL;
-#else
-		val = 0xaaaaaaaaUL;
-#endif
-		break;
-	default:
-		return;
-	}
-
 	incr = sizeof(unsigned long);
 	start_phys_aligned = ALIGN(start_phys, incr);
 	count = (size - (start_phys_aligned - start_phys))/incr;
@@ -58,15 +40,16 @@ static void __init memtest(unsigned long start_phys, unsigned long size,
 	last_bad = 0;
 
 	for (i = 0; i < count; i++)
-		start[i] = val;
+		start[i] = pattern;
 	for (i = 0; i < count; i++, start++, start_phys_aligned += incr) {
-		if (*start != val) {
+		if (*start != pattern) {
 			if (start_phys_aligned == last_bad + incr) {
 				last_bad += incr;
 			} else {
 				if (start_bad) {
 					printk(KERN_CONT "\n  %016lx bad mem addr %010lx - %010lx reserved",
-						val, start_bad, last_bad + incr);
+					       pattern, start_bad,
+					       last_bad + incr);
 					reserve_early(start_bad, last_bad + incr, "BAD RAM");
 				}
 				start_bad = last_bad = start_phys_aligned;
@@ -75,7 +58,7 @@ static void __init memtest(unsigned long start_phys, unsigned long size,
 	}
 	if (start_bad) {
 		printk(KERN_CONT "\n  %016lx bad mem addr %010lx - %010lx reserved",
-			val, start_bad, last_bad + incr);
+		       pattern, start_bad, last_bad + incr);
 		reserve_early(start_bad, last_bad + incr, "BAD RAM");
 	}
 }
@@ -95,13 +78,16 @@ early_param("memtest", parse_memtest);
 void __init early_memtest(unsigned long start, unsigned long end)
 {
 	u64 t_start, t_size;
-	unsigned pattern;
+	unsigned int i;
+	unsigned long pattern;
 
 	if (!memtest_pattern)
 		return;
 
 	printk(KERN_INFO "early_memtest: pattern num %d", memtest_pattern);
-	for (pattern = 0; pattern < memtest_pattern; pattern++) {
+	for (i = 0; i < memtest_pattern; i++) {
+		unsigned int idx = i % ARRAY_SIZE(patterns);
+		pattern = patterns[idx];
 		t_start = start;
 		t_size = 0;
 		while (t_start < end) {
@@ -115,8 +101,7 @@ void __init early_memtest(unsigned long start, unsigned long end)
 
 			printk(KERN_CONT "\n  %010llx - %010llx pattern %d",
 			       (unsigned long long)t_start,
-			       (unsigned long long)t_start + t_size,
-			       pattern % _MAX_MEM_PATTERNS);
+			       (unsigned long long)t_start + t_size, idx);
 
 			memtest(t_start, t_size, pattern);
 
-- 
1.6.1.2




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

* [PATCH 3/7] x86: memtest: cleanup memtest function
  2009-02-13 14:46 [PATCH 0/7] x86: memtest update Andreas Herrmann
  2009-02-13 14:49 ` [PATCH 1/7] x86: memtest: reuse test patterns when memtest parameter exceeds number of available patterns Andreas Herrmann
  2009-02-13 14:51 ` [PATCH 2/7] x86: memtest: introduce array to store memtest patterns Andreas Herrmann
@ 2009-02-13 14:52 ` Andreas Herrmann
  2009-02-13 14:55 ` [PATCH 4/7] x86: memtest: adapt log messages Andreas Herrmann
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 16+ messages in thread
From: Andreas Herrmann @ 2009-02-13 14:52 UTC (permalink / raw)
  To: Ingo Molnar, Thomas Gleixner, H. Peter Anvin; +Cc: linux-kernel

Impact: code cleanup

Signed-off-by: Andreas Herrmann <andreas.herrmann3@amd.com>
---
 arch/x86/mm/memtest.c |   36 +++++++++++++++++++-----------------
 1 files changed, 19 insertions(+), 17 deletions(-)

diff --git a/arch/x86/mm/memtest.c b/arch/x86/mm/memtest.c
index a8a6c51..82321d9 100644
--- a/arch/x86/mm/memtest.c
+++ b/arch/x86/mm/memtest.c
@@ -21,6 +21,15 @@ static unsigned long patterns[] = {
 #endif
 };
 
+static void reserve_bad_mem(unsigned long pattern, unsigned long start_bad,
+			    unsigned long end_bad)
+{
+	printk(KERN_CONT "\n  %016lx bad mem addr "
+	       "%010lx - %010lx reserved",
+	       pattern, start_bad, end_bad);
+	reserve_early(start_bad, end_bad, "BAD RAM");
+}
+
 static void __init memtest(unsigned long start_phys, unsigned long size,
 			   unsigned long pattern)
 {
@@ -42,25 +51,18 @@ static void __init memtest(unsigned long start_phys, unsigned long size,
 	for (i = 0; i < count; i++)
 		start[i] = pattern;
 	for (i = 0; i < count; i++, start++, start_phys_aligned += incr) {
-		if (*start != pattern) {
-			if (start_phys_aligned == last_bad + incr) {
-				last_bad += incr;
-			} else {
-				if (start_bad) {
-					printk(KERN_CONT "\n  %016lx bad mem addr %010lx - %010lx reserved",
-					       pattern, start_bad,
-					       last_bad + incr);
-					reserve_early(start_bad, last_bad + incr, "BAD RAM");
-				}
-				start_bad = last_bad = start_phys_aligned;
-			}
+		if (*start == 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) {
-		printk(KERN_CONT "\n  %016lx bad mem addr %010lx - %010lx reserved",
-		       pattern, start_bad, last_bad + incr);
-		reserve_early(start_bad, last_bad + incr, "BAD RAM");
-	}
+	if (start_bad)
+		reserve_bad_mem(pattern, start_bad, last_bad + incr);
 }
 
 /* default is disabled */
-- 
1.6.1.2




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

* [PATCH 4/7] x86: memtest: adapt log messages
  2009-02-13 14:46 [PATCH 0/7] x86: memtest update Andreas Herrmann
                   ` (2 preceding siblings ...)
  2009-02-13 14:52 ` [PATCH 3/7] x86: memtest: cleanup memtest function Andreas Herrmann
@ 2009-02-13 14:55 ` Andreas Herrmann
  2009-02-13 16:53   ` Ingo Molnar
  2009-02-13 14:57 ` [PATCH 5/7] x86: memtest: add additional (silly) test patterns Andreas Herrmann
                   ` (2 subsequent siblings)
  6 siblings, 1 reply; 16+ messages in thread
From: Andreas Herrmann @ 2009-02-13 14:55 UTC (permalink / raw)
  To: Ingo Molnar, Thomas Gleixner, H. Peter Anvin; +Cc: linux-kernel

Adapt log messages to

* print test pattern instead of pattern number,
* correct format for output on 32-bit
* show pattern as stored in memory.

Signed-off-by: Andreas Herrmann <andreas.herrmann3@amd.com>
---
 arch/x86/mm/memtest.c |   23 +++++++++++++++--------
 1 files changed, 15 insertions(+), 8 deletions(-)

diff --git a/arch/x86/mm/memtest.c b/arch/x86/mm/memtest.c
index 82321d9..54c143b 100644
--- a/arch/x86/mm/memtest.c
+++ b/arch/x86/mm/memtest.c
@@ -24,9 +24,13 @@ static unsigned long patterns[] = {
 static void reserve_bad_mem(unsigned long pattern, unsigned long start_bad,
 			    unsigned long end_bad)
 {
-	printk(KERN_CONT "\n  %016lx bad mem addr "
-	       "%010lx - %010lx reserved",
-	       pattern, start_bad, end_bad);
+#ifdef CONFIG_X86_64
+	printk(KERN_CONT "\n  %016llx bad mem addr %010lx - %010lx reserved",
+	       cpu_to_be64(pattern), start_bad, end_bad);
+#else
+	printk(KERN_CONT "\n  %08x bad mem addr %010lx - %010lx reserved",
+	       cpu_to_be32(pattern), start_bad, end_bad);
+#endif
 	reserve_early(start_bad, end_bad, "BAD RAM");
 }
 
@@ -86,7 +90,7 @@ void __init early_memtest(unsigned long start, unsigned long end)
 	if (!memtest_pattern)
 		return;
 
-	printk(KERN_INFO "early_memtest: pattern num %d", memtest_pattern);
+	printk(KERN_INFO "early_memtest: number of tests %d", memtest_pattern);
 	for (i = 0; i < memtest_pattern; i++) {
 		unsigned int idx = i % ARRAY_SIZE(patterns);
 		pattern = patterns[idx];
@@ -101,10 +105,13 @@ void __init early_memtest(unsigned long start, unsigned long end)
 			if (t_start + t_size > end)
 				t_size = end - t_start;
 
-			printk(KERN_CONT "\n  %010llx - %010llx pattern %d",
-			       (unsigned long long)t_start,
-			       (unsigned long long)t_start + t_size, idx);
-
+#ifdef CONFIG_X86_64
+			printk(KERN_CONT "\n  %010llx - %010llx pattern %016llx",
+			       t_start, t_start + t_size, cpu_to_be64(pattern));
+#else
+			printk(KERN_CONT "\n  %010llx - %010llx pattern %08x",
+			       t_start, t_start + t_size, cpu_to_be32(pattern));
+#endif
 			memtest(t_start, t_size, pattern);
 
 			t_start += t_size;
-- 
1.6.1.2




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

* [PATCH 5/7] x86: memtest: add additional (silly) test patterns
  2009-02-13 14:46 [PATCH 0/7] x86: memtest update Andreas Herrmann
                   ` (3 preceding siblings ...)
  2009-02-13 14:55 ` [PATCH 4/7] x86: memtest: adapt log messages Andreas Herrmann
@ 2009-02-13 14:57 ` Andreas Herrmann
  2009-02-13 14:59 ` [PATCH 6/7] x86: memtest: wipe out test pattern from memory Andreas Herrmann
  2009-02-13 15:00 ` [PATCH 7/7] x86: update description for memtest boot parameter Andreas Herrmann
  6 siblings, 0 replies; 16+ messages in thread
From: Andreas Herrmann @ 2009-02-13 14:57 UTC (permalink / raw)
  To: Ingo Molnar, Thomas Gleixner, H. Peter Anvin; +Cc: linux-kernel


Signed-off-by: Andreas Herrmann <andreas.herrmann3@amd.com>
---
 arch/x86/mm/memtest.c |   22 ++++++++++++++++------
 1 files changed, 16 insertions(+), 6 deletions(-)

diff --git a/arch/x86/mm/memtest.c b/arch/x86/mm/memtest.c
index 54c143b..e3e986d 100644
--- a/arch/x86/mm/memtest.c
+++ b/arch/x86/mm/memtest.c
@@ -9,15 +9,25 @@
 
 #include <asm/e820.h>
 
+#ifdef CONFIG_X86_64
+#define _regular_pattern(p) 0x##p##p##p##p##p##p##p##p##UL
+#else
+#define _regular_pattern(p) 0x##p##p##p##p##UL
+#endif
+
 static unsigned long patterns[] = {
-	0UL,
-	-1UL,
+	_regular_pattern(00),_regular_pattern(ff),
+	_regular_pattern(55),_regular_pattern(aa),
+	_regular_pattern(11),_regular_pattern(22),
+	_regular_pattern(44),_regular_pattern(88),
+	_regular_pattern(33),_regular_pattern(66),
+	_regular_pattern(99),_regular_pattern(cc),
+	_regular_pattern(77),_regular_pattern(bb),
+	_regular_pattern(dd),_regular_pattern(ee),
 #ifdef CONFIG_X86_64
-	0x5555555555555555UL,
-	0xaaaaaaaaaaaaaaaaUL,
+	0x7a6c7258554e494cUL, /* 64-bit only ;-) */
 #else
-	0x55555555UL,
-	0xaaaaaaaaUL,
+	0xefbeadde,
 #endif
 };
 
-- 
1.6.1.2




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

* [PATCH 6/7] x86: memtest: wipe out test pattern from memory
  2009-02-13 14:46 [PATCH 0/7] x86: memtest update Andreas Herrmann
                   ` (4 preceding siblings ...)
  2009-02-13 14:57 ` [PATCH 5/7] x86: memtest: add additional (silly) test patterns Andreas Herrmann
@ 2009-02-13 14:59 ` Andreas Herrmann
  2009-02-13 15:00 ` [PATCH 7/7] x86: update description for memtest boot parameter Andreas Herrmann
  6 siblings, 0 replies; 16+ messages in thread
From: Andreas Herrmann @ 2009-02-13 14:59 UTC (permalink / raw)
  To: Ingo Molnar, Thomas Gleixner, H. Peter Anvin; +Cc: linux-kernel


Signed-off-by: Andreas Herrmann <andreas.herrmann3@amd.com>
---
 arch/x86/mm/memtest.c |    7 +++++++
 1 files changed, 7 insertions(+), 0 deletions(-)

diff --git a/arch/x86/mm/memtest.c b/arch/x86/mm/memtest.c
index e3e986d..bea66d5 100644
--- a/arch/x86/mm/memtest.c
+++ b/arch/x86/mm/memtest.c
@@ -126,6 +126,13 @@ void __init early_memtest(unsigned long start, unsigned long end)
 
 			t_start += t_size;
 		}
+		if (idx && (i == (memtest_pattern - 1))) {
+			i = -1;
+			memtest_pattern = 1;
+			printk(KERN_CONT "\n");
+			printk(KERN_INFO "early_memtest: wipe out last pattern");
+			continue; /* one more test to wipe out patterns */
+		}
 	}
 	printk(KERN_CONT "\n");
 }
-- 
1.6.1.2




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

* [PATCH 7/7] x86: update description for memtest boot parameter
  2009-02-13 14:46 [PATCH 0/7] x86: memtest update Andreas Herrmann
                   ` (5 preceding siblings ...)
  2009-02-13 14:59 ` [PATCH 6/7] x86: memtest: wipe out test pattern from memory Andreas Herrmann
@ 2009-02-13 15:00 ` Andreas Herrmann
  6 siblings, 0 replies; 16+ messages in thread
From: Andreas Herrmann @ 2009-02-13 15:00 UTC (permalink / raw)
  To: Ingo Molnar, Thomas Gleixner, H. Peter Anvin; +Cc: linux-kernel


Signed-off-by: Andreas Herrmann <andreas.herrmann3@amd.com>
---
 Documentation/kernel-parameters.txt |    7 ++++++-
 1 files changed, 6 insertions(+), 1 deletions(-)

diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
index b182626..a59c71d 100644
--- a/Documentation/kernel-parameters.txt
+++ b/Documentation/kernel-parameters.txt
@@ -1308,8 +1308,13 @@ and is between 256 and 4096 characters. It is defined in the file
 
 	memtest=	[KNL,X86] Enable memtest
 			Format: <integer>
-			range: 0,4 : pattern number
 			default : 0 <disable>
+			Specifies the number of memtest passes to be
+			performed. Each pass selects another test
+			pattern from a given set of patterns. Memtest
+			fills the memory with this pattern, validates
+			memory contents and reserves bad memory
+			regions that are detected.
 
 	meye.*=		[HW] Set MotionEye Camera parameters
 			See Documentation/video4linux/meye.txt.
-- 
1.6.1.2




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

* Re: [PATCH 4/7] x86: memtest: adapt log messages
  2009-02-13 14:55 ` [PATCH 4/7] x86: memtest: adapt log messages Andreas Herrmann
@ 2009-02-13 16:53   ` Ingo Molnar
  2009-02-13 17:04     ` Jaswinder Singh Rajput
  2009-02-17 10:29     ` Andreas Herrmann
  0 siblings, 2 replies; 16+ messages in thread
From: Ingo Molnar @ 2009-02-13 16:53 UTC (permalink / raw)
  To: Andreas Herrmann, Yinghai Lu, Harvey Harrison
  Cc: Thomas Gleixner, H. Peter Anvin, linux-kernel


* Andreas Herrmann <andreas.herrmann3@amd.com> wrote:

> +#ifdef CONFIG_X86_64
> +			printk(KERN_CONT "\n  %010llx - %010llx pattern %016llx",
> +			       t_start, t_start + t_size, cpu_to_be64(pattern));
> +#else
> +			printk(KERN_CONT "\n  %010llx - %010llx pattern %08x",
> +			       t_start, t_start + t_size, cpu_to_be32(pattern));
> +#endif

hm, is there really no cleaner way to do this?

	Ingo

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

* Re: [PATCH 4/7] x86: memtest: adapt log messages
  2009-02-13 16:53   ` Ingo Molnar
@ 2009-02-13 17:04     ` Jaswinder Singh Rajput
  2009-02-13 17:46       ` H. Peter Anvin
  2009-02-17 10:29     ` Andreas Herrmann
  1 sibling, 1 reply; 16+ messages in thread
From: Jaswinder Singh Rajput @ 2009-02-13 17:04 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: Andreas Herrmann, Yinghai Lu, Harvey Harrison, Thomas Gleixner,
	H. Peter Anvin, linux-kernel, David Woodhouse

On Fri, 2009-02-13 at 17:53 +0100, Ingo Molnar wrote:
> * Andreas Herrmann <andreas.herrmann3@amd.com> wrote:
> 
> > +#ifdef CONFIG_X86_64
> > +			printk(KERN_CONT "\n  %010llx - %010llx pattern %016llx",
> > +			       t_start, t_start + t_size, cpu_to_be64(pattern));
> > +#else
> > +			printk(KERN_CONT "\n  %010llx - %010llx pattern %08x",
> > +			       t_start, t_start + t_size, cpu_to_be32(pattern));
> > +#endif
> 
> hm, is there really no cleaner way to do this?
> 

Can we use this:

+			printk(KERN_CONT "\n  %010llx - %010llx pattern %016llx",
+			       t_start, t_start + t_size, cpu_to_be64(pattern));

--
JSR




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

* Re: [PATCH 4/7] x86: memtest: adapt log messages
  2009-02-13 17:04     ` Jaswinder Singh Rajput
@ 2009-02-13 17:46       ` H. Peter Anvin
  2009-02-17 10:27         ` Andreas Herrmann
  0 siblings, 1 reply; 16+ messages in thread
From: H. Peter Anvin @ 2009-02-13 17:46 UTC (permalink / raw)
  To: Jaswinder Singh Rajput
  Cc: Ingo Molnar, Andreas Herrmann, Yinghai Lu, Harvey Harrison,
	Thomas Gleixner, linux-kernel, David Woodhouse

Jaswinder Singh Rajput wrote:
> On Fri, 2009-02-13 at 17:53 +0100, Ingo Molnar wrote:
>> * Andreas Herrmann <andreas.herrmann3@amd.com> wrote:
>>
>>> +#ifdef CONFIG_X86_64
>>> +			printk(KERN_CONT "\n  %010llx - %010llx pattern %016llx",
>>> +			       t_start, t_start + t_size, cpu_to_be64(pattern));
>>> +#else
>>> +			printk(KERN_CONT "\n  %010llx - %010llx pattern %08x",
>>> +			       t_start, t_start + t_size, cpu_to_be32(pattern));
>>> +#endif
>> hm, is there really no cleaner way to do this?
> 
> Can we use this:
> 
> +			printk(KERN_CONT "\n  %010llx - %010llx pattern %016llx",
> +			       t_start, t_start + t_size, cpu_to_be64(pattern));
> 

Only if you don't mind 8 extra zeros on 32 bits.

There are other problems with this, too.  There is a KERN_CONT at the
end of it, but it starts a new line, and then doesn't have another
priority flag.

	-hpa

-- 
H. Peter Anvin, Intel Open Source Technology Center
I work for Intel.  I don't speak on their behalf.


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

* Re: [PATCH 2/7] x86: memtest: introduce array to store memtest patterns
  2009-02-13 14:51 ` [PATCH 2/7] x86: memtest: introduce array to store memtest patterns Andreas Herrmann
@ 2009-02-13 17:52   ` H. Peter Anvin
  2009-02-17 10:24     ` Andreas Herrmann
  0 siblings, 1 reply; 16+ messages in thread
From: H. Peter Anvin @ 2009-02-13 17:52 UTC (permalink / raw)
  To: Andreas Herrmann; +Cc: Ingo Molnar, Thomas Gleixner, linux-kernel

Andreas Herrmann wrote:
> -#define _MAX_MEM_PATTERNS 4
> +static unsigned long patterns[] = {
> +	0UL,
> +	-1UL,
> +#ifdef CONFIG_X86_64
> +	0x5555555555555555UL,
> +	0xaaaaaaaaaaaaaaaaUL,
> +#else
> +	0x55555555UL,
> +	0xaaaaaaaaUL,
> +#endif
> +};

Why not just use u64 for the pattern even on 32 bits?

	-hpa

-- 
H. Peter Anvin, Intel Open Source Technology Center
I work for Intel.  I don't speak on their behalf.


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

* Re: [PATCH 2/7] x86: memtest: introduce array to store memtest patterns
  2009-02-13 17:52   ` H. Peter Anvin
@ 2009-02-17 10:24     ` Andreas Herrmann
  2009-02-17 20:58       ` Yinghai Lu
  0 siblings, 1 reply; 16+ messages in thread
From: Andreas Herrmann @ 2009-02-17 10:24 UTC (permalink / raw)
  To: H. Peter Anvin, Yinghai Lu; +Cc: Ingo Molnar, Thomas Gleixner, linux-kernel

On Fri, Feb 13, 2009 at 09:52:31AM -0800, H. Peter Anvin wrote:
> Andreas Herrmann wrote:
> > -#define _MAX_MEM_PATTERNS 4
> > +static unsigned long patterns[] = {
> > +	0UL,
> > +	-1UL,
> > +#ifdef CONFIG_X86_64
> > +	0x5555555555555555UL,
> > +	0xaaaaaaaaaaaaaaaaUL,
> > +#else
> > +	0x55555555UL,
> > +	0xaaaaaaaaUL,
> > +#endif
> > +};
> 
> Why not just use u64 for the pattern even on 32 bits?

I just assumed that this was a settled thing.

Yinghai, was there a specific reason why you did not use an u64 for
the memory test pattern on 32-bit?
(See commit 1f067167a83d1c7f80437fd1d32b55508aaca009 "x86: seperate
memtest from init_64.c")

If not I'll adapt this and send out a new patch set.


Regards,

Andreas



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

* Re: [PATCH 4/7] x86: memtest: adapt log messages
  2009-02-13 17:46       ` H. Peter Anvin
@ 2009-02-17 10:27         ` Andreas Herrmann
  0 siblings, 0 replies; 16+ messages in thread
From: Andreas Herrmann @ 2009-02-17 10:27 UTC (permalink / raw)
  To: H. Peter Anvin
  Cc: Jaswinder Singh Rajput, Ingo Molnar, Yinghai Lu, Harvey Harrison,
	Thomas Gleixner, linux-kernel, David Woodhouse

On Fri, Feb 13, 2009 at 09:46:15AM -0800, H. Peter Anvin wrote:
> Jaswinder Singh Rajput wrote:
> > On Fri, 2009-02-13 at 17:53 +0100, Ingo Molnar wrote:
> >> * Andreas Herrmann <andreas.herrmann3@amd.com> wrote:
> >>
> >>> +#ifdef CONFIG_X86_64
> >>> +			printk(KERN_CONT "\n  %010llx - %010llx pattern %016llx",
> >>> +			       t_start, t_start + t_size, cpu_to_be64(pattern));
> >>> +#else
> >>> +			printk(KERN_CONT "\n  %010llx - %010llx pattern %08x",
> >>> +			       t_start, t_start + t_size, cpu_to_be32(pattern));
> >>> +#endif
> >> hm, is there really no cleaner way to do this?
> > 
> > Can we use this:
> > 
> > +			printk(KERN_CONT "\n  %010llx - %010llx pattern %016llx",
> > +			       t_start, t_start + t_size, cpu_to_be64(pattern));
> > 
> 
> Only if you don't mind 8 extra zeros on 32 bits.
> 
> There are other problems with this, too.  There is a KERN_CONT at the
> end of it, but it starts a new line, and then doesn't have another
> priority flag.

Ok, I see. I'll replace KERN_CONT with an appropriate priority flag
and move the newline to the end of the format string.


Regards,

Andreas



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

* Re: [PATCH 4/7] x86: memtest: adapt log messages
  2009-02-13 16:53   ` Ingo Molnar
  2009-02-13 17:04     ` Jaswinder Singh Rajput
@ 2009-02-17 10:29     ` Andreas Herrmann
  1 sibling, 0 replies; 16+ messages in thread
From: Andreas Herrmann @ 2009-02-17 10:29 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: Yinghai Lu, Harvey Harrison, Thomas Gleixner, H. Peter Anvin,
	linux-kernel

On Fri, Feb 13, 2009 at 05:53:02PM +0100, Ingo Molnar wrote:
> 
> * Andreas Herrmann <andreas.herrmann3@amd.com> wrote:
> 
> > +#ifdef CONFIG_X86_64
> > +			printk(KERN_CONT "\n  %010llx - %010llx pattern %016llx",
> > +			       t_start, t_start + t_size, cpu_to_be64(pattern));
> > +#else
> > +			printk(KERN_CONT "\n  %010llx - %010llx pattern %08x",
> > +			       t_start, t_start + t_size, cpu_to_be32(pattern));
> > +#endif
> 
> hm, is there really no cleaner way to do this?

There is -- but only if 32-bit-code is changed to use u64 for the test
pattern.


Andreas



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

* Re: [PATCH 2/7] x86: memtest: introduce array to store memtest  patterns
  2009-02-17 10:24     ` Andreas Herrmann
@ 2009-02-17 20:58       ` Yinghai Lu
  0 siblings, 0 replies; 16+ messages in thread
From: Yinghai Lu @ 2009-02-17 20:58 UTC (permalink / raw)
  To: Andreas Herrmann
  Cc: H. Peter Anvin, Ingo Molnar, Thomas Gleixner, linux-kernel

On Tue, Feb 17, 2009 at 2:24 AM, Andreas Herrmann
<andreas.herrmann3@amd.com> wrote:
> On Fri, Feb 13, 2009 at 09:52:31AM -0800, H. Peter Anvin wrote:
>> Andreas Herrmann wrote:
>> > -#define _MAX_MEM_PATTERNS 4
>> > +static unsigned long patterns[] = {
>> > +   0UL,
>> > +   -1UL,
>> > +#ifdef CONFIG_X86_64
>> > +   0x5555555555555555UL,
>> > +   0xaaaaaaaaaaaaaaaaUL,
>> > +#else
>> > +   0x55555555UL,
>> > +   0xaaaaaaaaUL,
>> > +#endif
>> > +};
>>
>> Why not just use u64 for the pattern even on 32 bits?
>
> I just assumed that this was a settled thing.
>
> Yinghai, was there a specific reason why you did not use an u64 for
> the memory test pattern on 32-bit?
> (See commit 1f067167a83d1c7f80437fd1d32b55508aaca009 "x86: seperate
> memtest from init_64.c")
>
> If not I'll adapt this and send out a new patch set.

should be ok,  but please make sure target range is u64 alignment.

YH

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

end of thread, other threads:[~2009-02-17 20:58 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-02-13 14:46 [PATCH 0/7] x86: memtest update Andreas Herrmann
2009-02-13 14:49 ` [PATCH 1/7] x86: memtest: reuse test patterns when memtest parameter exceeds number of available patterns Andreas Herrmann
2009-02-13 14:51 ` [PATCH 2/7] x86: memtest: introduce array to store memtest patterns Andreas Herrmann
2009-02-13 17:52   ` H. Peter Anvin
2009-02-17 10:24     ` Andreas Herrmann
2009-02-17 20:58       ` Yinghai Lu
2009-02-13 14:52 ` [PATCH 3/7] x86: memtest: cleanup memtest function Andreas Herrmann
2009-02-13 14:55 ` [PATCH 4/7] x86: memtest: adapt log messages Andreas Herrmann
2009-02-13 16:53   ` Ingo Molnar
2009-02-13 17:04     ` Jaswinder Singh Rajput
2009-02-13 17:46       ` H. Peter Anvin
2009-02-17 10:27         ` Andreas Herrmann
2009-02-17 10:29     ` Andreas Herrmann
2009-02-13 14:57 ` [PATCH 5/7] x86: memtest: add additional (silly) test patterns Andreas Herrmann
2009-02-13 14:59 ` [PATCH 6/7] x86: memtest: wipe out test pattern from memory Andreas Herrmann
2009-02-13 15:00 ` [PATCH 7/7] x86: update description for memtest boot parameter Andreas Herrmann

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).