diff --git a/service/ptos/arch/amd64/ps/context.c b/service/ptos/arch/amd64/ps/context.c index f0c9801..fed871d 100644 --- a/service/ptos/arch/amd64/ps/context.c +++ b/service/ptos/arch/amd64/ps/context.c @@ -59,10 +59,12 @@ HalContextSwitch(TRAP_FRAME *Frame) HalMmuWriteVas(&NextParent->Vas); /* Update the task state segment with kstack */ - KStackTop = NextTcb->KStackBase + NextTcb->KStackLength; - Tss = Mcb->Tss; - Tss->Rsp0Low = KStackTop & 0xFFFFFFFF; - Tss->Rsp0High = (KStackTop >> 32) & 0xFFFFFFFF; + if (ISSET(NextParent->Flags, PS_USER)) { + KStackTop = NextTcb->KStackBase + NextTcb->KStackLength; + Tss = Mcb->Tss; + Tss->Rsp0Low = KStackTop & 0xFFFFFFFF; + Tss->Rsp0High = (KStackTop >> 32) & 0xFFFFFFFF; + } /* Context switch here */ Kpcr->CurrentThread = NextThread;