vserver 1.9.3
[linux-2.6.git] / arch / ia64 / mm / init.c
index c0dfe9c..87a8016 100644 (file)
@@ -63,14 +63,16 @@ check_pgt_cache (void)
        low = pgt_cache_water[0];
        high = pgt_cache_water[1];
 
+       preempt_disable();
        if (pgtable_cache_size > (u64) high) {
                do {
                        if (pgd_quicklist)
-                               free_page((unsigned long)pgd_alloc_one_fast(0));
+                               free_page((unsigned long)pgd_alloc_one_fast(NULL));
                        if (pmd_quicklist)
-                               free_page((unsigned long)pmd_alloc_one_fast(0, 0));
+                               free_page((unsigned long)pmd_alloc_one_fast(NULL, 0));
                } while (pgtable_cache_size > (u64) low);
        }
+       preempt_enable();
 }
 
 void
@@ -123,15 +125,12 @@ ia64_init_addr_space (void)
         */
        vma = kmem_cache_alloc(vm_area_cachep, SLAB_KERNEL);
        if (vma) {
+               memset(vma, 0, sizeof(*vma));
                vma->vm_mm = current->mm;
                vma->vm_start = current->thread.rbs_bot & PAGE_MASK;
                vma->vm_end = vma->vm_start + PAGE_SIZE;
                vma->vm_page_prot = protection_map[VM_DATA_DEFAULT_FLAGS & 0x7];
-               vma->vm_flags = VM_READ|VM_WRITE|VM_MAYREAD|VM_MAYWRITE|VM_GROWSUP;
-               vma->vm_ops = NULL;
-               vma->vm_pgoff = 0;
-               vma->vm_file = NULL;
-               vma->vm_private_data = NULL;
+               vma->vm_flags = VM_DATA_DEFAULT_FLAGS | VM_GROWSUP;
                insert_vm_struct(current->mm, vma);
        }
 
@@ -172,7 +171,7 @@ free_initrd_mem (unsigned long start, unsigned long end)
 {
        struct page *page;
        /*
-        * EFI uses 4KB pages while the kernel can use 4KB  or bigger.
+        * EFI uses 4KB pages while the kernel can use 4KB or bigger.
         * Thus EFI and the kernel may have different page sizes. It is
         * therefore possible to have the initrd share the same page as
         * the end of the kernel (given current setup).
@@ -220,7 +219,7 @@ free_initrd_mem (unsigned long start, unsigned long end)
 }
 
 /*
- * This is like put_dirty_page() but installs a clean page in the kernel's page table.
+ * This installs a clean page in the kernel's page table.
  */
 struct page *
 put_kernel_page (struct page *page, unsigned long address, pgprot_t pgprot)
@@ -275,11 +274,11 @@ setup_gate (void)
        ia64_patch_gate();
 }
 
-void __init
+void __devinit
 ia64_mmu_init (void *my_cpu_data)
 {
        unsigned long psr, pta, impl_va_bits;
-       extern void __init tlb_init (void);
+       extern void __devinit tlb_init (void);
        int cpu;
 
 #ifdef CONFIG_DISABLE_VHPT
@@ -343,6 +342,7 @@ ia64_mmu_init (void *my_cpu_data)
 
 #ifdef CONFIG_HUGETLB_PAGE
        ia64_set_rr(HPAGE_REGION_BASE, HPAGE_SHIFT << 2);
+       ia64_srlz_d();
 #endif
 
        cpu = smp_processor_id();
@@ -429,20 +429,22 @@ virtual_memmap_init (u64 start, u64 end, void *arg)
                    / sizeof(struct page));
 
        if (map_start < map_end)
-               memmap_init_zone(map_start, (unsigned long) (map_end - map_start),
+               memmap_init_zone((unsigned long)(map_end - map_start),
                                 args->nid, args->zone, page_to_pfn(map_start));
        return 0;
 }
 
 void
-memmap_init (struct page *start, unsigned long size, int nid,
-            unsigned long zone, unsigned long start_pfn)
+memmap_init (unsigned long size, int nid, unsigned long zone,
+            unsigned long start_pfn)
 {
        if (!vmem_map)
-               memmap_init_zone(start, size, nid, zone, start_pfn);
+               memmap_init_zone(size, nid, zone, start_pfn);
        else {
+               struct page *start;
                struct memmap_init_callback_data args;
 
+               start = pfn_to_page(start_pfn);
                args.start = start;
                args.end = start + size;
                args.nid = nid;
@@ -458,9 +460,9 @@ ia64_pfn_valid (unsigned long pfn)
        char byte;
        struct page *pg = pfn_to_page(pfn);
 
-       return     (__get_user(byte, (char *) pg) == 0)
+       return     (__get_user(byte, (char __user *) pg) == 0)
                && ((((u64)pg & PAGE_MASK) == (((u64)(pg + 1) - 1) & PAGE_MASK))
-                       || (__get_user(byte, (char *) (pg + 1) - 1) == 0));
+                       || (__get_user(byte, (char __user *) (pg + 1) - 1) == 0));
 }
 EXPORT_SYMBOL(ia64_pfn_valid);
 
@@ -582,9 +584,9 @@ mem_init (void)
                if (!fsyscall_table[i] || nolwsys)
                        fsyscall_table[i] = sys_call_table[i] | 1;
        }
-       setup_gate();   /* setup gate pages before we free up boot memory... */
+       setup_gate();
 
 #ifdef CONFIG_IA32_SUPPORT
-       ia32_boot_gdt_init();
+       ia32_mem_init();
 #endif
 }