]> git.hungrycats.org Git - linux/commitdiff
[PATCH] ia64: 2nd step to fix GENERIC builds: split contig and discontig paging_init...
authorJesse Barnes <jbarnes@sgi.com>
Fri, 10 Oct 2003 09:14:31 +0000 (02:14 -0700)
committerDavid Mosberger <davidm@tiger.hpl.hp.com>
Fri, 10 Oct 2003 09:14:31 +0000 (02:14 -0700)
arch/ia64/mm/contig.c
arch/ia64/mm/discontig.c
arch/ia64/mm/init.c
include/asm-ia64/meminit.h

index e9650c7ec667eb072c2cc045d69af84d18b4411f..11dc09bf68f035e04ac1c1a84d776bc6d780f8cc 100644 (file)
 #include <asm/pgtable.h>
 #include <asm/sections.h>
 
+#ifdef CONFIG_VIRTUAL_MEM_MAP
+static unsigned long num_dma_physpages;
+#endif
+
 /**
  * show_mem - display a memory statistics summary
  *
@@ -161,3 +165,93 @@ find_memory (void)
 
        find_initrd();
 }
+
+#ifdef CONFIG_VIRTUAL_MEM_MAP
+static int
+count_dma_pages (u64 start, u64 end, void *arg)
+{
+       unsigned long *count = arg;
+
+       if (end <= MAX_DMA_ADDRESS)
+               *count += (end - start) >> PAGE_SHIFT;
+       return 0;
+}
+#endif
+
+/*
+ * Set up the page tables.
+ */
+
+void
+paging_init (void)
+{
+       unsigned long max_dma;
+       unsigned long zones_size[MAX_NR_ZONES];
+#ifdef CONFIG_VIRTUAL_MEM_MAP
+       unsigned long zholes_size[MAX_NR_ZONES];
+       unsigned long max_gap;
+#endif
+
+       /* initialize mem_map[] */
+
+       memset(zones_size, 0, sizeof(zones_size));
+
+       num_physpages = 0;
+       efi_memmap_walk(count_pages, &num_physpages);
+
+       max_dma = virt_to_phys((void *) MAX_DMA_ADDRESS) >> PAGE_SHIFT;
+
+#ifdef CONFIG_VIRTUAL_MEM_MAP
+       memset(zholes_size, 0, sizeof(zholes_size));
+
+       num_dma_physpages = 0;
+       efi_memmap_walk(count_dma_pages, &num_dma_physpages);
+
+       if (max_low_pfn < max_dma) {
+               zones_size[ZONE_DMA] = max_low_pfn;
+               zholes_size[ZONE_DMA] = max_low_pfn - num_dma_physpages;
+       } else {
+               zones_size[ZONE_DMA] = max_dma;
+               zholes_size[ZONE_DMA] = max_dma - num_dma_physpages;
+               if (num_physpages > num_dma_physpages) {
+                       zones_size[ZONE_NORMAL] = max_low_pfn - max_dma;
+                       zholes_size[ZONE_NORMAL] =
+                               ((max_low_pfn - max_dma) -
+                                (num_physpages - num_dma_physpages));
+               }
+       }
+
+       max_gap = 0;
+       efi_memmap_walk(find_largest_hole, (u64 *)&max_gap);
+       if (max_gap < LARGE_GAP) {
+               vmem_map = (struct page *) 0;
+               free_area_init_node(0, &contig_page_data, NULL, zones_size, 0,
+                                   zholes_size);
+               mem_map = contig_page_data.node_mem_map;
+       } else {
+               unsigned long map_size;
+
+               /* allocate virtual_mem_map */
+
+               map_size = PAGE_ALIGN(max_low_pfn * sizeof(struct page));
+               vmalloc_end -= map_size;
+               vmem_map = (struct page *) vmalloc_end;
+               efi_memmap_walk(create_mem_map_page_table, 0);
+
+               free_area_init_node(0, &contig_page_data, vmem_map, zones_size,
+                                   0, zholes_size);
+
+               mem_map = contig_page_data.node_mem_map;
+               printk("Virtual mem_map starts at 0x%p\n", mem_map);
+       }
+#else /* !CONFIG_VIRTUAL_MEM_MAP */
+       if (max_low_pfn < max_dma)
+               zones_size[ZONE_DMA] = max_low_pfn;
+       else {
+               zones_size[ZONE_DMA] = max_dma;
+               zones_size[ZONE_NORMAL] = max_low_pfn - max_dma;
+       }
+       free_area_init(zones_size);
+#endif /* !CONFIG_VIRTUAL_MEM_MAP */
+       zero_page_memmap_ptr = virt_to_page(ia64_imva(empty_zero_page));
+}
index 2f1b7826caf1ed3d171660d4ac422d8b6a1bf2e8..5af686da77de636c2440cc261b8c41e33ba1a243 100644 (file)
@@ -247,8 +247,7 @@ void __init find_memory(void)
  *     - replicate the nodedir structure to other nodes
  */
 
-void __init
-discontig_paging_init(void)
+void __init paging_init(void)
 {
        int             node, mynode;
        unsigned long   max_dma, zones_size[MAX_NR_ZONES];
@@ -305,6 +304,9 @@ discontig_paging_init(void)
                        memcpy(node_data[node], node_data[mynode], sizeof(struct ia64_node_data));
                        node_data[node]->node = node;
                }
+
+       efi_memmap_walk(count_pages, &num_physpages);
+       zero_page_memmap_ptr = virt_to_page(ia64_imva(empty_zero_page));
 }
 
 void show_mem(void)
index 9f0b302d4abcb75afc608c7f51f9bdd125c12d36..eba35a7083feb311764ecdf4ed50acdbedcff7e0 100644 (file)
@@ -41,10 +41,8 @@ extern void ia64_tlb_init (void);
 unsigned long MAX_DMA_ADDRESS = PAGE_OFFSET + 0x100000000UL;
 
 #ifdef CONFIG_VIRTUAL_MEM_MAP
-# define LARGE_GAP     0x40000000      /* Use virtual mem map if hole is > than this */
   unsigned long vmalloc_end = VMALLOC_END_INIT;
-  static struct page *vmem_map;
-  static unsigned long num_dma_physpages;
+  struct page *vmem_map;
 #endif
 
 static int pgt_cache_water[2] = { 25, 50 };
@@ -338,7 +336,7 @@ ia64_mmu_init (void *my_cpu_data)
 
 #ifdef CONFIG_VIRTUAL_MEM_MAP
 
-static int
+int
 create_mem_map_page_table (u64 start, u64 end, void *arg)
 {
        unsigned long address, start_page, end_page;
@@ -436,17 +434,7 @@ ia64_pfn_valid (unsigned long pfn)
        return __get_user(byte, (char *) pfn_to_page(pfn)) == 0;
 }
 
-static int
-count_dma_pages (u64 start, u64 end, void *arg)
-{
-       unsigned long *count = arg;
-
-       if (end <= MAX_DMA_ADDRESS)
-               *count += (end - start) >> PAGE_SHIFT;
-       return 0;
-}
-
-static int
+int
 find_largest_hole (u64 start, u64 end, void *arg)
 {
        u64 *max_gap = arg;
@@ -462,7 +450,7 @@ find_largest_hole (u64 start, u64 end, void *arg)
 }
 #endif /* CONFIG_VIRTUAL_MEM_MAP */
 
-static int
+int
 count_pages (u64 start, u64 end, void *arg)
 {
        unsigned long *count = arg;
@@ -471,94 +459,6 @@ count_pages (u64 start, u64 end, void *arg)
        return 0;
 }
 
-/*
- * Set up the page tables.
- */
-
-#ifdef CONFIG_DISCONTIGMEM
-void
-paging_init (void)
-{
-       extern void discontig_paging_init(void);
-
-       discontig_paging_init();
-       efi_memmap_walk(count_pages, &num_physpages);
-       zero_page_memmap_ptr = virt_to_page(ia64_imva(empty_zero_page));
-}
-#else /* !CONFIG_DISCONTIGMEM */
-void
-paging_init (void)
-{
-       unsigned long max_dma;
-       unsigned long zones_size[MAX_NR_ZONES];
-#  ifdef CONFIG_VIRTUAL_MEM_MAP
-       unsigned long zholes_size[MAX_NR_ZONES];
-       unsigned long max_gap;
-#  endif
-
-       /* initialize mem_map[] */
-
-       memset(zones_size, 0, sizeof(zones_size));
-
-       num_physpages = 0;
-       efi_memmap_walk(count_pages, &num_physpages);
-
-       max_dma = virt_to_phys((void *) MAX_DMA_ADDRESS) >> PAGE_SHIFT;
-
-#  ifdef CONFIG_VIRTUAL_MEM_MAP
-       memset(zholes_size, 0, sizeof(zholes_size));
-
-       num_dma_physpages = 0;
-       efi_memmap_walk(count_dma_pages, &num_dma_physpages);
-
-       if (max_low_pfn < max_dma) {
-               zones_size[ZONE_DMA] = max_low_pfn;
-               zholes_size[ZONE_DMA] = max_low_pfn - num_dma_physpages;
-       } else {
-               zones_size[ZONE_DMA] = max_dma;
-               zholes_size[ZONE_DMA] = max_dma - num_dma_physpages;
-               if (num_physpages > num_dma_physpages) {
-                       zones_size[ZONE_NORMAL] = max_low_pfn - max_dma;
-                       zholes_size[ZONE_NORMAL] = ((max_low_pfn - max_dma)
-                                                   - (num_physpages - num_dma_physpages));
-               }
-       }
-
-       max_gap = 0;
-       efi_memmap_walk(find_largest_hole, (u64 *)&max_gap);
-       if (max_gap < LARGE_GAP) {
-               vmem_map = (struct page *) 0;
-               free_area_init_node(0, &contig_page_data, NULL, zones_size, 0, zholes_size);
-               mem_map = contig_page_data.node_mem_map;
-       }
-       else {
-               unsigned long map_size;
-
-               /* allocate virtual_mem_map */
-
-               map_size = PAGE_ALIGN(max_low_pfn * sizeof(struct page));
-               vmalloc_end -= map_size;
-               vmem_map = (struct page *) vmalloc_end;
-               efi_memmap_walk(create_mem_map_page_table, 0);
-
-               free_area_init_node(0, &contig_page_data, vmem_map, zones_size, 0, zholes_size);
-
-               mem_map = contig_page_data.node_mem_map;
-               printk("Virtual mem_map starts at 0x%p\n", mem_map);
-       }
-#  else /* !CONFIG_VIRTUAL_MEM_MAP */
-       if (max_low_pfn < max_dma)
-               zones_size[ZONE_DMA] = max_low_pfn;
-       else {
-               zones_size[ZONE_DMA] = max_dma;
-               zones_size[ZONE_NORMAL] = max_low_pfn - max_dma;
-       }
-       free_area_init(zones_size);
-#  endif /* !CONFIG_VIRTUAL_MEM_MAP */
-       zero_page_memmap_ptr = virt_to_page(ia64_imva(empty_zero_page));
-}
-#endif /* !CONFIG_DISCONTIGMEM */
-
 static int
 count_reserved_pages (u64 start, u64 end, void *arg)
 {
index 074219720d618c0b21e55f5474ee0f120f30cc15..2b2d839fd421dd3f87c2bf7d0518988c928a8548 100644 (file)
@@ -7,6 +7,9 @@
  * for more details.
  */
 
+#include <linux/config.h>
+#include <linux/mm.h>
+
 /*
  * Entries defined so far:
  *     - boot param structure itself
@@ -31,6 +34,7 @@ extern void find_memory (void);
 extern void reserve_memory (void);
 extern void find_initrd (void);
 extern int filter_rsvd_memory (unsigned long start, unsigned long end, void *arg);
+extern int count_pages (u64 start, u64 end, void *arg);
 
 #ifdef CONFIG_DISCONTIGMEM
 extern void call_pernode_memory (unsigned long start, unsigned long end, void *arg);
@@ -38,4 +42,11 @@ extern void call_pernode_memory (unsigned long start, unsigned long end, void *a
 
 #define IGNORE_PFN0    1       /* XXX fix me: ignore pfn 0 until TLB miss handler is updated... */
 
+#ifdef CONFIG_VIRTUAL_MEM_MAP
+#define LARGE_GAP      0x40000000 /* Use virtual mem map if hole is > than this */
+extern struct page *vmem_map;
+extern int find_largest_hole (u64 start, u64 end, void *arg);
+extern int create_mem_map_page_table (u64 start, u64 end, void *arg);
+#endif
+
 #endif /* meminit_h */