Changeset c621f4aa in mainline for kernel/generic/src/main/main.c
- Timestamp:
- 2010-07-25T10:11:13Z (15 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 377cce8
- Parents:
- 24a2517 (diff), a2da43c (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)links above to see all the changes relative to each parent. - File:
-
- 1 edited
-
kernel/generic/src/main/main.c (modified) (16 diffs)
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/main/main.c
r24a2517 rc621f4aa 84 84 #include <main/main.h> 85 85 #include <ipc/event.h> 86 #include <sysinfo/sysinfo.h> 87 #include <sysinfo/stats.h> 86 88 87 89 /** Global configuration structure. */ … … 102 104 103 105 /** Lowest safe stack virtual address. */ 104 uintptr_t stack_safe = 0; 106 uintptr_t stack_safe = 0; 105 107 106 108 /* … … 111 113 */ 112 114 static void main_bsp_separated_stack(void); 115 113 116 #ifdef CONFIG_SMP 114 117 static void main_ap_separated_stack(void); 115 118 #endif 116 119 117 #define CONFIG_STACK_SIZE ((1 << STACK_FRAMES) * STACK_SIZE)120 #define CONFIG_STACK_SIZE ((1 << STACK_FRAMES) * STACK_SIZE) 118 121 119 122 /** Main kernel routine for bootstrap CPU. … … 128 131 * 129 132 */ 130 void main_bsp(void)133 NO_TRACE void main_bsp(void) 131 134 { 132 135 config.cpu_count = 1; … … 144 147 size_t i; 145 148 for (i = 0; i < init.cnt; i++) { 146 if (PA_ overlaps(config.stack_base, config.stack_size,149 if (PA_OVERLAPS(config.stack_base, config.stack_size, 147 150 init.tasks[i].addr, init.tasks[i].size)) 148 151 config.stack_base = ALIGN_UP(init.tasks[i].addr + 149 152 init.tasks[i].size, config.stack_size); 150 153 } 151 154 152 155 /* Avoid placing stack on top of boot allocations. */ 153 156 if (ballocs.size) { 154 if (PA_ overlaps(config.stack_base, config.stack_size,157 if (PA_OVERLAPS(config.stack_base, config.stack_size, 155 158 ballocs.base, ballocs.size)) 156 159 config.stack_base = ALIGN_UP(ballocs.base + … … 168 171 } 169 172 170 171 173 /** Main kernel routine for bootstrap CPU using new stack. 172 174 * … … 174 176 * 175 177 */ 176 void main_bsp_separated_stack(void) 178 void main_bsp_separated_stack(void) 177 179 { 178 180 /* Keep this the first thing. */ … … 181 183 version_print(); 182 184 183 LOG("\nconfig.base=% #" PRIp "config.kernel_size=%" PRIs184 "\nconfig.stack_base=% #" PRIp "config.stack_size=%" PRIs,185 LOG("\nconfig.base=%p config.kernel_size=%" PRIs 186 "\nconfig.stack_base=%p config.stack_size=%" PRIs, 185 187 config.base, config.kernel_size, config.stack_base, 186 188 config.stack_size); … … 192 194 * commands. 193 195 */ 194 LOG_EXEC(kconsole_init());196 kconsole_init(); 195 197 #endif 196 198 … … 199 201 * starts adding its own handlers 200 202 */ 201 LOG_EXEC(exc_init());203 exc_init(); 202 204 203 205 /* 204 206 * Memory management subsystems initialization. 205 207 */ 206 LOG_EXEC(arch_pre_mm_init());207 LOG_EXEC(frame_init());208 arch_pre_mm_init(); 209 frame_init(); 208 210 209 211 /* Initialize at least 1 memory segment big enough for slab to work. */ 210 LOG_EXEC(slab_cache_init()); 211 LOG_EXEC(btree_init()); 212 LOG_EXEC(as_init()); 213 LOG_EXEC(page_init()); 214 LOG_EXEC(tlb_init()); 215 LOG_EXEC(ddi_init()); 216 LOG_EXEC(tasklet_init()); 217 LOG_EXEC(arch_post_mm_init()); 218 LOG_EXEC(arch_pre_smp_init()); 219 LOG_EXEC(smp_init()); 212 slab_cache_init(); 213 sysinfo_init(); 214 btree_init(); 215 as_init(); 216 page_init(); 217 tlb_init(); 218 ddi_init(); 219 tasklet_init(); 220 arch_post_mm_init(); 221 arch_pre_smp_init(); 222 smp_init(); 220 223 221 224 /* Slab must be initialized after we know the number of processors. */ 222 LOG_EXEC(slab_enable_cpucache());225 slab_enable_cpucache(); 223 226 224 227 printf("Detected %" PRIs " CPU(s), %" PRIu64" MiB free memory\n", 225 config.cpu_count, SIZE2MB(zone _total_size()));226 227 LOG_EXEC(cpu_init());228 229 LOG_EXEC(calibrate_delay_loop());230 LOG_EXEC(clock_counter_init());231 LOG_EXEC(timeout_init());232 LOG_EXEC(scheduler_init());233 LOG_EXEC(task_init());234 LOG_EXEC(thread_init());235 LOG_EXEC(futex_init());228 config.cpu_count, SIZE2MB(zones_total_size())); 229 230 cpu_init(); 231 232 calibrate_delay_loop(); 233 clock_counter_init(); 234 timeout_init(); 235 scheduler_init(); 236 task_init(); 237 thread_init(); 238 futex_init(); 236 239 237 240 if (init.cnt > 0) { 238 241 size_t i; 239 242 for (i = 0; i < init.cnt; i++) 240 LOG("init[%" PRIs "].addr=% #" PRIp ", init[%" PRIs241 "].size=% #" PRIs, i, init.tasks[i].addr, i,243 LOG("init[%" PRIs "].addr=%p, init[%" PRIs 244 "].size=%" PRIs, i, init.tasks[i].addr, i, 242 245 init.tasks[i].size); 243 246 } else 244 247 printf("No init binaries found.\n"); 245 248 246 LOG_EXEC(ipc_init()); 247 LOG_EXEC(event_init()); 248 LOG_EXEC(klog_init()); 249 ipc_init(); 250 event_init(); 251 klog_init(); 252 stats_init(); 249 253 250 254 /* … … 262 266 if (!kinit_thread) 263 267 panic("Cannot create kinit thread."); 264 LOG_EXEC(thread_ready(kinit_thread));268 thread_ready(kinit_thread); 265 269 266 270 /* … … 272 276 } 273 277 274 275 278 #ifdef CONFIG_SMP 279 276 280 /** Main kernel routine for application CPUs. 277 281 * … … 292 296 */ 293 297 config.cpu_active++; 294 298 295 299 /* 296 300 * The THE structure is well defined because ctx.sp is used as stack. … … 307 311 calibrate_delay_loop(); 308 312 arch_post_cpu_init(); 309 313 310 314 the_copy(THE, (the_t *) CPU->stack); 311 315 312 316 /* 313 317 * If we woke kmp up before we left the kernel stack, we could … … 322 326 } 323 327 324 325 328 /** Main kernel routine for application CPUs using new stack. 326 329 * … … 334 337 */ 335 338 timeout_init(); 336 339 337 340 waitq_wakeup(&ap_completion_wq, WAKEUP_FIRST); 338 341 scheduler(); 339 342 /* not reached */ 340 343 } 344 341 345 #endif /* CONFIG_SMP */ 342 346
Note:
See TracChangeset
for help on using the changeset viewer.
