diff options
Diffstat (limited to 'arch/x86/mm/memtest.c')
| -rw-r--r-- | arch/x86/mm/memtest.c | 31 | 
1 files changed, 13 insertions, 18 deletions
diff --git a/arch/x86/mm/memtest.c b/arch/x86/mm/memtest.c index 92faf3a1c53..c80b9fb9573 100644 --- a/arch/x86/mm/memtest.c +++ b/arch/x86/mm/memtest.c @@ -34,7 +34,7 @@ static void __init reserve_bad_mem(u64 pattern, u64 start_bad, u64 end_bad)  	       (unsigned long long) pattern,  	       (unsigned long long) start_bad,  	       (unsigned long long) end_bad); -	memblock_x86_reserve_range(start_bad, end_bad, "BAD RAM"); +	memblock_reserve(start_bad, end_bad - start_bad);  }  static void __init memtest(u64 pattern, u64 start_phys, u64 size) @@ -70,24 +70,19 @@ static void __init memtest(u64 pattern, u64 start_phys, u64 size)  static void __init do_one_pass(u64 pattern, u64 start, u64 end)  { -	u64 size = 0; +	u64 i; +	phys_addr_t this_start, this_end; -	while (start < end) { -		start = memblock_x86_find_in_range_size(start, &size, 1); - -		/* done ? */ -		if (start >= end) -			break; -		if (start + size > end) -			size = end - start; - -		printk(KERN_INFO "  %010llx - %010llx pattern %016llx\n", -		       (unsigned long long) start, -		       (unsigned long long) start + size, -		       (unsigned long long) cpu_to_be64(pattern)); -		memtest(pattern, start, size); - -		start += size; +	for_each_free_mem_range(i, MAX_NUMNODES, &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); +		}  	}  }  |