Changes in kernel/generic/src/main/kinit.c [7e752b2:6eef3c4] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/main/kinit.c
r7e752b2 r6eef3c4 57 57 #include <mm/as.h> 58 58 #include <mm/frame.h> 59 #include <mm/km.h> 59 60 #include <print.h> 60 61 #include <memstr.h> … … 68 69 #include <str.h> 69 70 #include <sysinfo/stats.h> 71 #include <align.h> 70 72 71 73 #ifdef CONFIG_SMP … … 114 116 * Just a beautification. 115 117 */ 116 thread = thread_create(kmp, NULL, TASK, THREAD_FLAG_WIRED, "kmp", true); 118 thread = thread_create(kmp, NULL, TASK, 119 THREAD_FLAG_UNCOUNTED, "kmp"); 117 120 if (thread != NULL) { 118 irq_spinlock_lock(&thread->lock, false); 119 thread->cpu = &cpus[0]; 120 irq_spinlock_unlock(&thread->lock, false); 121 thread_wire(thread, &cpus[0]); 121 122 thread_ready(thread); 122 123 } else … … 132 133 133 134 for (i = 0; i < config.cpu_count; i++) { 134 thread = thread_create(kcpulb, NULL, TASK, THREAD_FLAG_WIRED, "kcpulb", true); 135 thread = thread_create(kcpulb, NULL, TASK, 136 THREAD_FLAG_UNCOUNTED, "kcpulb"); 135 137 if (thread != NULL) { 136 irq_spinlock_lock(&thread->lock, false); 137 thread->cpu = &cpus[i]; 138 irq_spinlock_unlock(&thread->lock, false); 138 thread_wire(thread, &cpus[i]); 139 139 thread_ready(thread); 140 140 } else … … 150 150 151 151 /* Start thread computing system load */ 152 thread = thread_create(kload, NULL, TASK, 0, "kload", false); 152 thread = thread_create(kload, NULL, TASK, THREAD_FLAG_NONE, 153 "kload"); 153 154 if (thread != NULL) 154 155 thread_ready(thread); … … 161 162 * Create kernel console. 162 163 */ 163 thread = thread_create(kconsole_thread, NULL, TASK, 0, "kconsole", false); 164 thread = thread_create(kconsole_thread, NULL, TASK, 165 THREAD_FLAG_NONE, "kconsole"); 164 166 if (thread != NULL) 165 167 thread_ready(thread); … … 178 180 179 181 for (i = 0; i < init.cnt; i++) { 180 if (init.tasks[i]. addr % FRAME_SIZE) {181 printf("init[%zu] .addris not frame aligned\n", i);182 if (init.tasks[i].paddr % FRAME_SIZE) { 183 printf("init[%zu]: Address is not frame aligned\n", i); 182 184 programs[i].task = NULL; 183 185 continue; … … 200 202 TASK_NAME_BUFLEN - INIT_PREFIX_LEN, name); 201 203 202 int rc = program_create_from_image((void *) init.tasks[i].addr, 203 namebuf, &programs[i]); 204 205 if ((rc == 0) && (programs[i].task != NULL)) { 204 /* 205 * Create virtual memory mappings for init task images. 206 */ 207 uintptr_t page = km_map(init.tasks[i].paddr, 208 init.tasks[i].size, 209 PAGE_READ | PAGE_WRITE | PAGE_CACHEABLE); 210 ASSERT(page); 211 212 int rc = program_create_from_image((void *) page, namebuf, 213 &programs[i]); 214 215 if (rc == 0) { 216 if (programs[i].task != NULL) { 217 /* 218 * Set capabilities to init userspace tasks. 219 */ 220 cap_set(programs[i].task, CAP_CAP | CAP_MEM_MANAGER | 221 CAP_IO_MANAGER | CAP_IRQ_REG); 222 223 if (!ipc_phone_0) 224 ipc_phone_0 = &programs[i].task->answerbox; 225 } 226 206 227 /* 207 * Set capabilities to init userspace tasks. 228 * If programs[i].task == NULL then it is 229 * the program loader and it was registered 230 * successfully. 208 231 */ 209 cap_set(programs[i].task, CAP_CAP | CAP_MEM_MANAGER | 210 CAP_IO_MANAGER | CAP_IRQ_REG); 211 212 if (!ipc_phone_0) 213 ipc_phone_0 = &programs[i].task->answerbox; 214 } else if (rc == 0) { 215 /* It was the program loader and was registered */ 216 } else { 217 /* RAM disk image */ 218 int rd = init_rd((rd_header_t *) init.tasks[i].addr, init.tasks[i].size); 219 220 if (rd != RE_OK) 221 printf("Init binary %zu not used (error %d)\n", i, rd); 222 } 232 } else if (i == init.cnt - 1) { 233 /* 234 * Assume the last task is the RAM disk. 235 */ 236 init_rd((void *) init.tasks[i].paddr, init.tasks[i].size); 237 } else 238 printf("init[%zu]: Init binary load failed " 239 "(error %d, loader status %u)\n", i, rc, 240 programs[i].loader_status); 223 241 } 224 242
Note:
See TracChangeset
for help on using the changeset viewer.