- Even while I love having the trap/fpu/context code in C, the bugs this switch intro...
authorStefan Ginsberg <stefanginsberg@gmail.com>
Fri, 6 Apr 2012 20:13:33 +0000 (20:13 +0000)
committerStefan Ginsberg <stefanginsberg@gmail.com>
Fri, 6 Apr 2012 20:13:33 +0000 (20:13 +0000)
commit3d119713b4e876012b7f72ca1e2a04f7e2df214e
tree748778efab5d9ca9118619a9576b40aa108021fc
parent4f80488ca3988de8fb22235bf2c3bc9d596dcb64
- Even while I love having the trap/fpu/context code in C, the bugs this switch introduced continue to amaze me. This time, fix a bug from 45156 when KiFlushNPXState was rewritten in C. The C version could miss to restore the interrupt state, which would lead to interrupts being disabled when it was not expected. This "interrupt leak" was seen in the page fault handler if a page fault occurred after interrupts had been disabled (which had sometimes been observed to occur on the test server during exception handling and thread creation when KiFlushNPXState had been called). This didn't completely hang the system because during thread creation (and other system calls where this may have happened) interrupts would be re-enabled when returning to user mode when restoring eflags, and the exception handling would result in a system call which would enable interrupts again (it appears exception handler would have run with interrupts disabled, though!). This is now fixed, as well as any other issues this might have caused. The hack in the page fault handler remains until another issue has been fixed.

svn path=/trunk/; revision=56333
reactos/ntoskrnl/ke/i386/cpu.c