diff options
Diffstat (limited to 'arch/mn10300/mm/init.c')
-rw-r--r-- | arch/mn10300/mm/init.c | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/arch/mn10300/mm/init.c b/arch/mn10300/mm/init.c index 6e6bc0e51521..48907cc3bdb7 100644 --- a/arch/mn10300/mm/init.c +++ b/arch/mn10300/mm/init.c | |||
@@ -41,6 +41,10 @@ DEFINE_PER_CPU(struct mmu_gather, mmu_gathers); | |||
41 | 41 | ||
42 | unsigned long highstart_pfn, highend_pfn; | 42 | unsigned long highstart_pfn, highend_pfn; |
43 | 43 | ||
44 | #ifdef CONFIG_MN10300_HAS_ATOMIC_OPS_UNIT | ||
45 | static struct vm_struct user_iomap_vm; | ||
46 | #endif | ||
47 | |||
44 | /* | 48 | /* |
45 | * set up paging | 49 | * set up paging |
46 | */ | 50 | */ |
@@ -73,7 +77,24 @@ void __init paging_init(void) | |||
73 | /* pass the memory from the bootmem allocator to the main allocator */ | 77 | /* pass the memory from the bootmem allocator to the main allocator */ |
74 | free_area_init(zones_size); | 78 | free_area_init(zones_size); |
75 | 79 | ||
76 | __flush_tlb_all(); | 80 | #ifdef CONFIG_MN10300_HAS_ATOMIC_OPS_UNIT |
81 | /* The Atomic Operation Unit registers need to be mapped to userspace | ||
82 | * for all processes. The following uses vm_area_register_early() to | ||
83 | * reserve the first page of the vmalloc area and sets the pte for that | ||
84 | * page. | ||
85 | * | ||
86 | * glibc hardcodes this virtual mapping, so we're pretty much stuck with | ||
87 | * it from now on. | ||
88 | */ | ||
89 | user_iomap_vm.flags = VM_USERMAP; | ||
90 | user_iomap_vm.size = 1 << PAGE_SHIFT; | ||
91 | vm_area_register_early(&user_iomap_vm, PAGE_SIZE); | ||
92 | ppte = kernel_vmalloc_ptes; | ||
93 | set_pte(ppte, pfn_pte(USER_ATOMIC_OPS_PAGE_ADDR >> PAGE_SHIFT, | ||
94 | PAGE_USERIO)); | ||
95 | #endif | ||
96 | |||
97 | local_flush_tlb_all(); | ||
77 | } | 98 | } |
78 | 99 | ||
79 | /* | 100 | /* |
@@ -84,8 +105,7 @@ void __init mem_init(void) | |||
84 | int codesize, reservedpages, datasize, initsize; | 105 | int codesize, reservedpages, datasize, initsize; |
85 | int tmp; | 106 | int tmp; |
86 | 107 | ||
87 | if (!mem_map) | 108 | BUG_ON(!mem_map); |
88 | BUG(); | ||
89 | 109 | ||
90 | #define START_PFN (contig_page_data.bdata->node_min_pfn) | 110 | #define START_PFN (contig_page_data.bdata->node_min_pfn) |
91 | #define MAX_LOW_PFN (contig_page_data.bdata->node_low_pfn) | 111 | #define MAX_LOW_PFN (contig_page_data.bdata->node_low_pfn) |