xref: /openbmc/linux/arch/x86/mm/init.c (revision dd548cf9)
1 #include <linux/gfp.h>
2 #include <linux/initrd.h>
3 #include <linux/ioport.h>
4 #include <linux/swap.h>
5 #include <linux/memblock.h>
6 #include <linux/bootmem.h>	/* for max_low_pfn */
7 
8 #include <asm/cacheflush.h>
9 #include <asm/e820.h>
10 #include <asm/init.h>
11 #include <asm/page.h>
12 #include <asm/page_types.h>
13 #include <asm/sections.h>
14 #include <asm/setup.h>
15 #include <asm/tlbflush.h>
16 #include <asm/tlb.h>
17 #include <asm/proto.h>
18 #include <asm/dma.h>		/* for MAX_DMA_PFN */
19 #include <asm/microcode.h>
20 
21 /*
22  * We need to define the tracepoints somewhere, and tlb.c
23  * is only compied when SMP=y.
24  */
25 #define CREATE_TRACE_POINTS
26 #include <trace/events/tlb.h>
27 
28 #include "mm_internal.h"
29 
30 /*
31  * Tables translating between page_cache_type_t and pte encoding.
32  * Minimal supported modes are defined statically, modified if more supported
33  * cache modes are available.
34  * Index into __cachemode2pte_tbl is the cachemode.
35  * Index into __pte2cachemode_tbl are the caching attribute bits of the pte
36  * (_PAGE_PWT, _PAGE_PCD, _PAGE_PAT) at index bit positions 0, 1, 2.
37  */
38 uint16_t __cachemode2pte_tbl[_PAGE_CACHE_MODE_NUM] = {
39 	[_PAGE_CACHE_MODE_WB]		= 0,
40 	[_PAGE_CACHE_MODE_WC]		= _PAGE_PWT,
41 	[_PAGE_CACHE_MODE_UC_MINUS]	= _PAGE_PCD,
42 	[_PAGE_CACHE_MODE_UC]		= _PAGE_PCD | _PAGE_PWT,
43 	[_PAGE_CACHE_MODE_WT]		= _PAGE_PCD,
44 	[_PAGE_CACHE_MODE_WP]		= _PAGE_PCD,
45 };
46 EXPORT_SYMBOL_GPL(__cachemode2pte_tbl);
47 uint8_t __pte2cachemode_tbl[8] = {
48 	[__pte2cm_idx(0)] = _PAGE_CACHE_MODE_WB,
49 	[__pte2cm_idx(_PAGE_PWT)] = _PAGE_CACHE_MODE_WC,
50 	[__pte2cm_idx(_PAGE_PCD)] = _PAGE_CACHE_MODE_UC_MINUS,
51 	[__pte2cm_idx(_PAGE_PWT | _PAGE_PCD)] = _PAGE_CACHE_MODE_UC,
52 	[__pte2cm_idx(_PAGE_PAT)] = _PAGE_CACHE_MODE_WB,
53 	[__pte2cm_idx(_PAGE_PWT | _PAGE_PAT)] = _PAGE_CACHE_MODE_WC,
54 	[__pte2cm_idx(_PAGE_PCD | _PAGE_PAT)] = _PAGE_CACHE_MODE_UC_MINUS,
55 	[__pte2cm_idx(_PAGE_PWT | _PAGE_PCD | _PAGE_PAT)] = _PAGE_CACHE_MODE_UC,
56 };
57 EXPORT_SYMBOL_GPL(__pte2cachemode_tbl);
58 
59 static unsigned long __initdata pgt_buf_start;
60 static unsigned long __initdata pgt_buf_end;
61 static unsigned long __initdata pgt_buf_top;
62 
63 static unsigned long min_pfn_mapped;
64 
65 static bool __initdata can_use_brk_pgt = true;
66 
67 /*
68  * Pages returned are already directly mapped.
69  *
70  * Changing that is likely to break Xen, see commit:
71  *
72  *    279b706 x86,xen: introduce x86_init.mapping.pagetable_reserve
73  *
74  * for detailed information.
75  */
76 __ref void *alloc_low_pages(unsigned int num)
77 {
78 	unsigned long pfn;
79 	int i;
80 
81 	if (after_bootmem) {
82 		unsigned int order;
83 
84 		order = get_order((unsigned long)num << PAGE_SHIFT);
85 		return (void *)__get_free_pages(GFP_ATOMIC | __GFP_NOTRACK |
86 						__GFP_ZERO, order);
87 	}
88 
89 	if ((pgt_buf_end + num) > pgt_buf_top || !can_use_brk_pgt) {
90 		unsigned long ret;
91 		if (min_pfn_mapped >= max_pfn_mapped)
92 			panic("alloc_low_pages: ran out of memory");
93 		ret = memblock_find_in_range(min_pfn_mapped << PAGE_SHIFT,
94 					max_pfn_mapped << PAGE_SHIFT,
95 					PAGE_SIZE * num , PAGE_SIZE);
96 		if (!ret)
97 			panic("alloc_low_pages: can not alloc memory");
98 		memblock_reserve(ret, PAGE_SIZE * num);
99 		pfn = ret >> PAGE_SHIFT;
100 	} else {
101 		pfn = pgt_buf_end;
102 		pgt_buf_end += num;
103 		printk(KERN_DEBUG "BRK [%#010lx, %#010lx] PGTABLE\n",
104 			pfn << PAGE_SHIFT, (pgt_buf_end << PAGE_SHIFT) - 1);
105 	}
106 
107 	for (i = 0; i < num; i++) {
108 		void *adr;
109 
110 		adr = __va((pfn + i) << PAGE_SHIFT);
111 		clear_page(adr);
112 	}
113 
114 	return __va(pfn << PAGE_SHIFT);
115 }
116 
117 /* need 3 4k for initial PMD_SIZE,  3 4k for 0-ISA_END_ADDRESS */
118 #define INIT_PGT_BUF_SIZE	(6 * PAGE_SIZE)
119 RESERVE_BRK(early_pgt_alloc, INIT_PGT_BUF_SIZE);
120 void  __init early_alloc_pgt_buf(void)
121 {
122 	unsigned long tables = INIT_PGT_BUF_SIZE;
123 	phys_addr_t base;
124 
125 	base = __pa(extend_brk(tables, PAGE_SIZE));
126 
127 	pgt_buf_start = base >> PAGE_SHIFT;
128 	pgt_buf_end = pgt_buf_start;
129 	pgt_buf_top = pgt_buf_start + (tables >> PAGE_SHIFT);
130 }
131 
132 int after_bootmem;
133 
134 int direct_gbpages
135 #ifdef CONFIG_DIRECT_GBPAGES
136 				= 1
137 #endif
138 ;
139 
140 static void __init init_gbpages(void)
141 {
142 #ifdef CONFIG_X86_64
143 	if (direct_gbpages && cpu_has_gbpages)
144 		printk(KERN_INFO "Using GB pages for direct mapping\n");
145 	else
146 		direct_gbpages = 0;
147 #endif
148 }
149 
150 struct map_range {
151 	unsigned long start;
152 	unsigned long end;
153 	unsigned page_size_mask;
154 };
155 
156 static int page_size_mask;
157 
158 static void __init probe_page_size_mask(void)
159 {
160 	init_gbpages();
161 
162 #if !defined(CONFIG_DEBUG_PAGEALLOC) && !defined(CONFIG_KMEMCHECK)
163 	/*
164 	 * For CONFIG_DEBUG_PAGEALLOC, identity mapping will use small pages.
165 	 * This will simplify cpa(), which otherwise needs to support splitting
166 	 * large pages into small in interrupt context, etc.
167 	 */
168 	if (direct_gbpages)
169 		page_size_mask |= 1 << PG_LEVEL_1G;
170 	if (cpu_has_pse)
171 		page_size_mask |= 1 << PG_LEVEL_2M;
172 #endif
173 
174 	/* Enable PSE if available */
175 	if (cpu_has_pse)
176 		set_in_cr4(X86_CR4_PSE);
177 
178 	/* Enable PGE if available */
179 	if (cpu_has_pge) {
180 		set_in_cr4(X86_CR4_PGE);
181 		__supported_pte_mask |= _PAGE_GLOBAL;
182 	}
183 }
184 
185 #ifdef CONFIG_X86_32
186 #define NR_RANGE_MR 3
187 #else /* CONFIG_X86_64 */
188 #define NR_RANGE_MR 5
189 #endif
190 
191 static int __meminit save_mr(struct map_range *mr, int nr_range,
192 			     unsigned long start_pfn, unsigned long end_pfn,
193 			     unsigned long page_size_mask)
194 {
195 	if (start_pfn < end_pfn) {
196 		if (nr_range >= NR_RANGE_MR)
197 			panic("run out of range for init_memory_mapping\n");
198 		mr[nr_range].start = start_pfn<<PAGE_SHIFT;
199 		mr[nr_range].end   = end_pfn<<PAGE_SHIFT;
200 		mr[nr_range].page_size_mask = page_size_mask;
201 		nr_range++;
202 	}
203 
204 	return nr_range;
205 }
206 
207 /*
208  * adjust the page_size_mask for small range to go with
209  *	big page size instead small one if nearby are ram too.
210  */
211 static void __init_refok adjust_range_page_size_mask(struct map_range *mr,
212 							 int nr_range)
213 {
214 	int i;
215 
216 	for (i = 0; i < nr_range; i++) {
217 		if ((page_size_mask & (1<<PG_LEVEL_2M)) &&
218 		    !(mr[i].page_size_mask & (1<<PG_LEVEL_2M))) {
219 			unsigned long start = round_down(mr[i].start, PMD_SIZE);
220 			unsigned long end = round_up(mr[i].end, PMD_SIZE);
221 
222 #ifdef CONFIG_X86_32
223 			if ((end >> PAGE_SHIFT) > max_low_pfn)
224 				continue;
225 #endif
226 
227 			if (memblock_is_region_memory(start, end - start))
228 				mr[i].page_size_mask |= 1<<PG_LEVEL_2M;
229 		}
230 		if ((page_size_mask & (1<<PG_LEVEL_1G)) &&
231 		    !(mr[i].page_size_mask & (1<<PG_LEVEL_1G))) {
232 			unsigned long start = round_down(mr[i].start, PUD_SIZE);
233 			unsigned long end = round_up(mr[i].end, PUD_SIZE);
234 
235 			if (memblock_is_region_memory(start, end - start))
236 				mr[i].page_size_mask |= 1<<PG_LEVEL_1G;
237 		}
238 	}
239 }
240 
241 static int __meminit split_mem_range(struct map_range *mr, int nr_range,
242 				     unsigned long start,
243 				     unsigned long end)
244 {
245 	unsigned long start_pfn, end_pfn, limit_pfn;
246 	unsigned long pfn;
247 	int i;
248 
249 	limit_pfn = PFN_DOWN(end);
250 
251 	/* head if not big page alignment ? */
252 	pfn = start_pfn = PFN_DOWN(start);
253 #ifdef CONFIG_X86_32
254 	/*
255 	 * Don't use a large page for the first 2/4MB of memory
256 	 * because there are often fixed size MTRRs in there
257 	 * and overlapping MTRRs into large pages can cause
258 	 * slowdowns.
259 	 */
260 	if (pfn == 0)
261 		end_pfn = PFN_DOWN(PMD_SIZE);
262 	else
263 		end_pfn = round_up(pfn, PFN_DOWN(PMD_SIZE));
264 #else /* CONFIG_X86_64 */
265 	end_pfn = round_up(pfn, PFN_DOWN(PMD_SIZE));
266 #endif
267 	if (end_pfn > limit_pfn)
268 		end_pfn = limit_pfn;
269 	if (start_pfn < end_pfn) {
270 		nr_range = save_mr(mr, nr_range, start_pfn, end_pfn, 0);
271 		pfn = end_pfn;
272 	}
273 
274 	/* big page (2M) range */
275 	start_pfn = round_up(pfn, PFN_DOWN(PMD_SIZE));
276 #ifdef CONFIG_X86_32
277 	end_pfn = round_down(limit_pfn, PFN_DOWN(PMD_SIZE));
278 #else /* CONFIG_X86_64 */
279 	end_pfn = round_up(pfn, PFN_DOWN(PUD_SIZE));
280 	if (end_pfn > round_down(limit_pfn, PFN_DOWN(PMD_SIZE)))
281 		end_pfn = round_down(limit_pfn, PFN_DOWN(PMD_SIZE));
282 #endif
283 
284 	if (start_pfn < end_pfn) {
285 		nr_range = save_mr(mr, nr_range, start_pfn, end_pfn,
286 				page_size_mask & (1<<PG_LEVEL_2M));
287 		pfn = end_pfn;
288 	}
289 
290 #ifdef CONFIG_X86_64
291 	/* big page (1G) range */
292 	start_pfn = round_up(pfn, PFN_DOWN(PUD_SIZE));
293 	end_pfn = round_down(limit_pfn, PFN_DOWN(PUD_SIZE));
294 	if (start_pfn < end_pfn) {
295 		nr_range = save_mr(mr, nr_range, start_pfn, end_pfn,
296 				page_size_mask &
297 				 ((1<<PG_LEVEL_2M)|(1<<PG_LEVEL_1G)));
298 		pfn = end_pfn;
299 	}
300 
301 	/* tail is not big page (1G) alignment */
302 	start_pfn = round_up(pfn, PFN_DOWN(PMD_SIZE));
303 	end_pfn = round_down(limit_pfn, PFN_DOWN(PMD_SIZE));
304 	if (start_pfn < end_pfn) {
305 		nr_range = save_mr(mr, nr_range, start_pfn, end_pfn,
306 				page_size_mask & (1<<PG_LEVEL_2M));
307 		pfn = end_pfn;
308 	}
309 #endif
310 
311 	/* tail is not big page (2M) alignment */
312 	start_pfn = pfn;
313 	end_pfn = limit_pfn;
314 	nr_range = save_mr(mr, nr_range, start_pfn, end_pfn, 0);
315 
316 	if (!after_bootmem)
317 		adjust_range_page_size_mask(mr, nr_range);
318 
319 	/* try to merge same page size and continuous */
320 	for (i = 0; nr_range > 1 && i < nr_range - 1; i++) {
321 		unsigned long old_start;
322 		if (mr[i].end != mr[i+1].start ||
323 		    mr[i].page_size_mask != mr[i+1].page_size_mask)
324 			continue;
325 		/* move it */
326 		old_start = mr[i].start;
327 		memmove(&mr[i], &mr[i+1],
328 			(nr_range - 1 - i) * sizeof(struct map_range));
329 		mr[i--].start = old_start;
330 		nr_range--;
331 	}
332 
333 	for (i = 0; i < nr_range; i++)
334 		printk(KERN_DEBUG " [mem %#010lx-%#010lx] page %s\n",
335 				mr[i].start, mr[i].end - 1,
336 			(mr[i].page_size_mask & (1<<PG_LEVEL_1G))?"1G":(
337 			 (mr[i].page_size_mask & (1<<PG_LEVEL_2M))?"2M":"4k"));
338 
339 	return nr_range;
340 }
341 
342 struct range pfn_mapped[E820_X_MAX];
343 int nr_pfn_mapped;
344 
345 static void add_pfn_range_mapped(unsigned long start_pfn, unsigned long end_pfn)
346 {
347 	nr_pfn_mapped = add_range_with_merge(pfn_mapped, E820_X_MAX,
348 					     nr_pfn_mapped, start_pfn, end_pfn);
349 	nr_pfn_mapped = clean_sort_range(pfn_mapped, E820_X_MAX);
350 
351 	max_pfn_mapped = max(max_pfn_mapped, end_pfn);
352 
353 	if (start_pfn < (1UL<<(32-PAGE_SHIFT)))
354 		max_low_pfn_mapped = max(max_low_pfn_mapped,
355 					 min(end_pfn, 1UL<<(32-PAGE_SHIFT)));
356 }
357 
358 bool pfn_range_is_mapped(unsigned long start_pfn, unsigned long end_pfn)
359 {
360 	int i;
361 
362 	for (i = 0; i < nr_pfn_mapped; i++)
363 		if ((start_pfn >= pfn_mapped[i].start) &&
364 		    (end_pfn <= pfn_mapped[i].end))
365 			return true;
366 
367 	return false;
368 }
369 
370 /*
371  * Setup the direct mapping of the physical memory at PAGE_OFFSET.
372  * This runs before bootmem is initialized and gets pages directly from
373  * the physical memory. To access them they are temporarily mapped.
374  */
375 unsigned long __init_refok init_memory_mapping(unsigned long start,
376 					       unsigned long end)
377 {
378 	struct map_range mr[NR_RANGE_MR];
379 	unsigned long ret = 0;
380 	int nr_range, i;
381 
382 	pr_info("init_memory_mapping: [mem %#010lx-%#010lx]\n",
383 	       start, end - 1);
384 
385 	memset(mr, 0, sizeof(mr));
386 	nr_range = split_mem_range(mr, 0, start, end);
387 
388 	for (i = 0; i < nr_range; i++)
389 		ret = kernel_physical_mapping_init(mr[i].start, mr[i].end,
390 						   mr[i].page_size_mask);
391 
392 	add_pfn_range_mapped(start >> PAGE_SHIFT, ret >> PAGE_SHIFT);
393 
394 	return ret >> PAGE_SHIFT;
395 }
396 
397 /*
398  * We need to iterate through the E820 memory map and create direct mappings
399  * for only E820_RAM and E820_KERN_RESERVED regions. We cannot simply
400  * create direct mappings for all pfns from [0 to max_low_pfn) and
401  * [4GB to max_pfn) because of possible memory holes in high addresses
402  * that cannot be marked as UC by fixed/variable range MTRRs.
403  * Depending on the alignment of E820 ranges, this may possibly result
404  * in using smaller size (i.e. 4K instead of 2M or 1G) page tables.
405  *
406  * init_mem_mapping() calls init_range_memory_mapping() with big range.
407  * That range would have hole in the middle or ends, and only ram parts
408  * will be mapped in init_range_memory_mapping().
409  */
410 static unsigned long __init init_range_memory_mapping(
411 					   unsigned long r_start,
412 					   unsigned long r_end)
413 {
414 	unsigned long start_pfn, end_pfn;
415 	unsigned long mapped_ram_size = 0;
416 	int i;
417 
418 	for_each_mem_pfn_range(i, MAX_NUMNODES, &start_pfn, &end_pfn, NULL) {
419 		u64 start = clamp_val(PFN_PHYS(start_pfn), r_start, r_end);
420 		u64 end = clamp_val(PFN_PHYS(end_pfn), r_start, r_end);
421 		if (start >= end)
422 			continue;
423 
424 		/*
425 		 * if it is overlapping with brk pgt, we need to
426 		 * alloc pgt buf from memblock instead.
427 		 */
428 		can_use_brk_pgt = max(start, (u64)pgt_buf_end<<PAGE_SHIFT) >=
429 				    min(end, (u64)pgt_buf_top<<PAGE_SHIFT);
430 		init_memory_mapping(start, end);
431 		mapped_ram_size += end - start;
432 		can_use_brk_pgt = true;
433 	}
434 
435 	return mapped_ram_size;
436 }
437 
438 static unsigned long __init get_new_step_size(unsigned long step_size)
439 {
440 	/*
441 	 * Explain why we shift by 5 and why we don't have to worry about
442 	 * 'step_size << 5' overflowing:
443 	 *
444 	 * initial mapped size is PMD_SIZE (2M).
445 	 * We can not set step_size to be PUD_SIZE (1G) yet.
446 	 * In worse case, when we cross the 1G boundary, and
447 	 * PG_LEVEL_2M is not set, we will need 1+1+512 pages (2M + 8k)
448 	 * to map 1G range with PTE. Use 5 as shift for now.
449 	 *
450 	 * Don't need to worry about overflow, on 32bit, when step_size
451 	 * is 0, round_down() returns 0 for start, and that turns it
452 	 * into 0x100000000ULL.
453 	 */
454 	return step_size << 5;
455 }
456 
457 /**
458  * memory_map_top_down - Map [map_start, map_end) top down
459  * @map_start: start address of the target memory range
460  * @map_end: end address of the target memory range
461  *
462  * This function will setup direct mapping for memory range
463  * [map_start, map_end) in top-down. That said, the page tables
464  * will be allocated at the end of the memory, and we map the
465  * memory in top-down.
466  */
467 static void __init memory_map_top_down(unsigned long map_start,
468 				       unsigned long map_end)
469 {
470 	unsigned long real_end, start, last_start;
471 	unsigned long step_size;
472 	unsigned long addr;
473 	unsigned long mapped_ram_size = 0;
474 	unsigned long new_mapped_ram_size;
475 
476 	/* xen has big range in reserved near end of ram, skip it at first.*/
477 	addr = memblock_find_in_range(map_start, map_end, PMD_SIZE, PMD_SIZE);
478 	real_end = addr + PMD_SIZE;
479 
480 	/* step_size need to be small so pgt_buf from BRK could cover it */
481 	step_size = PMD_SIZE;
482 	max_pfn_mapped = 0; /* will get exact value next */
483 	min_pfn_mapped = real_end >> PAGE_SHIFT;
484 	last_start = start = real_end;
485 
486 	/*
487 	 * We start from the top (end of memory) and go to the bottom.
488 	 * The memblock_find_in_range() gets us a block of RAM from the
489 	 * end of RAM in [min_pfn_mapped, max_pfn_mapped) used as new pages
490 	 * for page table.
491 	 */
492 	while (last_start > map_start) {
493 		if (last_start > step_size) {
494 			start = round_down(last_start - 1, step_size);
495 			if (start < map_start)
496 				start = map_start;
497 		} else
498 			start = map_start;
499 		new_mapped_ram_size = init_range_memory_mapping(start,
500 							last_start);
501 		last_start = start;
502 		min_pfn_mapped = last_start >> PAGE_SHIFT;
503 		/* only increase step_size after big range get mapped */
504 		if (new_mapped_ram_size > mapped_ram_size)
505 			step_size = get_new_step_size(step_size);
506 		mapped_ram_size += new_mapped_ram_size;
507 	}
508 
509 	if (real_end < map_end)
510 		init_range_memory_mapping(real_end, map_end);
511 }
512 
513 /**
514  * memory_map_bottom_up - Map [map_start, map_end) bottom up
515  * @map_start: start address of the target memory range
516  * @map_end: end address of the target memory range
517  *
518  * This function will setup direct mapping for memory range
519  * [map_start, map_end) in bottom-up. Since we have limited the
520  * bottom-up allocation above the kernel, the page tables will
521  * be allocated just above the kernel and we map the memory
522  * in [map_start, map_end) in bottom-up.
523  */
524 static void __init memory_map_bottom_up(unsigned long map_start,
525 					unsigned long map_end)
526 {
527 	unsigned long next, new_mapped_ram_size, start;
528 	unsigned long mapped_ram_size = 0;
529 	/* step_size need to be small so pgt_buf from BRK could cover it */
530 	unsigned long step_size = PMD_SIZE;
531 
532 	start = map_start;
533 	min_pfn_mapped = start >> PAGE_SHIFT;
534 
535 	/*
536 	 * We start from the bottom (@map_start) and go to the top (@map_end).
537 	 * The memblock_find_in_range() gets us a block of RAM from the
538 	 * end of RAM in [min_pfn_mapped, max_pfn_mapped) used as new pages
539 	 * for page table.
540 	 */
541 	while (start < map_end) {
542 		if (map_end - start > step_size) {
543 			next = round_up(start + 1, step_size);
544 			if (next > map_end)
545 				next = map_end;
546 		} else
547 			next = map_end;
548 
549 		new_mapped_ram_size = init_range_memory_mapping(start, next);
550 		start = next;
551 
552 		if (new_mapped_ram_size > mapped_ram_size)
553 			step_size = get_new_step_size(step_size);
554 		mapped_ram_size += new_mapped_ram_size;
555 	}
556 }
557 
558 void __init init_mem_mapping(void)
559 {
560 	unsigned long end;
561 
562 	probe_page_size_mask();
563 
564 #ifdef CONFIG_X86_64
565 	end = max_pfn << PAGE_SHIFT;
566 #else
567 	end = max_low_pfn << PAGE_SHIFT;
568 #endif
569 
570 	/* the ISA range is always mapped regardless of memory holes */
571 	init_memory_mapping(0, ISA_END_ADDRESS);
572 
573 	/*
574 	 * If the allocation is in bottom-up direction, we setup direct mapping
575 	 * in bottom-up, otherwise we setup direct mapping in top-down.
576 	 */
577 	if (memblock_bottom_up()) {
578 		unsigned long kernel_end = __pa_symbol(_end);
579 
580 		/*
581 		 * we need two separate calls here. This is because we want to
582 		 * allocate page tables above the kernel. So we first map
583 		 * [kernel_end, end) to make memory above the kernel be mapped
584 		 * as soon as possible. And then use page tables allocated above
585 		 * the kernel to map [ISA_END_ADDRESS, kernel_end).
586 		 */
587 		memory_map_bottom_up(kernel_end, end);
588 		memory_map_bottom_up(ISA_END_ADDRESS, kernel_end);
589 	} else {
590 		memory_map_top_down(ISA_END_ADDRESS, end);
591 	}
592 
593 #ifdef CONFIG_X86_64
594 	if (max_pfn > max_low_pfn) {
595 		/* can we preseve max_low_pfn ?*/
596 		max_low_pfn = max_pfn;
597 	}
598 #else
599 	early_ioremap_page_table_range_init();
600 #endif
601 
602 	load_cr3(swapper_pg_dir);
603 	__flush_tlb_all();
604 
605 	early_memtest(0, max_pfn_mapped << PAGE_SHIFT);
606 }
607 
608 /*
609  * devmem_is_allowed() checks to see if /dev/mem access to a certain address
610  * is valid. The argument is a physical page number.
611  *
612  *
613  * On x86, access has to be given to the first megabyte of ram because that area
614  * contains bios code and data regions used by X and dosemu and similar apps.
615  * Access has to be given to non-kernel-ram areas as well, these contain the PCI
616  * mmio resources as well as potential bios/acpi data regions.
617  */
618 int devmem_is_allowed(unsigned long pagenr)
619 {
620 	if (pagenr < 256)
621 		return 1;
622 	if (iomem_is_exclusive(pagenr << PAGE_SHIFT))
623 		return 0;
624 	if (!page_is_ram(pagenr))
625 		return 1;
626 	return 0;
627 }
628 
629 void free_init_pages(char *what, unsigned long begin, unsigned long end)
630 {
631 	unsigned long begin_aligned, end_aligned;
632 
633 	/* Make sure boundaries are page aligned */
634 	begin_aligned = PAGE_ALIGN(begin);
635 	end_aligned   = end & PAGE_MASK;
636 
637 	if (WARN_ON(begin_aligned != begin || end_aligned != end)) {
638 		begin = begin_aligned;
639 		end   = end_aligned;
640 	}
641 
642 	if (begin >= end)
643 		return;
644 
645 	/*
646 	 * If debugging page accesses then do not free this memory but
647 	 * mark them not present - any buggy init-section access will
648 	 * create a kernel page fault:
649 	 */
650 #ifdef CONFIG_DEBUG_PAGEALLOC
651 	printk(KERN_INFO "debug: unmapping init [mem %#010lx-%#010lx]\n",
652 		begin, end - 1);
653 	set_memory_np(begin, (end - begin) >> PAGE_SHIFT);
654 #else
655 	/*
656 	 * We just marked the kernel text read only above, now that
657 	 * we are going to free part of that, we need to make that
658 	 * writeable and non-executable first.
659 	 */
660 	set_memory_nx(begin, (end - begin) >> PAGE_SHIFT);
661 	set_memory_rw(begin, (end - begin) >> PAGE_SHIFT);
662 
663 	free_reserved_area((void *)begin, (void *)end, POISON_FREE_INITMEM, what);
664 #endif
665 }
666 
667 void free_initmem(void)
668 {
669 	free_init_pages("unused kernel",
670 			(unsigned long)(&__init_begin),
671 			(unsigned long)(&__init_end));
672 }
673 
674 #ifdef CONFIG_BLK_DEV_INITRD
675 void __init free_initrd_mem(unsigned long start, unsigned long end)
676 {
677 #ifdef CONFIG_MICROCODE_EARLY
678 	/*
679 	 * Remember, initrd memory may contain microcode or other useful things.
680 	 * Before we lose initrd mem, we need to find a place to hold them
681 	 * now that normal virtual memory is enabled.
682 	 */
683 	save_microcode_in_initrd();
684 #endif
685 
686 	/*
687 	 * end could be not aligned, and We can not align that,
688 	 * decompresser could be confused by aligned initrd_end
689 	 * We already reserve the end partial page before in
690 	 *   - i386_start_kernel()
691 	 *   - x86_64_start_kernel()
692 	 *   - relocate_initrd()
693 	 * So here We can do PAGE_ALIGN() safely to get partial page to be freed
694 	 */
695 	free_init_pages("initrd", start, PAGE_ALIGN(end));
696 }
697 #endif
698 
699 void __init zone_sizes_init(void)
700 {
701 	unsigned long max_zone_pfns[MAX_NR_ZONES];
702 
703 	memset(max_zone_pfns, 0, sizeof(max_zone_pfns));
704 
705 #ifdef CONFIG_ZONE_DMA
706 	max_zone_pfns[ZONE_DMA]		= min(MAX_DMA_PFN, max_low_pfn);
707 #endif
708 #ifdef CONFIG_ZONE_DMA32
709 	max_zone_pfns[ZONE_DMA32]	= min(MAX_DMA32_PFN, max_low_pfn);
710 #endif
711 	max_zone_pfns[ZONE_NORMAL]	= max_low_pfn;
712 #ifdef CONFIG_HIGHMEM
713 	max_zone_pfns[ZONE_HIGHMEM]	= max_pfn;
714 #endif
715 
716 	free_area_init_nodes(max_zone_pfns);
717 }
718 
719 void update_cache_mode_entry(unsigned entry, enum page_cache_mode cache)
720 {
721 	/* entry 0 MUST be WB (hardwired to speed up translations) */
722 	BUG_ON(!entry && cache != _PAGE_CACHE_MODE_WB);
723 
724 	__cachemode2pte_tbl[cache] = __cm_idx2pte(entry);
725 	__pte2cachemode_tbl[entry] = cache;
726 }
727