mirror of
https://github.com/ApfelTeeSaft/reactos.git
synced 2026-09-02 04:13:34 +00:00
- Use MiSyncForProcessAttach and MiSyncForContextSwitch instead of MiSyncThreadProcessViews to avoid some unneeded mm hack-syncing
svn path=/trunk/; revision=35635
This commit is contained in:
@@ -1554,14 +1554,20 @@ MmCallDllInitialize(
|
||||
IN PLIST_ENTRY ListHead
|
||||
);
|
||||
|
||||
/* ReactOS Mm Hack */
|
||||
/* ReactOS Mm Hacks */
|
||||
VOID
|
||||
FASTCALL
|
||||
MiSyncThreadProcessViews(
|
||||
MiSyncForProcessAttach(
|
||||
IN PKTHREAD NextThread,
|
||||
IN PEPROCESS Process
|
||||
);
|
||||
|
||||
VOID
|
||||
FASTCALL
|
||||
MiSyncForContextSwitch(
|
||||
IN PKTHREAD Thread
|
||||
);
|
||||
|
||||
extern PMM_AVL_TABLE MmKernelAddressSpace;
|
||||
|
||||
FORCEINLINE
|
||||
|
||||
@@ -738,8 +738,7 @@ CheckNext:
|
||||
SwapContext:
|
||||
/* ReactOS Mm Hack */
|
||||
mov ecx, esi
|
||||
mov edx, [edi+KTHREAD_APCSTATE_PROCESS]
|
||||
call @MiSyncThreadProcessViews@8
|
||||
call @MiSyncForContextSwitch@4
|
||||
|
||||
/* Swap context at APC_LEVEL */
|
||||
mov ecx, APC_LEVEL
|
||||
|
||||
@@ -448,7 +448,7 @@ KeAttachProcess(IN PKPROCESS Process)
|
||||
ASSERT_IRQL_LESS_OR_EQUAL(DISPATCH_LEVEL);
|
||||
|
||||
/* Make sure that we are in the right page directory (ReactOS Mm Hack) */
|
||||
MiSyncThreadProcessViews(Thread, (PEPROCESS)Process);
|
||||
MiSyncForProcessAttach(Thread, (PEPROCESS)Process);
|
||||
|
||||
/* Check if we're already in that process */
|
||||
if (Thread->ApcState.Process == Process) return;
|
||||
@@ -574,7 +574,7 @@ KeStackAttachProcess(IN PKPROCESS Process,
|
||||
ASSERT_IRQL_LESS_OR_EQUAL(DISPATCH_LEVEL);
|
||||
|
||||
/* Make sure that we are in the right page directory (ReactOS Mm Hack) */
|
||||
MiSyncThreadProcessViews(Thread, (PEPROCESS)Process);
|
||||
MiSyncForProcessAttach(Thread, (PEPROCESS)Process);
|
||||
|
||||
/* Crash system if DPC is being executed! */
|
||||
if (KeIsExecutingDpc())
|
||||
|
||||
@@ -811,7 +811,7 @@ KeInitThread(IN OUT PKTHREAD Thread,
|
||||
Thread->KernelStackResident = TRUE;
|
||||
|
||||
/* Make sure that we are in the right page directory (ReactOS Mm Hack) */
|
||||
MiSyncThreadProcessViews(Thread, (PEPROCESS)Process);
|
||||
MiSyncForProcessAttach(Thread, (PEPROCESS)Process);
|
||||
|
||||
/* Enter SEH to avoid crashes due to user mode */
|
||||
Status = STATUS_SUCCESS;
|
||||
|
||||
@@ -344,7 +344,7 @@ KiSwapThread(IN PKTHREAD CurrentThread,
|
||||
WaitIrql = CurrentThread->WaitIrql;
|
||||
|
||||
/* REACTOS Mm Hack of Doom */
|
||||
MiSyncThreadProcessViews(NextThread, PsGetCurrentProcess());
|
||||
MiSyncForContextSwitch(NextThread);
|
||||
|
||||
/* Swap contexts */
|
||||
ApcState = KiSwapContext(CurrentThread, NextThread);
|
||||
@@ -714,7 +714,7 @@ NtYieldExecution(VOID)
|
||||
ASSERT(OldIrql <= DISPATCH_LEVEL);
|
||||
|
||||
/* REACTOS Mm Hack of Doom */
|
||||
MiSyncThreadProcessViews(NextThread, PsGetCurrentProcess());
|
||||
MiSyncForContextSwitch(NextThread);
|
||||
|
||||
/* Swap to new thread */
|
||||
KiSwapContext(Thread, NextThread);
|
||||
|
||||
@@ -26,17 +26,31 @@ MM_STATS MmStats;
|
||||
|
||||
VOID
|
||||
FASTCALL
|
||||
MiSyncThreadProcessViews(IN PKTHREAD NextThread,
|
||||
IN PEPROCESS Process)
|
||||
MiSyncForProcessAttach(IN PKTHREAD Thread,
|
||||
IN PEPROCESS Process)
|
||||
{
|
||||
PETHREAD Thread = CONTAINING_RECORD(NextThread, ETHREAD, Tcb);
|
||||
PETHREAD Ethread = CONTAINING_RECORD(Thread, ETHREAD, Tcb);
|
||||
|
||||
/* Hack Sync because Mm is broken */
|
||||
MmUpdatePageDir(Process, Thread, sizeof(ETHREAD));
|
||||
MmUpdatePageDir(Process, Thread->ThreadsProcess, sizeof(EPROCESS));
|
||||
MmUpdatePageDir(Process, Ethread->ThreadsProcess, sizeof(EPROCESS));
|
||||
MmUpdatePageDir(Process,
|
||||
(PVOID)Thread->Tcb.StackLimit,
|
||||
NextThread->LargeStack ?
|
||||
(PVOID)Thread->StackLimit,
|
||||
Thread->LargeStack ?
|
||||
KERNEL_LARGE_STACK_SIZE : KERNEL_STACK_SIZE);
|
||||
}
|
||||
|
||||
VOID
|
||||
FASTCALL
|
||||
MiSyncForContextSwitch(IN PKTHREAD Thread)
|
||||
{
|
||||
PVOID Process = PsGetCurrentProcess();
|
||||
PETHREAD Ethread = CONTAINING_RECORD(Thread, ETHREAD, Tcb);
|
||||
|
||||
/* Hack Sync because Mm is broken */
|
||||
MmUpdatePageDir(Process, Ethread->ThreadsProcess, sizeof(EPROCESS));
|
||||
MmUpdatePageDir(Process,
|
||||
(PVOID)Thread->StackLimit,
|
||||
Thread->LargeStack ?
|
||||
KERNEL_LARGE_STACK_SIZE : KERNEL_STACK_SIZE);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user