s390: get rid of odd global real_memory_size
authorHeiko Carstens <heiko.carstens@de.ibm.com>
Mon, 29 Apr 2013 15:32:34 +0000 (17:32 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Thu, 2 May 2013 13:50:25 +0000 (15:50 +0200)
The variable real_memory_size has odd semantics and has been used in
a broken way by e.g. the old kvm code.
Therefore get rid of it before anybody else makes use of it.

Reviewed-by: Michael Holzheu <holzheu@linux.vnet.ibm.com>
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/include/asm/setup.h
arch/s390/kernel/setup.c

index ff67d730c00c3aaf3f9a4e4777febed2f5e44ae8..270fcd0fbf1aa3ca95efcf98658da13c94696954 100644 (file)
@@ -43,7 +43,6 @@ struct mem_chunk {
 };
 
 extern struct mem_chunk memory_chunk[];
-extern unsigned long real_memory_size;
 extern int memory_end_set;
 extern unsigned long memory_end;
 
index a2574f192bb0b2ff26273b0d2822c4b74257a336..f1e0ba5a5c3a742ba11f3b7971ddd41c283bba70 100644 (file)
@@ -502,12 +502,10 @@ static void __init setup_resources(void)
        }
 }
 
-unsigned long real_memory_size;
-EXPORT_SYMBOL_GPL(real_memory_size);
-
 static void __init setup_memory_end(void)
 {
        unsigned long vmax, vmalloc_size, tmp;
+       unsigned long real_memory_size = 0;
        int i;
 
 
@@ -517,7 +515,6 @@ static void __init setup_memory_end(void)
                memory_end_set = 1;
        }
 #endif
-       real_memory_size = 0;
        memory_end &= PAGE_MASK;
 
        /*
@@ -719,16 +716,22 @@ static struct notifier_block kdump_mem_nb = {
 static void reserve_oldmem(void)
 {
 #ifdef CONFIG_CRASH_DUMP
+       unsigned long real_size = 0;
+       int i;
+
        if (!OLDMEM_BASE)
                return;
+       for (i = 0; i < MEMORY_CHUNKS; i++) {
+               struct mem_chunk *chunk = &memory_chunk[i];
 
+               real_size = max(real_size, chunk->addr + chunk->size);
+       }
        reserve_kdump_bootmem(OLDMEM_BASE, OLDMEM_SIZE, CHUNK_OLDMEM);
-       reserve_kdump_bootmem(OLDMEM_SIZE, memory_end - OLDMEM_SIZE,
-                             CHUNK_OLDMEM);
-       if (OLDMEM_BASE + OLDMEM_SIZE == real_memory_size)
+       reserve_kdump_bootmem(OLDMEM_SIZE, real_size - OLDMEM_SIZE, CHUNK_OLDMEM);
+       if (OLDMEM_BASE + OLDMEM_SIZE == real_size)
                saved_max_pfn = PFN_DOWN(OLDMEM_BASE) - 1;
        else
-               saved_max_pfn = PFN_DOWN(real_memory_size) - 1;
+               saved_max_pfn = PFN_DOWN(real_size) - 1;
 #endif
 }