From d7ae142cf1c73ba0b7095c4c5dfd3fa4cacc57c6 Mon Sep 17 00:00:00 2001 From: Alex Ionescu Date: Sun, 10 Sep 2006 23:17:22 +0000 Subject: [PATCH] - KPROCSES Flags are LONG, not ULONG. - Add some missing decoration. - NUMA node semantics for KeInitializeProcess are only required on SMP builds. - Allow KeInitailizeProcess to receive an argument specifying if alignment faults should be enabled or not. - Use KiComputeIopmOffset to get the IopmOFfset instead of setting -1 svn path=/trunk/; revision=24047 --- reactos/include/ndk/ketypes.h | 14 ++++++------- reactos/ntoskrnl/include/internal/ke.h | 3 ++- reactos/ntoskrnl/ke/i386/kiinit.c | 3 ++- reactos/ntoskrnl/ke/process.c | 27 +++++++++++++++----------- reactos/ntoskrnl/ps/process.c | 3 ++- 5 files changed, 28 insertions(+), 22 deletions(-) diff --git a/reactos/include/ndk/ketypes.h b/reactos/include/ndk/ketypes.h index f6893df052a..982b8955715 100644 --- a/reactos/include/ndk/ketypes.h +++ b/reactos/include/ndk/ketypes.h @@ -905,7 +905,7 @@ typedef struct _KPROCESS { DISPATCHER_HEADER Header; LIST_ENTRY ProfileListHead; - PHYSICAL_ADDRESS DirectoryTableBase; + LARGE_INTEGER DirectoryTableBase; #if defined(_M_IX86) KGDTENTRY LdtDescriptor; KIDTENTRY Int21Descriptor; @@ -926,12 +926,12 @@ typedef struct _KPROCESS { struct { - ULONG AutoAlignment:1; - ULONG DisableBoost:1; - ULONG DisableQuantum:1; - ULONG ReservedFlags:29; + LONG AutoAlignment:1; + LONG DisableBoost:1; + LONG DisableQuantum:1; + LONG ReservedFlags:29; }; - ULONG ProcessFlags; + LONG ProcessFlags; }; SCHAR BasePriority; SCHAR QuantumReset; @@ -943,9 +943,7 @@ typedef struct _KPROCESS union { KEXECUTE_OPTIONS Flags; -#if (NTDDI_VERSION >= NTDDI_LONGHORN) UCHAR ExecuteOptions; -#endif }; ULONG StackCount; LIST_ENTRY ProcessListEntry; diff --git a/reactos/ntoskrnl/include/internal/ke.h b/reactos/ntoskrnl/include/internal/ke.h index d1689129ec1..98a0ea3b885 100644 --- a/reactos/ntoskrnl/include/internal/ke.h +++ b/reactos/ntoskrnl/include/internal/ke.h @@ -505,7 +505,8 @@ KeInitializeProcess( struct _KPROCESS *Process, KPRIORITY Priority, KAFFINITY Affinity, - LARGE_INTEGER DirectoryTableBase + PLARGE_INTEGER DirectoryTableBase, + IN BOOLEAN Enable ); VOID diff --git a/reactos/ntoskrnl/ke/i386/kiinit.c b/reactos/ntoskrnl/ke/i386/kiinit.c index fc7d9f54772..ddb73613a52 100644 --- a/reactos/ntoskrnl/ke/i386/kiinit.c +++ b/reactos/ntoskrnl/ke/i386/kiinit.c @@ -147,7 +147,8 @@ KiInitializeKernel(IN PKPROCESS InitProcess, KeInitializeProcess(InitProcess, 0, 0xFFFFFFFF, - PageDirectory); + &PageDirectory, + FALSE); InitProcess->QuantumReset = MAXCHAR; } else diff --git a/reactos/ntoskrnl/ke/process.c b/reactos/ntoskrnl/ke/process.c index 4ce27d24b54..b89b01386d3 100644 --- a/reactos/ntoskrnl/ke/process.c +++ b/reactos/ntoskrnl/ke/process.c @@ -52,10 +52,10 @@ UpdatePageDirs(IN PKTHREAD Thread, VOID NTAPI -KiAttachProcess(PKTHREAD Thread, - PKPROCESS Process, - PKLOCK_QUEUE_HANDLE ApcLock, - PRKAPC_STATE SavedApcState) +KiAttachProcess(IN PKTHREAD Thread, + IN PKPROCESS Process, + IN PKLOCK_QUEUE_HANDLE ApcLock, + IN PRKAPC_STATE SavedApcState) { ASSERT(Process != Thread->ApcState.Process); @@ -109,11 +109,14 @@ NTAPI KeInitializeProcess(IN OUT PKPROCESS Process, IN KPRIORITY Priority, IN KAFFINITY Affinity, - IN LARGE_INTEGER DirectoryTableBase) + IN PLARGE_INTEGER DirectoryTableBase, + IN BOOLEAN Enable) { +#ifdef CONFIG_SMP ULONG i = 0; UCHAR IdealNode = 0; PKNODE Node; +#endif /* Initialize the Dispatcher Header */ KeInitializeDispatcherHeader(&Process->Header, @@ -125,9 +128,9 @@ KeInitializeProcess(IN OUT PKPROCESS Process, Process->Affinity = Affinity; Process->BasePriority = (CHAR)Priority; Process->QuantumReset = 6; - Process->DirectoryTableBase = DirectoryTableBase; - Process->AutoAlignment = TRUE; - Process->IopmOffset = 0xFFFF; + Process->DirectoryTableBase = *DirectoryTableBase; + Process->AutoAlignment = Enable; + Process->IopmOffset = KiComputeIopmOffset(IO_ACCESS_MAP_NONE); /* Initialize the lists */ InitializeListHead(&Process->ThreadListHead); @@ -138,6 +141,7 @@ KeInitializeProcess(IN OUT PKPROCESS Process, Process->State = ProcessInMemory; /* Check how many Nodes there are on the system */ +#ifdef CONFIG_SMP if (KeNumberNodes > 1) { /* Set the new seed */ @@ -173,13 +177,14 @@ KeInitializeProcess(IN OUT PKPROCESS Process, Process->ThreadSeed = KeFindNextRightSetAffinity(Node->Seed, (ULONG)Affinity); Node->Seed = Process->ThreadSeed; +#endif } ULONG NTAPI -KeSetProcess(PKPROCESS Process, - KPRIORITY Increment, - BOOLEAN InWait) +KeSetProcess(IN PKPROCESS Process, + IN KPRIORITY Increment, + IN BOOLEAN InWait) { KIRQL OldIrql; ULONG OldState; diff --git a/reactos/ntoskrnl/ps/process.c b/reactos/ntoskrnl/ps/process.c index de76e161090..6efff9ab6d1 100644 --- a/reactos/ntoskrnl/ps/process.c +++ b/reactos/ntoskrnl/ps/process.c @@ -582,7 +582,8 @@ PspCreateProcess(OUT PHANDLE ProcessHandle, KeInitializeProcess(&Process->Pcb, PROCESS_PRIORITY_NORMAL, Affinity, - DirectoryTableBase); + &DirectoryTableBase, + Process->DefaultHardErrorProcessing & 4); /* Duplicate Parent Token */ Status = PspInitializeProcessSecurity(Process, Parent);