Changeset a35b458 in mainline for kernel/arch/ia32/src/mm/frame.c
- Timestamp:
- 2018-03-02T20:10:49Z (7 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- f1380b7
- Parents:
- 3061bc1
- git-author:
- Jiří Zárevúcky <zarevucky.jiri@…> (2018-02-28 17:38:31)
- git-committer:
- Jiří Zárevúcky <zarevucky.jiri@…> (2018-03-02 20:10:49)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/ia32/src/mm/frame.c
r3061bc1 ra35b458 54 54 { 55 55 unsigned int i; 56 56 57 57 for (i = 0; i < e820counter; i++) { 58 58 uint64_t base64 = e820table[i].base_address; 59 59 uint64_t size64 = e820table[i].size; 60 60 61 61 #ifdef KARCH_ia32 62 62 /* … … 65 65 if (base64 >= PHYSMEM_LIMIT32) 66 66 continue; 67 67 68 68 if (base64 + size64 > PHYSMEM_LIMIT32) 69 69 size64 = PHYSMEM_LIMIT32 - base64; 70 70 #endif 71 71 72 72 uintptr_t base = (uintptr_t) base64; 73 73 size_t size = (size_t) size64; 74 74 75 75 if (!frame_adjust_zone_bounds(low, &base, &size)) 76 76 continue; 77 77 78 78 if (e820table[i].type == MEMMAP_MEMORY_AVAILABLE) { 79 79 /* To be safe, make the available zone possibly smaller */ … … 81 81 uint64_t new_size = ALIGN_DOWN(size - (new_base - base), 82 82 FRAME_SIZE); 83 83 84 84 size_t count = SIZE2FRAMES(new_size); 85 85 pfn_t pfn = ADDR2PFN(new_base); 86 86 pfn_t conf; 87 87 88 88 if (low) { 89 89 if ((minconf < pfn) || (minconf >= pfn + count)) … … 105 105 uint64_t new_size = ALIGN_UP(size + (base - new_base), 106 106 FRAME_SIZE); 107 107 108 108 zone_create(ADDR2PFN(new_base), SIZE2FRAMES(new_size), 0, 109 109 ZONE_FIRMWARE); … … 113 113 uint64_t new_size = ALIGN_UP(size + (base - new_base), 114 114 FRAME_SIZE); 115 115 116 116 zone_create(ADDR2PFN(new_base), SIZE2FRAMES(new_size), 0, 117 117 ZONE_RESERVED); … … 133 133 unsigned int i; 134 134 printf("[base ] [size ] [name ]\n"); 135 135 136 136 for (i = 0; i < e820counter; i++) { 137 137 const char *name; 138 138 139 139 if (e820table[i].type <= MEMMAP_MEMORY_UNUSABLE) 140 140 name = e820names[e820table[i].type]; 141 141 else 142 142 name = "invalid"; 143 143 144 144 printf("%#018" PRIx64 " %#018" PRIx64" %s\n", e820table[i].base_address, 145 145 e820table[i].size, name); … … 150 150 { 151 151 pfn_t minconf; 152 152 153 153 if (config.cpu_active == 1) { 154 154 minconf = 1; 155 155 156 156 #ifdef CONFIG_SMP 157 157 minconf = max(minconf, … … 159 159 hardcoded_unmapped_kdata_size)); 160 160 #endif 161 161 162 162 init_e820_memory(minconf, true); 163 163 164 164 /* Reserve frame 0 (BIOS data) */ 165 165 frame_mark_unavailable(0, 1); 166 166 167 167 #ifdef CONFIG_SMP 168 168 /* Reserve AP real mode bootstrap memory */
Note:
See TracChangeset
for help on using the changeset viewer.