TermiNexus
b6ea47277c
fix(kernel): 用户异常终止不再提前 swapgs,避免拖垮整机
用户态 #PF 的终止路径直接从 ISR 调用 _yield,不经过 ISR 出口。
原实现在 _yield 前把 GS_BASE swap 回 0;但下一个被调度的线程如果是
从用户态 timer IRQ 或 syscall 挂起的,它的恢复路径会自己 swapgs 回 0。
提前 swap 会让它 swap 反,下一次系统调用用 gs:[8] 取内核栈时读到
线性地址 8,进而三重故障/整机卡死。
- 删除终止路径的 swapgs 块,保持 ISR 入口后的 GS 视图,与其他
timer/syscall 让出路径一致
- 先置 THREAD_DONE 再 free_user_thread,与
Scheduler.exit_current_thread 的次序一致,避免“资源已释放但
state 仍是 RUNNING”的再调度窗口
2026-10-27 14:30:16 +08:00
..
2026-07-30 16:34:26 +08:00
2026-10-26 22:39:56 +08:00
2026-10-27 14:30:16 +08:00
2026-10-26 22:41:14 +08:00
2026-10-16 20:57:55 +08:00