[ARM] mm: move validation of membanks to one place
authorRussell King <rmk@dyn-67.arm.linux.org.uk>
Tue, 30 Sep 2008 18:29:25 +0000 (19:29 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Tue, 30 Sep 2008 20:34:15 +0000 (21:34 +0100)
The newly introduced sanity_check_meminfo() function should be
used to collect all validation of the meminfo array, which we
have in bootmem_init().  Move it there.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/mm/init.c
arch/arm/mm/mmu.c
arch/arm/mm/nommu.c

index 80584bd7f03e304e621bf9071f9ba39fd094d56e..ffff901cf6271b8b65747dd7b85fed30e2dca869 100644 (file)
@@ -333,14 +333,7 @@ bootmem_init_node(int node, int initrd_node, struct meminfo *mi)
 void __init bootmem_init(struct meminfo *mi)
 {
        unsigned long memend_pfn = 0;
-       int node, initrd_node, i;
-
-       /*
-        * Invalidate the node number for empty or invalid memory banks
-        */
-       for (i = 0; i < mi->nr_banks; i++)
-               if (mi->bank[i].size == 0 || mi->bank[i].node >= MAX_NUMNODES)
-                       mi->bank[i].node = -1;
+       int node, initrd_node;
 
        memcpy(&meminfo, mi, sizeof(meminfo));
 
index 94d81a2ba00891d66091183d1bcbe7c6eda9ce6e..f03ad87f6baa5209def9fdc323279758947ca6ac 100644 (file)
@@ -569,9 +569,10 @@ void __init iotable_init(struct map_desc *io_desc, int nr)
 static int __init check_membank_valid(struct membank *mb)
 {
        /*
-        * Check whether this memory region has non-zero size.
+        * Check whether this memory region has non-zero size or
+        * invalid node number.
         */
-       if (mb->size == 0)
+       if (mb->size == 0 || mb->node >= MAX_NUMNODES)
                return 0;
 
        /*
@@ -605,8 +606,7 @@ static int __init check_membank_valid(struct membank *mb)
 
 static void __init sanity_check_meminfo(struct meminfo *mi)
 {
-       int i;
-       int j;
+       int i, j;
 
        for (i = 0, j = 0; i < mi->nr_banks; i++) {
                if (check_membank_valid(&mi->bank[i]))
index 81a3000973b4540ec9f241d4ae0319a8e9dd9b6a..07b62b23897909bca58218aec816e41e7608ab3f 100644 (file)
@@ -41,12 +41,26 @@ void __init reserve_node_zero(pg_data_t *pgdat)
                        BOOTMEM_DEFAULT);
 }
 
+static void __init sanity_check_meminfo(struct meminfo *mi)
+{
+       int i, j;
+
+       for (i = 0, j = 0; i < mi->nr_banks; i++) {
+               struct membank *mb = &mi->bank[i];
+
+               if (mb->size != 0 && mb->node < MAX_NUMNODES)
+                       mi->bank[j++] = mi->bank[i];
+       }
+       mi->nr_banks = j;
+}
+
 /*
  * paging_init() sets up the page tables, initialises the zone memory
  * maps, and sets up the zero page, bad page and bad page tables.
  */
 void __init paging_init(struct meminfo *mi, struct machine_desc *mdesc)
 {
+       sanity_check_meminfo(mi);
        bootmem_init(mi);
 }