修复多核ipi不稳定问题&增加虚拟化的部分支持(框架和串口虚拟化)&大量bug修复
This commit is contained in:
@@ -47,18 +47,15 @@ static void knl_main(void)
|
||||
umword_t status;
|
||||
umword_t status2;
|
||||
printk("knl main run..\n");
|
||||
while (1)
|
||||
{
|
||||
while (1) {
|
||||
task_t *pos;
|
||||
|
||||
if (slist_is_empty(&del_task_head))
|
||||
{
|
||||
if (slist_is_empty(&del_task_head)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
status2 = spinlock_lock(&del_lock);
|
||||
if (slist_is_empty(&del_task_head))
|
||||
{
|
||||
if (slist_is_empty(&del_task_head)) {
|
||||
spinlock_set(&del_lock, status2);
|
||||
continue;
|
||||
}
|
||||
@@ -76,8 +73,7 @@ static void knl_main(void)
|
||||
int ret = thread_ipc_call(init_thread, msg_tag_init4(0, 3, 0, 0x0005 /*PM_PROT*/),
|
||||
&tag, ipc_timeout_create2(3000, 3000), &user_id, TRUE);
|
||||
|
||||
if (ret < 0)
|
||||
{
|
||||
if (ret < 0) {
|
||||
printk("%s:%d ret:%d\n", __func__, __LINE__, ret);
|
||||
}
|
||||
}
|
||||
@@ -97,11 +93,13 @@ void knl_init_1(void)
|
||||
|
||||
knl_thread = thread_get_current();
|
||||
|
||||
thread_init(knl_thread, &root_factory_get()->limit);
|
||||
thread_init(knl_thread, &root_factory_get()->limit, FALSE);
|
||||
task_init(&knl_task, &root_factory_get()->limit, TRUE);
|
||||
task_knl_init(&knl_task);
|
||||
kobject_set_name(&knl_task.kobj, "tk_knl");
|
||||
thread_knl_pf_set(knl_thread, knl_main);
|
||||
thread_bind(knl_thread, &knl_task.kobj);
|
||||
kobject_set_name(&knl_thread->kobj, "th_knl");
|
||||
thread_set_msg_buf(knl_thread, knl_msg_buf[arch_get_current_cpu_id()],
|
||||
knl_msg_buf[arch_get_current_cpu_id()]);
|
||||
knl_thread->cpu = arch_get_current_cpu_id();
|
||||
@@ -126,7 +124,7 @@ static void knl_init_2(void)
|
||||
umword_t ret_addr;
|
||||
size_t size;
|
||||
|
||||
init_thread = thread_create(&root_factory_get()->limit);
|
||||
init_thread = thread_create(&root_factory_get()->limit, FALSE);
|
||||
assert(init_thread);
|
||||
init_task = task_create(&root_factory_get()->limit, FALSE);
|
||||
assert(init_task);
|
||||
@@ -163,11 +161,9 @@ static void knl_init_2(void)
|
||||
thread_bind(init_thread, &init_task->kobj);
|
||||
assert(obj_map_root(&init_thread->kobj, &init_task->obj_space, &root_factory_get()->limit, vpage_create3(KOBJ_ALL_RIGHTS, 0, THREAD_PROT)));
|
||||
assert(obj_map_root(&init_task->kobj, &init_task->obj_space, &root_factory_get()->limit, vpage_create3(KOBJ_ALL_RIGHTS, 0, TASK_PROT)));
|
||||
for (int i = FACTORY_PORT_START; i < FACTORY_PORT_END; i++)
|
||||
{
|
||||
for (int i = FACTORY_PORT_START; i < FACTORY_PORT_END; i++) {
|
||||
kobject_t *kobj = global_get_kobj(i);
|
||||
if (kobj)
|
||||
{
|
||||
if (kobj) {
|
||||
assert(obj_map_root(kobj, &init_task->obj_space, &root_factory_get()->limit, vpage_create3(KOBJ_ALL_RIGHTS, 0, i)));
|
||||
}
|
||||
}
|
||||
@@ -181,8 +177,7 @@ INIT_STAGE2(knl_init_2);
|
||||
void task_knl_kill(thread_t *kill_thread, bool_t is_knl)
|
||||
{
|
||||
task_t *task = container_of(kill_thread->task, task_t, kobj);
|
||||
if (!is_knl)
|
||||
{
|
||||
if (!is_knl) {
|
||||
printk("kill task:0x%x, pid:%d\n", task, task->pid);
|
||||
umword_t status2;
|
||||
|
||||
@@ -190,9 +185,7 @@ void task_knl_kill(thread_t *kill_thread, bool_t is_knl)
|
||||
status2 = spinlock_lock(&del_lock);
|
||||
slist_add_append(&del_task_head, &task->del_node);
|
||||
spinlock_set(&del_lock, status2);
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
printk("[knl]: knl panic.\n");
|
||||
assert(0);
|
||||
}
|
||||
@@ -211,8 +204,7 @@ static void print_mkrtos_info(void)
|
||||
" \\|_________|\r\n",
|
||||
"Complie Time:" __DATE__ " " __TIME__ "\r\n",
|
||||
};
|
||||
for (umword_t i = 0; i < sizeof(start_info) / sizeof(void *); i++)
|
||||
{
|
||||
for (umword_t i = 0; i < sizeof(start_info) / sizeof(void *); i++) {
|
||||
printk(start_info[i]);
|
||||
}
|
||||
}
|
||||
@@ -232,8 +224,7 @@ void start_kernel(void)
|
||||
arch_to_sche();
|
||||
sti();
|
||||
|
||||
while (1)
|
||||
{
|
||||
while (1) {
|
||||
knl_main();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user