Files
ViperOS/VKernel
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
..