- Properly implement inline versions of KeGetCurrentThread and KeGetPreviousMode/ExGetPreviousMode, as well as KeGetPcr. This should significantly increase performance. (KeGetPreviousMode is reduced to 2 lines of code instead of 15 lines with 2 expensive jumps).

svn path=/trunk/; revision=24639
This commit is contained in:
Alex Ionescu 2006-10-23 22:01:25 +00:00
parent 2dae9ef970
commit edaa6996f4
7 changed files with 26 additions and 11 deletions

View file

@ -8678,12 +8678,6 @@ NTAPI
KeGetCurrentThread(
VOID);
NTKERNELAPI
KPROCESSOR_MODE
NTAPI
KeGetPreviousMode(
VOID);
NTKERNELAPI
ULONG
NTAPI

View file

@ -95,7 +95,7 @@ Author:
//
#define K0IPCR ((ULONG_PTR)(KIP0PCRADDRESS))
#define PCR ((volatile KPCR * const)K0IPCR)
#ifdef _WE_USE_THE_SAME_PCR_ADDRESS
#if !defined(CONFIG_SMP) && !defined(NT_BUILD)
#define KeGetPcr() PCR
#else
#define KeGetPcr() ((volatile KPCR * const)__readfsdword(0x1C))

View file

@ -30,11 +30,12 @@ LIST_ENTRY ExpFirmwareTableProviderListHead;
/*
* @implemented
*/
#undef ExGetPreviousMode
KPROCESSOR_MODE
NTAPI
ExGetPreviousMode (VOID)
{
return (KPROCESSOR_MODE)PsGetCurrentThread()->Tcb.PreviousMode;
return KeGetPreviousMode();
}
/*

View file

@ -47,6 +47,7 @@ PVOID ExpNlsSectionPointer;
#define ExInitializeRundownProtection _ExInitializeRundownProtection
#define ExWaitForRundownProtectionRelease _ExWaitForRundownProtectionRelease
#define ExRundownCompleted _ExRundownCompleted
#define ExGetPreviousMode KeGetPreviousMode
/* INITIALIZATION FUNCTIONS *************************************************/

View file

@ -1263,3 +1263,18 @@ KiComputeNewPriority(IN PKTHREAD Thread)
return Priority;
}
PRKTHREAD
FORCEINLINE
KeGetCurrentThread(VOID)
{
/* Return the current thread */
return ((PKIPCR)KeGetPcr())->PrcbData.CurrentThread;
}
UCHAR
FORCEINLINE
KeGetPreviousMode(VOID)
{
/* Return the current mode */
return KeGetCurrentThread()->PreviousMode;
}

View file

@ -17,6 +17,9 @@
#ifdef _NTOSKRNL_
#define KeGetCurrentThread _KeGetCurrentThread
#define KeGetPreviousMode _KeGetPreviousMode
#include "ke.h"
#include "i386/mm.h"
#include "i386/fpu.h"

View file

@ -882,18 +882,19 @@ NTAPI
KeGetCurrentThread(VOID)
{
/* Return the current thread on this PCR */
return ((PKIPCR)KeGetPcr())->PrcbData.CurrentThread;
return _KeGetCurrentThread();
}
/*
* @implemented
*/
KPROCESSOR_MODE
#undef KeGetPreviousMode
UCHAR
NTAPI
KeGetPreviousMode(VOID)
{
/* Return the previous mode of this thread */
return KeGetCurrentThread()->PreviousMode;
return _KeGetPreviousMode();
}
/*