mirror of
https://github.com/reactos/reactos.git
synced 2025-02-24 09:25:10 +00:00
[PERF]: Omit setting certain useless trap frame fields.
[NTOS]: Fix KiEnterInterruptFrame. In the case of a V86 trap, the segments were overriden because this wasn't a kernel trap (missing if/elseif). svn path=/trunk/; revision=45353
This commit is contained in:
parent
607494ed1c
commit
ed3b520c7b
1 changed files with 5 additions and 15 deletions
|
@ -616,8 +616,7 @@ KiEnterV86Trap(IN PKTRAP_FRAME TrapFrame)
|
|||
Ke386SetDs(KGDT_R3_DATA | RPL_MASK);
|
||||
Ke386SetEs(KGDT_R3_DATA | RPL_MASK);
|
||||
|
||||
/* Save exception list and bogus previous mode */
|
||||
TrapFrame->PreviousPreviousMode = -1;
|
||||
/* Save exception list */
|
||||
TrapFrame->ExceptionList = KeGetPcr()->Tib.ExceptionList;
|
||||
|
||||
/* Clear direction flag */
|
||||
|
@ -639,10 +638,7 @@ VOID
|
|||
FORCEINLINE
|
||||
KiEnterInterruptTrap(IN PKTRAP_FRAME TrapFrame)
|
||||
{
|
||||
/* Set bogus previous mode */
|
||||
TrapFrame->PreviousPreviousMode = -1;
|
||||
|
||||
/* Check for V86 mode */
|
||||
/* Check for V86 mode, otherwise check for ring 3 code */
|
||||
if (__builtin_expect(TrapFrame->EFlags & EFLAGS_V86_MASK, 0))
|
||||
{
|
||||
/* Restore V8086 segments into Protected Mode segments */
|
||||
|
@ -651,9 +647,7 @@ KiEnterInterruptTrap(IN PKTRAP_FRAME TrapFrame)
|
|||
TrapFrame->SegDs = TrapFrame->V86Ds;
|
||||
TrapFrame->SegEs = TrapFrame->V86Es;
|
||||
}
|
||||
|
||||
/* Check if this wasn't kernel code */
|
||||
if (__builtin_expect(TrapFrame->SegCs != KGDT_R0_CODE, 1)) /* Ring 3 is more common */
|
||||
else if (__builtin_expect(TrapFrame->SegCs != KGDT_R0_CODE, 1)) /* Ring 3 is more common */
|
||||
{
|
||||
/* Save segments and then switch to correct ones */
|
||||
TrapFrame->SegFs = Ke386GetFs();
|
||||
|
@ -668,10 +662,7 @@ KiEnterInterruptTrap(IN PKTRAP_FRAME TrapFrame)
|
|||
/* Save exception list and terminate it */
|
||||
TrapFrame->ExceptionList = KeGetPcr()->Tib.ExceptionList;
|
||||
KeGetPcr()->Tib.ExceptionList = EXCEPTION_CHAIN_END;
|
||||
|
||||
/* No error code */
|
||||
TrapFrame->ErrCode = 0;
|
||||
|
||||
|
||||
/* Clear direction flag */
|
||||
Ke386ClearDirectionFlag();
|
||||
|
||||
|
@ -718,8 +709,7 @@ KiEnterTrap(IN PKTRAP_FRAME TrapFrame)
|
|||
TrapFrame->SegGs = Ke386GetGs();
|
||||
Ke386SetFs(KGDT_R0_PCR);
|
||||
|
||||
/* Save exception list and bogus previous mode */
|
||||
TrapFrame->PreviousPreviousMode = -1;
|
||||
/* Save exception list */
|
||||
TrapFrame->ExceptionList = KeGetPcr()->Tib.ExceptionList;
|
||||
|
||||
/* Check for V86 mode */
|
||||
|
|
Loading…
Reference in a new issue