修复多核ipi不稳定问题&增加虚拟化的部分支持(框架和串口虚拟化)&大量bug修复

This commit is contained in:
zhangzheng
2024-07-30 09:37:49 +08:00
committed by zhangzheng
parent e2ca0c74d1
commit 104da10a82
1679 changed files with 31605 additions and 74776 deletions

View File

@@ -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();
}
}