x86-64, NUMA: Don't call __pa() with invalid address in numa_reset_distance()
authorYinghai Lu <yinghai@kernel.org>
Thu, 17 Feb 2011 13:46:37 +0000 (14:46 +0100)
committerTejun Heo <tj@kernel.org>
Thu, 17 Feb 2011 14:03:43 +0000 (15:03 +0100)
Do not call __pa(numa_distance) if it was not allocated before.
Calling with invalid address triggers VIRTUAL_BUG_ON() in
__phys_addr() if CONFIG_DEBUG_VIRTUAL.

Also reported by Ingo.

 http://thread.gmane.org/gmane.linux.kernel/1101306/focus=1101785

- v2: Change to check existing path as tj requested.
- tj: Description update.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
Signed-off-by: Tejun Heo <tj@kernel.org>
Reported-by: Ingo Molnar <mingo@elte.hu>
arch/x86/mm/numa_64.c

index 8ce6177..1bd6de4 100644 (file)
@@ -371,11 +371,13 @@ static void __init numa_reset_distance(void)
 {
        size_t size;
 
-       size = numa_distance_cnt * sizeof(numa_distance[0]);
-       memblock_x86_free_range(__pa(numa_distance),
-                               __pa(numa_distance) + size);
+       if (numa_distance_cnt) {
+               size = numa_distance_cnt * sizeof(numa_distance[0]);
+               memblock_x86_free_range(__pa(numa_distance),
+                                       __pa(numa_distance) + size);
+               numa_distance_cnt = 0;
+       }
        numa_distance = NULL;
-       numa_distance_cnt = 0;
 }
 
 /*