s390/setup: correct 4-level kernel page table detection
authorMartin Schwidefsky <schwidefsky@de.ibm.com>
Fri, 26 Sep 2014 07:23:20 +0000 (09:23 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Fri, 26 Sep 2014 10:22:42 +0000 (12:22 +0200)
Fix calculation to decide if a 4-level kernel page table is required.
Git commit c972cc60c23f5a63 "s390/vmalloc: have separate modules area"
added the separate module area which reduces the size of the vmalloc
area but fails to take it into account for the 3 vs 4 level page table
decision.

Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/kernel/setup.c

index 82bc113..cdfc060 100644 (file)
@@ -452,8 +452,8 @@ static void __init setup_memory_end(void)
 #ifdef CONFIG_64BIT
        vmalloc_size = VMALLOC_END ?: (128UL << 30) - MODULES_LEN;
        tmp = (memory_end ?: max_physmem_end) / PAGE_SIZE;
-       tmp = tmp * (sizeof(struct page) + PAGE_SIZE) + vmalloc_size;
-       if (tmp <= (1UL << 42))
+       tmp = tmp * (sizeof(struct page) + PAGE_SIZE);
+       if (tmp + vmalloc_size + MODULES_LEN <= (1UL << 42))
                vmax = 1UL << 42;       /* 3-level kernel page table */
        else
                vmax = 1UL << 53;       /* 4-level kernel page table */