ReactOS SMP Bringup Lite:
authorStefan Ginsberg <stefanginsberg@gmail.com>
Wed, 30 Sep 2009 20:30:57 +0000 (20:30 +0000)
committerStefan Ginsberg <stefanginsberg@gmail.com>
Wed, 30 Sep 2009 20:30:57 +0000 (20:30 +0000)
commit9fdf04b17cb266f0a8e3ce839de564f1416ea3a7
treed4b8a72d96779786afd0dccb39d588b4f9d32d4c
parent56bc75a1843104085678855a89c48158e1cf0b47
ReactOS SMP Bringup Lite:
- Add simple and hacky spinlock implementation to HAL and kernel. It treats queued spinlocks as normal spinlocks and does not support debug timeout, but works well enough to expose bugs in spinlock usage.
- Implement KiProcessDeferredReadyList, a simple wrapper around KiDeferredReadyThread.
- Add missing PRCB locking in KiDeferredReadyThread.
- Implement SMP handling in KiRetireDpcList.
- Acquire the spinlock in KeSynchronizeExecution for SMP.
- Stub and export Kii386SpinOnSpinLock -- not used yet.
- Fix locking in KiAcquire/ReleaseDispatcherLockAtDpcLevel -- KeAcquireQueuedSpinLockAtDpcLevel takes the lock queue pointer, not the index.
- "Implement" KiRundownThread for SMP.
- Fix some sanity checks in the SMP context switch code and implement a stubbed SMP case.
- Define SYNCH_LEVEL in asm.h and use it in HAL's KeRaiseIrqlToSynchLevel.

To try the MP kernel on UP (it does not work on multiple processors yet) compile ntkrnlmp, rename it to ntoskrnl and add it to your installation. This requires a HAL with CONFIG_SMP enabled in HAL's spinlock.c and irq.S. Booting with the MP kernel does not work because of a weird regression introduced sometime in the last few months --  it appears MmProbeAndLockPages fails for a user mode stack pointer (no, I have no idea why).

svn path=/trunk/; revision=43244
reactos/hal/halx86/generic/irq.S
reactos/hal/halx86/generic/spinlock.c
reactos/include/ndk/asm.h
reactos/ntoskrnl/include/internal/ke.h
reactos/ntoskrnl/include/internal/ke_x.h
reactos/ntoskrnl/ke/dpc.c
reactos/ntoskrnl/ke/i386/ctxswitch.S
reactos/ntoskrnl/ke/i386/trap.s
reactos/ntoskrnl/ke/spinlock.c
reactos/ntoskrnl/ke/thrdschd.c
reactos/ntoskrnl/ntoskrnl.pspec