From eb5f73251c8a2c240a6b328a7e7dcf5019e0a903 Mon Sep 17 00:00:00 2001 From: songyanguang <345810377@qq.com> Date: Thu, 16 Jan 2025 20:14:00 +0800 Subject: [PATCH] Modify context_switch parameters --- .../XiZi_AIoT/softkernel/trap/software_irq_handler.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Ubiquitous/XiZi_AIoT/softkernel/trap/software_irq_handler.c b/Ubiquitous/XiZi_AIoT/softkernel/trap/software_irq_handler.c index 25c4bd1de..4c1902a45 100644 --- a/Ubiquitous/XiZi_AIoT/softkernel/trap/software_irq_handler.c +++ b/Ubiquitous/XiZi_AIoT/softkernel/trap/software_irq_handler.c @@ -52,21 +52,24 @@ void software_irq_dispatch(struct trapframe* tf) assert(p_intr_driver != NULL); // get current task + struct CPU* cpu = cur_cpu(); struct Thread* cur_task = cur_cpu()->task; /// @todo: Handle dead task - int syscall_num = -1; if (cur_task && cur_task->state != DEAD) { cur_task->thread_context.trapframe = tf; // call syscall - int ret = arch_syscall(cur_task->thread_context.trapframe, &syscall_num); arch_set_return(tf, ret); } if ((cur_cpu()->task == NULL && cur_task != NULL) || cur_task->state != RUNNING) { cur_cpu()->task = NULL; +#ifndef __riscv context_switch(&cur_task->thread_context.context, cur_cpu()->scheduler); +#else + context_switch(&cur_task->thread_context.context, &cpu->scheduler); +#endif } if (syscall_num == SYSCALL_EXIT) { panic("Exit reaches"); @@ -74,4 +77,4 @@ void software_irq_dispatch(struct trapframe* tf) assert(cur_task == cur_cpu()->task); xizi_leave_kernel(); -} \ No newline at end of file +}