Changes in kernel/arch/ia64/src/mm/frame.c [7852625:bbe4828] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/ia64/src/mm/frame.c
r7852625 rbbe4828 51 51 #define MINCONF 1 52 52 53 uintptr_t end_of_identity = -1ULL;53 uintptr_t last_frame = 0; 54 54 55 static void frame_common_arch_init(bool low)55 void frame_arch_init(void) 56 56 { 57 unsigned int i; 57 if (config.cpu_active == 1) { 58 unsigned int i; 59 for (i = 0; i < bootinfo->memmap_items; i++) { 60 if (bootinfo->memmap[i].type == MEMMAP_FREE_MEM) { 61 uint64_t base = bootinfo->memmap[i].base; 62 uint64_t size = bootinfo->memmap[i].size; 63 uint64_t abase = ALIGN_UP(base, FRAME_SIZE); 58 64 59 for (i = 0; i < bootinfo->memmap_items; i++) { 60 if (bootinfo->memmap[i].type != MEMMAP_FREE_MEM) 61 continue; 65 if (size > FRAME_SIZE) 66 size -= abase - base; 62 67 63 uintptr_t base = bootinfo->memmap[i].base; 64 size_t size = bootinfo->memmap[i].size; 65 uintptr_t abase = ALIGN_UP(base, FRAME_SIZE); 66 67 if (size > FRAME_SIZE) 68 size -= abase - base; 69 70 if (!frame_adjust_zone_bounds(low, &abase, &size)) 71 continue; 72 73 if (size > MIN_ZONE_SIZE) { 74 pfn_t pfn = ADDR2PFN(abase); 75 size_t count = SIZE2FRAMES(size); 76 77 if (low) { 78 zone_create(pfn, count, max(MINCONF, pfn), 79 ZONE_AVAILABLE | ZONE_LOWMEM); 80 } else { 81 pfn_t conf = zone_external_conf_alloc(count); 82 if (conf != 0) 83 zone_create(pfn, count, conf, 84 ZONE_AVAILABLE | ZONE_HIGHMEM); 68 if (size > MIN_ZONE_SIZE) { 69 zone_create(abase >> FRAME_WIDTH, 70 size >> FRAME_WIDTH, 71 max(MINCONF, abase >> FRAME_WIDTH), 72 0); 73 } 74 if (abase + size > last_frame) 75 last_frame = abase + size; 85 76 } 86 77 } 87 } 88 } 78 79 /* 80 * Blacklist ROM regions. 81 */ 82 frame_mark_unavailable(ADDR2PFN(ROM_BASE), 83 SIZE2FRAMES(ROM_SIZE)); 89 84 90 void frame_low_arch_init(void) 91 { 92 if (config.cpu_active > 1) 93 return; 94 95 frame_common_arch_init(true); 96 97 /* 98 * Blacklist ROM regions. 99 */ 100 frame_mark_unavailable(ADDR2PFN(ROM_BASE), 101 SIZE2FRAMES(ROM_SIZE)); 102 103 frame_mark_unavailable(ADDR2PFN(KERNEL_RESERVED_AREA_BASE), 104 SIZE2FRAMES(KERNEL_RESERVED_AREA_SIZE)); 105 106 /* PA2KA will work only on low-memory. */ 107 end_of_identity = PA2KA(config.physmem_end - FRAME_SIZE) + PAGE_SIZE; 108 } 109 110 void frame_high_arch_init(void) 111 { 112 if (config.cpu_active > 1) 113 return; 114 115 frame_common_arch_init(false); 85 frame_mark_unavailable(ADDR2PFN(KERNEL_RESERVED_AREA_BASE), 86 SIZE2FRAMES(KERNEL_RESERVED_AREA_SIZE)); 87 } 116 88 } 117 89
Note:
See TracChangeset
for help on using the changeset viewer.