Changeset deaa22f in mainline for kernel/generic/src/main/main.c
- Timestamp:
- 2006-08-02T00:42:30Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- bf78569
- Parents:
- adf7f9c
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/main/main.c
radf7f9c rdeaa22f 106 106 size_t hardcoded_kdata_size = 0; /**< Size of the kernel data in bytes. */ 107 107 108 uintptr_t stack_safe = 0; /**< Lowest safe stack virtual address */ 109 108 110 void main_bsp(void); 109 111 void main_ap(void); … … 133 135 void main_bsp(void) 134 136 { 135 uintptr_t stackaddr;136 137 137 config.cpu_count = 1; 138 138 config.cpu_active = 1; … … 142 142 143 143 config.kernel_size = ALIGN_UP(hardcoded_ktext_size + hardcoded_kdata_size, PAGE_SIZE); 144 stackaddr = config.base + config.kernel_size; 145 146 /* Avoid placing kernel on top of init */ 144 config.stack_size = CONFIG_STACK_SIZE; 145 146 /* Initialy the stack is placed just after the kernel */ 147 config.stack_base = config.base + config.kernel_size; 148 149 /* Avoid placing stack on top of init */ 147 150 count_t i; 148 bool overlap = false; 149 for (i = 0; i < init.cnt; i++) 150 if (PA_overlaps(stackaddr, CONFIG_STACK_SIZE, init.tasks[i].addr, init.tasks[i].size)) { 151 stackaddr = ALIGN_UP(init.tasks[i].addr + init.tasks[i].size, CONFIG_STACK_SIZE); 152 init.tasks[i].size = ALIGN_UP(init.tasks[i].size, CONFIG_STACK_SIZE) + CONFIG_STACK_SIZE; 153 overlap = true; 154 } 155 156 if (!overlap) 157 config.kernel_size += CONFIG_STACK_SIZE; 151 for (i = 0; i < init.cnt; i++) { 152 if (PA_overlaps(config.stack_base, config.stack_size, init.tasks[i].addr, init.tasks[i].size)) 153 config.stack_base = ALIGN_UP(init.tasks[i].addr + init.tasks[i].size, config.stack_size); 154 } 155 156 if (config.stack_base < stack_safe) 157 config.stack_base = ALIGN_UP(stack_safe, PAGE_SIZE); 158 158 159 159 context_save(&ctx); 160 context_set(&ctx, FADDR(main_bsp_separated_stack), stackaddr, THREAD_STACK_SIZE);160 context_set(&ctx, FADDR(main_bsp_separated_stack), config.stack_base, THREAD_STACK_SIZE); 161 161 context_restore(&ctx); 162 162 /* not reached */ … … 203 203 204 204 version_print(); 205 printf("%.*p: hardcoded_ktext_size=%zdK, hardcoded_kdata_size=%zdK\n", sizeof(uintptr_t) * 2, config.base, hardcoded_ktext_size >> 10, hardcoded_kdata_size >> 10); 205 printf("kernel: %.*p hardcoded_ktext_size=%zdK, hardcoded_kdata_size=%zdK\n", sizeof(uintptr_t) * 2, config.base, hardcoded_ktext_size >> 10, hardcoded_kdata_size >> 10); 206 printf("stack: %.*p size=%zdK\n", sizeof(uintptr_t) * 2, config.stack_base, config.stack_size >> 10); 206 207 207 208 arch_pre_smp_init();
Note:
See TracChangeset
for help on using the changeset viewer.