- Rewrite usermode callbacks. These changes should greatly optimize graphic operation...
authorAlex Ionescu <aionescu@gmail.com>
Wed, 11 Jan 2006 23:54:44 +0000 (23:54 +0000)
committerAlex Ionescu <aionescu@gmail.com>
Wed, 11 Jan 2006 23:54:44 +0000 (23:54 +0000)
commitd46b22a83451daee3f4ed7cf78f87886ada1da4f
treeaa7f61baaf6619eb23c4bce294fedba0761867fb
parent424e0d5e8d9c4b2beb8b8b6f6ff7f5abc83a3cc8
- Rewrite usermode callbacks. These changes should greatly optimize graphic operations. After these changes, my "idle" CPU Usage in taskmgr went from 7-8% to 4-5%, while on the performace page, from 15-18% to 10-13%:
  * Do not use ugly and messy code to create linked stacks and other such resource-wasting steps. Use our newly implemented 60KB stack support and MmGrowKernelStack when needed.
  * Write all the low-level code in assembly instead of relying on structures and hodgepodge code.
  * Add debugging/detection features for invalid calls, such as invalid IRQL, APCs being disabled, invalid previous mode detection (this allowed me to fix the KWAIT_BLOCK bug today).
  * Finally fix the last (I hope) remaning trap frame bug issue related to V86 mode bias. One of the "hacks" in syscall.S has already been removed and I can now do the promised cleanup.
  * Allow some failulre cases in callbacks (not all implemented) and extend stack space for future use of SEH in the ntdll dispatcher.
  * Fix win32k to use callbacks properly: the system fills out *Result and *ResultLength, not the caller.
  * Use SEH (ProbeForWrite) in callbacks to detect invalid user-mode memory.
  * Save NPX State and ExceptionList across callbacks (I think this wasn't fully properly done in all cases).

svn path=/trunk/; revision=20794
reactos/ntoskrnl/ke/i386/syscall.S
reactos/ntoskrnl/ke/i386/usercall_asm.S
reactos/ntoskrnl/ke/usercall.c
reactos/ntoskrnl/ke/wait.c
reactos/ntoskrnl/ps/psmgr.c
reactos/ntoskrnl/ps/win32.c
reactos/subsys/win32k/ntuser/callback.c