Brandon Turner wrote:
I just released 0.3.0 RC2 to SourceForge and you can
download it here:
https://sourceforge.net/project/showfiles.php?group_id=6553&package_id=…
This is our final sanity check before we release the final version. I
am planing on uploading the release to to SourceForge on Wednesday night
and then Thursday morning will be our official release time. Frik or
MGW, will you be able to update the home page on Thursday morning? If
not let me know and I can do it if we have a graphic ready.
Note to all devs and contributors:
We need a change log! I have made a svn log for all commits. It can be
found at
http://www.brandonturner.org/log.txt . Please let me know if
you are going to do your own change log, otherwise I will do a change
log for everyone else on Tuesday night, but no promises I will find
everything you did.
I finished my log, can you add it to the WIKI in the right sections?
Almost 99% of these go into Kernel, and the ones that don't are clearly
marked as such.
>>>>
- Clear Tcb->Win32Thread
during win32 cleanup.
- Allow TLS usage for 1088 TLS slots, fixes part of Bug 191. Patch by
Filip Navara (navaraf(a)reactos.com)
- Added support for NTLDR style freeloader GUI.
- Win32k Header Rewrite
- Fix kernel-mode executive atom implementation (mostly add SEH and tidy
up the code). Then fix kernel32 implementation which was sending
incorrect sizes, and also re-factored the entire code, since most
functions were quatriplicated.
- Fixed a bug in RtlCreateAtomTable.
- Fixed bugs in Profile implementation. Add support for segmented
profile objects.
- Add SEH to NtRaiseHardError.
- Fix a bug in NtSetSystemTime.
- Implemented InterlockedBitTestAndReset, InterlockedBitTestAndSet,
InterlockedExchangeAddSizeT.
- Reimplemented Rundown Protection.
- Implement YieldProcessor
- KiAcquireSpinlock and KiReleaseSpinLock should be no-op functions on
uniprocessor machines.
- KiReleaseSpinLock does not need interlocked access to release the lock.
- Use portable code for KiAcquireSpinLock. Also use interlocked bit
operations since they are faster.
- Rewrite Executive Interlocked Functions to actually work as supposed
and also immensly increase their speed, most notably on non-SMP machines.
- Fix shamefully dangerously broken Work Thread/Queue/Item implementation.
- Implement a worker thread balance set manager.
- Implement Pushlocks.
- Optimized the dispatcher lock. It is now gone on non-SMP systems and
IRQL is raised or lowered instead.
- Fixed some places which werne't setting the dispatcher header's size
member correctly.
- Created separate cases for satisfying mutant, non-mutant and generic
objects, to optimize wait satisfaction.
- Fixed a case in KiCheckAlertability: we also need to check if the
thread is alerted in Kernel-Mode, even if the wait mode given was user
and user-mode is not alerted.
- Fixed signaling checks across the wait code and removed
KiCheckIfObjectSignaled. We must not consider the mutant as signaled if
SignalState is = 1.
- Fix code to check if the wait blocks' status is STATUS_TIMEOUT,
because we do not need to check for signal state in that case.
- Removed the exports for internal dispatcher lock routines.
- Implemented Queued and In-Stack Queued Spinlocks (at DPC-Level).
- Separate UP and MP spinlock functions.
- Optimize UP spinlock functions so they don't call ntoskrnl anymore and
only raise/lower irql.
- Implemented Queued Spinlocks and In-Stack Queued Spinlocks for UP
machines.
- Implemented KeAcquireInStackQueuedSpinLock,
KeReleaseInStackQueuedSpinLock, KeAcquireQueuedSpinLock,
KeReleaseQueuedSpinLock, KeTryToAcquireQueuedSpinLock,
KeTryToAcquireQueuedSpinLockRaiseToSynch,
KeAcquireQueuedSpinLockRaisetoSynch.
- Rewrite ERESOURCE implementation.
- Fix some bugs in Kernel Queue implementation
- Handle special case where we have kernel apcs pending and your
previous irql was below APC_LEVEL during the wait code.
- Set the right Thread->WaitTime dring waits
- Initialize WaitBlock->Thread during thread creation.
- Make APCs queuable for the thread after it's created
- Enable Timer Block optimization since it works now. This allows us not
to always set-up for each wait, since most of its fields can remain static.
- Properly link wait block together with the waitlist of the timer.
- MSVC backend/complation improvements. Made almost every single module
build with MSVC.
- Added PCH (Precompiled Header) usage to almost every module.
- Remove KiServiceCheck and implement PsConvertToGuiThread in its place.
Has support for detecting and returning errors in case of invalid cases,
currently disabled code for doing the required 4kb->12kb stack
conversion, and handling certain failures.
- Fix MmCreateKernelStack to actually take into account the GuiStack
parameter.
- Implement KeSwitchKernelStack
- Enable code in PsConvertToGuiThread to create a new stack and switch
to it. GUI Threads now get the 60KB of kernel stack space they deserve.
- Implement (although non-optimally) MmGrowKernelStack for future use.
- Fix some bugs in KiCallUserMode
- Fix probably one of the most devastating hidden ROS bugs currently in
trunk. KWAIT_BLOCK's WaitType was defined as USHORT instead of UCHAR,
causing a KeWaitForMultipleObjects of 2 or more objects to overwrite the
Thread's PreviousMode (an effect of this is that 99% of user-mode
callbacks from win32k were being done with the mode set to Kernel-Mode
instead of UserMode). A KeWaitForMultipleObjects of 3 or more objects,
or the timer object itself in some cases would cause this conflict to
occur with the ResourceIndex member, potentially corrupting the
ERESOURCE owner table in my updated implementation.
- 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%.
- Set KernelApcPending == TRUE in KiCheckForKernelApcDelivery if we are
at APC_LEVEL.
- Properly create, grow and delete the kernel stack. Fixes potential
memory leaks introduced in 20806.
- Fix flaw in win32k hardware message queue which used KMUTEX instead of
KMUTANT, thus double-disabling Kernel APCs during the parsing of the
queue, which would result in actually deliving hardware message
callbacks with Kernel APCs disabled when going to user-mode. This was
detected when my new user-mode callback rewrite added checks for this
situation, and it originally caused a bugcheck. Since the message queue
code is now fixed, the bugcheck has been re-enabled, hopefully no other
such violations will be detected.
- Update KeContextToTrapFrame to support separate ContextFlags
parameters in the scenario where we want to convert more then the
Context's flag specify
- Rename some of the internal FPU flags to external names and make them
global.
- Improve context creation of new threads to initialize the virgin NPX
state for new threads, to clear DR debug registers, to properly convert
the context to a trap frame, to set the right segment registers, to set
the debugging mark in the trap frame, and to properly set the initial
eflags.
- Don't bother with clearing the DRs in the CONTEXT, just clear DR7 in
the trap frame after the conversion.
- Fix some nasty context switch bugs:
* We did not update the KPCR's stacklimit/initialstack with the new
thread's stacklimit/initialstack.
* We always assumed V86 frame bias in KeInitializeThreadContext.
* We did not properly update ESP0 during context switch, to make space
for the NPX frame and V86 bias.
* We did not update fs:18h to point to the new TEB.
* We did not clear out GS when switching processes, nor update the
TSS's cr3.
* If a new LDT was being updated, we over-wrote EBP (which was
supposed to point to the TSS) by the GDT pointer.
* We used a push/pop esp0 hack which hid the fact we never updated esp0.
- Fix a bad bug in the system call handler and interrupt/trap exit code
which was causing a jump to the incorrect epilogue if V86 mode was detected.
- Make traps use the shared EOI (End Of Interrupt) helper instead of
their own custom trap exit code.
- Share some more trap code.
- Increase total system call count in KPCR for performance counter.
- Increase per-systemcall call count in the KiServiceTable if it was
specified, for performance counters.
- Add sanity checks to system call handler to detect.
- Detect if exiting with incorrect IF state.
- Detect if exiting with broken stack.
- Detect if exiting with a broken trap frame (note: Disabled in
Kei386EoiHelper beause this raises the assertion. The trap frame is
valid, it's just that some old code is using DbgArgMark for other
purposes. Will fix.)
- Detect if exiting with invalid FS.
- Detect if exiting with invalid Exception List.
- Detect if exiting with incorrect exception list and/or incorrect
previmous mode on the stack (to detect macro/calling type mismatch).
- Use MmUserProbeAddress in the system call handler to verify the
parametes we got from user-mode are valid and return
STATUS_ACCESS_VIOLATION if the check fails.
- Handle failure after PsConvertToGuiThread and return
STATUS_INVALID_SYSTEM_SERVICE and/or FALSE and/or -1 on failure.
- Made MCE/XMMI interrupts unexpected on-boot.
<<<<
--
Best regards,
Alex Ionescu
Project Lead, TinyKRNL
Kernel-Mode Software Design Engineer, ReactOS