Implement kernel lookaside lists
This commit is contained in:
@@ -17,18 +17,61 @@
|
||||
/* Rundown protection flags */
|
||||
#define EX_RUNDOWN_ACTIVE 0x1
|
||||
|
||||
/* Number of lookaside lists */
|
||||
#define POOL_LOOKASIDE_LISTS 32
|
||||
|
||||
/* C/C++ specific code */
|
||||
#ifndef __XTOS_ASSEMBLER__
|
||||
|
||||
/* Executive rundown protection structure definition */
|
||||
typedef struct _EX_RUNDOWN_REFERENCE
|
||||
/* Kernel routine callbacks */
|
||||
typedef XTSTATUS (XTAPI *PALLOCATE_FUNCTION)(IN MMPOOL_TYPE PoolType, IN SIZE_T Bytes, OUT PVOID *Memory, IN ULONG Tag);
|
||||
typedef XTSTATUS (XTAPI *PALLOCATE_FUNCTION_EX)(IN MMPOOL_TYPE PoolType, IN SIZE_T Bytes, OUT PVOID *Memory, IN ULONG Tag, IN PLOOKASIDE_LIST_EX Lookaside);
|
||||
typedef XTSTATUS (XTAPI *PFREE_FUNCTION)(IN PVOID Buffer);
|
||||
typedef XTSTATUS (XTAPI *PFREE_FUNCTION_EX)(IN PVOID Buffer, IN OUT PLOOKASIDE_LIST_EX Lookaside);
|
||||
|
||||
/* Owner entry structure definition */
|
||||
typedef struct _OWNER_ENTRY
|
||||
{
|
||||
ULONG_PTR OwnerThread;
|
||||
union
|
||||
{
|
||||
ULONG_PTR Count;
|
||||
PVOID Ptr;
|
||||
struct
|
||||
{
|
||||
ULONG IoPriorityBoosted:1;
|
||||
ULONG OwnerReferenced:1;
|
||||
ULONG OwnerCount:30;
|
||||
};
|
||||
ULONG TableSize;
|
||||
};
|
||||
} OWNER_ENTRY, *POWNER_ENTRY;
|
||||
|
||||
/* Exclusive resource structure definition */
|
||||
typedef struct _ERESOURCE
|
||||
{
|
||||
LIST_ENTRY SystemResourcesList;
|
||||
POWNER_ENTRY OwnerTable;
|
||||
SHORT ActiveCount;
|
||||
USHORT Flag;
|
||||
VOLATILE PKSEMAPHORE SharedWaiters;
|
||||
VOLATILE PKEVENT ExclusiveWaiters;
|
||||
OWNER_ENTRY OwnerEntry;
|
||||
ULONG ActiveEntries;
|
||||
ULONG ContentionCount;
|
||||
ULONG NumberOfSharedWaiters;
|
||||
ULONG NumberOfExclusiveWaiters;
|
||||
union
|
||||
{
|
||||
PVOID Address;
|
||||
ULONG_PTR CreatorBackTraceIndex;
|
||||
};
|
||||
KSPIN_LOCK SpinLock;
|
||||
} ERESOURCE, *PERESOURCE;
|
||||
|
||||
/* Executive rundown protection structure definition */
|
||||
typedef union _EX_RUNDOWN_REFERENCE
|
||||
{
|
||||
ULONG_PTR Count;
|
||||
PVOID Ptr;
|
||||
} EX_RUNDOWN_REFERENCE, *PEX_RUNDOWN_REFERENCE;
|
||||
|
||||
/* Executive rundown wait block definition */
|
||||
@@ -38,5 +81,74 @@ typedef struct _EX_RUNDOWN_WAIT_BLOCK
|
||||
KEVENT WakeEvent;
|
||||
} EX_RUNDOWN_WAIT_BLOCK, *PEX_RUNDOWN_WAIT_BLOCK;
|
||||
|
||||
/* Lookaside list structure definition */
|
||||
typedef struct _GENERAL_LOOKASIDE
|
||||
{
|
||||
union
|
||||
{
|
||||
SINGLE_LIST_HEADER ListHead;
|
||||
SINGLE_LIST_ENTRY SingleListHead;
|
||||
};
|
||||
USHORT Depth;
|
||||
USHORT MaximumDepth;
|
||||
ULONG TotalAllocates;
|
||||
union
|
||||
{
|
||||
ULONG AllocateMisses;
|
||||
ULONG AllocateHits;
|
||||
};
|
||||
ULONG TotalFrees;
|
||||
union {
|
||||
ULONG FreeMisses;
|
||||
ULONG FreeHits;
|
||||
};
|
||||
MMPOOL_TYPE Type;
|
||||
ULONG Tag;
|
||||
ULONG Size;
|
||||
union
|
||||
{
|
||||
PALLOCATE_FUNCTION_EX AllocateEx;
|
||||
PALLOCATE_FUNCTION Allocate;
|
||||
};
|
||||
union
|
||||
{
|
||||
PFREE_FUNCTION_EX FreeEx;
|
||||
PFREE_FUNCTION Free;
|
||||
};
|
||||
LIST_ENTRY ListEntry;
|
||||
ULONG LastTotalAllocates;
|
||||
union
|
||||
{
|
||||
ULONG LastAllocateMisses;
|
||||
ULONG LastAllocateHits;
|
||||
};
|
||||
ULONG Future[2];
|
||||
} GENERAL_LOOKASIDE, *PGENERAL_LOOKASIDE;
|
||||
|
||||
/* Lookaside list pointers structure definition */
|
||||
typedef struct _LOOKASIDE_LIST
|
||||
{
|
||||
PGENERAL_LOOKASIDE Local;
|
||||
PGENERAL_LOOKASIDE Global;
|
||||
} LOOKASIDE_LIST, *PLOOKASIDE_LIST;
|
||||
|
||||
/* Lookaside list extended structure definition */
|
||||
typedef struct _LOOKASIDE_LIST_EX
|
||||
{
|
||||
GENERAL_LOOKASIDE Global;
|
||||
} LOOKASIDE_LIST_EX, *PLOOKASIDE_LIST_EX;
|
||||
|
||||
/* Non-paged lookaside list structure definition */
|
||||
typedef struct _NONPAGED_LOOKASIDE_LIST
|
||||
{
|
||||
GENERAL_LOOKASIDE Global;
|
||||
} NONPAGED_LOOKASIDE_LIST, *PNONPAGED_LOOKASIDE_LIST;
|
||||
|
||||
/* Paged lookaside list structure definition */
|
||||
typedef struct _PAGED_LOOKASIDE_LIST
|
||||
{
|
||||
GENERAL_LOOKASIDE Global;
|
||||
} PAGED_LOOKASIDE_LIST, *PPAGED_LOOKASIDE_LIST;
|
||||
|
||||
#endif /* __XTOS_ASSEMBLER__ */
|
||||
#endif /* __XTDK_EXTYPES_H */
|
||||
|
||||
@@ -242,12 +242,13 @@ typedef struct _EFI_VENDOR_DEVICE_PATH EFI_VENDOR_DEVICE_PATH, *PEFI_VENDOR_DEVI
|
||||
typedef struct _EFI_VLAN_DEVICE_PATH EFI_VLAN_DEVICE_PATH, *PEFI_VLAN_DEVICE_PATH;
|
||||
typedef struct _EFI_WORD_REGS EFI_WORD_REGS, *PEFI_WORD_REGS;
|
||||
typedef struct _EPROCESS EPROCESS, *PEPROCESS;
|
||||
typedef struct _ERESOURCE ERESOURCE, *PERESOURCE;
|
||||
typedef struct _ETHREAD ETHREAD, *PETHREAD;
|
||||
typedef struct _EX_RUNDOWN_REFERENCE EX_RUNDOWN_REFERENCE, *PEX_RUNDOWN_REFERENCE;
|
||||
typedef struct _EXCEPTION_RECORD EXCEPTION_RECORD, *PEXCEPTION_RECORD;
|
||||
typedef struct _EXCEPTION_REGISTRATION_RECORD EXCEPTION_REGISTRATION_RECORD, *PEXCEPTION_REGISTRATION_RECORD;
|
||||
typedef struct _FIRMWARE_INFORMATION_BLOCK FIRMWARE_INFORMATION_BLOCK, *PFIRMWARE_INFORMATION_BLOCK;
|
||||
typedef struct _FLOAT128 FLOAT128, *PFLOAT128;
|
||||
typedef struct _GENERAL_LOOKASIDE GENERAL_LOOKASIDE, *PGENERAL_LOOKASIDE;
|
||||
typedef struct _GENERIC_ADDRESS GENERIC_ADDRESS, *PGENERIC_ADDRESS;
|
||||
typedef struct _GUID GUID, *PGUID;
|
||||
typedef struct _HL_FRAMEBUFFER_DATA HL_FRAMEBUFFER_DATA, *PHL_FRAMEBUFFER_DATA;
|
||||
@@ -290,12 +291,17 @@ typedef struct _LIST_ENTRY64 LIST_ENTRY64, *PLIST_ENTRY64;
|
||||
typedef struct _LOADER_GRAPHICS_INFORMATION_BLOCK LOADER_GRAPHICS_INFORMATION_BLOCK, *PLOADER_GRAPHICS_INFORMATION_BLOCK;
|
||||
typedef struct _LOADER_INFORMATION_BLOCK LOADER_INFORMATION_BLOCK, *PLOADER_INFORMATION_BLOCK;
|
||||
typedef struct _LOADER_MEMORY_DESCRIPTOR LOADER_MEMORY_DESCRIPTOR, *PLOADER_MEMORY_DESCRIPTOR;
|
||||
typedef struct _LOOKASIDE_LIST LOOKASIDE_LIST, *PLOOKASIDE_LIST;
|
||||
typedef struct _LOOKASIDE_LIST_EX LOOKASIDE_LIST_EX, *PLOOKASIDE_LIST_EX;
|
||||
typedef struct _M128 M128, *PM128;
|
||||
typedef struct _MMCOLOR_TABLES MMCOLOR_TABLES, *PMMCOLOR_TABLES;
|
||||
typedef struct _MMFREE_POOL_ENTRY MMFREE_POOL_ENTRY, *PMMFREE_POOL_ENTRY;
|
||||
typedef struct _MMMEMORY_LAYOUT MMMEMORY_LAYOUT, *PMMMEMORY_LAYOUT;
|
||||
typedef struct _MMPFNENTRY MMPFNENTRY, *PMMPFNENTRY;
|
||||
typedef struct _MMPFNLIST MMPFNLIST, *PMMPFNLIST;
|
||||
typedef struct _NONPAGED_LOOKASIDE_LIST NONPAGED_LOOKASIDE_LIST, *PNONPAGED_LOOKASIDE_LIST;
|
||||
typedef struct _OWNER_ENTRY OWNER_ENTRY, *POWNER_ENTRY;
|
||||
typedef struct _PAGED_LOOKASIDE_LIST PAGED_LOOKASIDE_LIST, *PPAGED_LOOKASIDE_LIST;
|
||||
typedef struct _PCAT_FIRMWARE_INFORMATION PCAT_FIRMWARE_INFORMATION, *PPCAT_FIRMWARE_INFORMATION;
|
||||
typedef struct _PCI_BRIDGE_CONTROL_REGISTER PCI_BRIDGE_CONTROL_REGISTER, *PPCI_BRIDGE_CONTROL_REGISTER;
|
||||
typedef struct _PCI_COMMON_CONFIG PCI_COMMON_CONFIG, *PPCI_COMMON_CONFIG;
|
||||
@@ -378,6 +384,7 @@ typedef union _EFI_HASH_OUTPUT EFI_HASH_OUTPUT, *PEFI_HASH_OUTPUT;
|
||||
typedef union _EFI_IA32_REGISTER_SET EFI_IA32_REGISTER_SET, *PEFI_IA32_REGISTER_SET;
|
||||
typedef union _EFI_IP_ADDRESS EFI_IP_ADDRESS, *PEFI_IP_ADDRESS;
|
||||
typedef union _EFI_PXE_BASE_CODE_PACKET EFI_PXE_BASE_CODE_PACKET, *PEFI_PXE_BASE_CODE_PACKET;
|
||||
typedef union _EX_RUNDOWN_REFERENCE EX_RUNDOWN_REFERENCE, *PEX_RUNDOWN_REFERENCE;
|
||||
typedef union _LARGE_INTEGER LARGE_INTEGER, *PLARGE_INTEGER;
|
||||
typedef union _SINGLE_LIST_HEADER SINGLE_LIST_HEADER, *PSINGLE_LIST_HEADER;
|
||||
typedef union _ULARGE_INTEGER ULARGE_INTEGER, *PULARGE_INTEGER;
|
||||
|
||||
Reference in New Issue
Block a user