Subversion Repositories HelenOS-historic

Compare Revisions

Ignore whitespace Rev 1036 → Rev 1037

/kernel/trunk/generic/src/main/main.c
63,6 → 63,7
#include <smp/smp.h>
 
config_t config; /**< Global configuration structure. */
init_t init = {0}; /**< Initial user-space tasks */
 
context_t ctx;
 
75,9 → 76,6
size_t hardcoded_ktext_size = 0;
size_t hardcoded_kdata_size = 0;
 
__address init_addr = 0;
size_t init_size = 0;
 
void main_bsp(void);
void main_ap(void);
 
110,21 → 108,22
config.base = hardcoded_load_address;
config.memory_size = get_memory_size();
config.init_addr = init_addr;
config.init_size = init_size;
config.kernel_size = ALIGN_UP(hardcoded_ktext_size + hardcoded_kdata_size, PAGE_SIZE);
stackaddr = config.base + config.kernel_size;
/* Avoid placing kernel on top of init */
if (overlaps(stackaddr,CONFIG_STACK_SIZE,
config.init_addr, config.init_size)) {
stackaddr = ALIGN_UP(config.init_addr+config.init_size,
CONFIG_STACK_SIZE);
config.init_size = ALIGN_UP(config.init_size,CONFIG_STACK_SIZE) + CONFIG_STACK_SIZE;
} else {
count_t i;
bool overlap = false;
for (i = 0; i < init.cnt; i++)
if (overlaps(stackaddr, CONFIG_STACK_SIZE, init.tasks[i].addr, init.tasks[i].size)) {
stackaddr = ALIGN_UP(init.tasks[i].addr + init.tasks[i].size, CONFIG_STACK_SIZE);
init.tasks[i].size = ALIGN_UP(init.tasks[i].size, CONFIG_STACK_SIZE) + CONFIG_STACK_SIZE;
overlap = true;
}
if (!overlap)
config.kernel_size += CONFIG_STACK_SIZE;
}
context_save(&ctx);
context_set(&ctx, FADDR(main_bsp_separated_stack),
151,7 → 150,7
* commands.
*/
kconsole_init();
 
/*
* Exception handler initialization, before architecture
* starts adding its own handlers
189,8 → 188,9
task_init();
thread_init();
if (config.init_size > 0)
printf("config.init_addr=%P, config.init_size=%d\n", config.init_addr, config.init_size);
count_t i;
for (i = 0; i < init.cnt; i++)
printf("init[%d].addr=%P, init[%d].size=%d\n", i, init.tasks[i].addr, i, init.tasks[i].size);
ipc_init();
/*