X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=arch%2Fia64%2Fmm%2Finit.c;h=87a8016f58c5a3221da2d77143ea324560cb3a5a;hb=c7b5ebbddf7bcd3651947760f423e3783bbe6573;hp=c0dfe9c47fed423dece6f783e380cc3558c48952;hpb=5273a3df6485dc2ad6aa7ddd441b9a21970f003b;p=linux-2.6.git diff --git a/arch/ia64/mm/init.c b/arch/ia64/mm/init.c index c0dfe9c47..87a8016f5 100644 --- a/arch/ia64/mm/init.c +++ b/arch/ia64/mm/init.c @@ -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 }