* Routine = Routine to be called by the worker thread
* Context = Parameter to be passed to the callback
*/
-#define ExInitializeWorkItem(Item, WorkerRoutine, RoutineContext) \
+#define ExInitializeWorkItem(Item, Routine, RoutineContext) \
ASSERT_IRQL(DISPATCH_LEVEL); \
- (Item)->Routine = (WorkerRoutine); \
- (Item)->Context = (RoutineContext); \
- (Item)->Entry.Flink = NULL; \
- (Item)->Entry.Blink = NULL;
+ (Item)->WorkerRoutine = (Routine); \
+ (Item)->Parameter = (RoutineContext); \
+ (Item)->List.Flink = NULL; \
+ (Item)->List.Blink = NULL;
NTSTATUS
STDCALL
);
ULONG
-STDCALL
+FASTCALL
ExInterlockedAddUlong (
PULONG Addend,
ULONG Increment,
PKSPIN_LOCK Lock
);
PLIST_ENTRY
-STDCALL
+FASTCALL
ExInterlockedInsertHeadList (
PLIST_ENTRY ListHead,
PLIST_ENTRY ListEntry,
PKSPIN_LOCK Lock
);
PLIST_ENTRY
-STDCALL
+FASTCALL
ExInterlockedInsertTailList (
PLIST_ENTRY ListHead,
PLIST_ENTRY ListEntry,
PKSPIN_LOCK Lock
);
PSINGLE_LIST_ENTRY
-STDCALL
+FASTCALL
ExInterlockedPopEntryList (
PSINGLE_LIST_ENTRY ListHead,
PKSPIN_LOCK Lock
PKSPIN_LOCK Lock
);
PSINGLE_LIST_ENTRY
-STDCALL
+FASTCALL
ExInterlockedPushEntryList (
PSINGLE_LIST_ENTRY ListHead,
PSINGLE_LIST_ENTRY ListEntry,
);
PLIST_ENTRY
-STDCALL
+FASTCALL
ExInterlockedRemoveHeadList (
PLIST_ENTRY Head,
PKSPIN_LOCK Lock
PERESOURCE Resource
);
-ULONG
+/* was ULONG */
+USHORT
STDCALL
ExIsResourceAcquiredSharedLite (
PERESOURCE Resource
VOID
STDCALL
ExNotifyCallback (
- IN PVOID CallbackObject,
+ IN PCALLBACK_OBJECT CallbackObject,
IN PVOID Argument1,
IN PVOID Argument2
);
* );
*/
#define ExQueryDepthSList(ListHead) \
- (USHORT)(ListHead)->s.Depth
+ (USHORT)(ListHead)->Depth
VOID
STDCALL
IN PVOID CallbackRegistration
);
+PSLIST_ENTRY
+FASTCALL
+InterlockedPopEntrySList (
+ IN PSLIST_HEADER ListHead
+ );
+
+PSLIST_ENTRY
+FASTCALL
+InterlockedPushEntrySList(
+ IN PSLIST_HEADER ListHead,
+ IN PSLIST_ENTRY ListEntry
+ );
/*
* PVOID
Lookaside->TotalAllocates++;
Entry = ExInterlockedPopEntrySList (&Lookaside->ListHead,
- &Lookaside->Lock);
+ &Lookaside->Obsoleted);
if (Entry == NULL)
{
Lookaside->AllocateMisses++;
return Entry;
}
-PVOID
-STDCALL
-ExAllocateFromPagedLookasideList (
- PPAGED_LOOKASIDE_LIST LookSide
- );
+static inline PVOID
+ExAllocateFromPagedLookasideList(
+ IN PPAGED_LOOKASIDE_LIST Lookaside)
+{
+ PVOID Entry;
+
+ Lookaside->TotalAllocates++;
+ Entry = InterlockedPopEntrySList(&Lookaside->ListHead);
+ if (Entry == NULL) {
+ Lookaside->AllocateMisses++;
+ Entry = (Lookaside->Allocate)(Lookaside->Type,
+ Lookaside->Size, Lookaside->Tag);
+ }
+ return Entry;
+}
VOID
STDCALL
)
{
Lookaside->TotalFrees++;
- if (ExQueryDepthSList (&Lookaside->ListHead) >= Lookaside->MinimumDepth)
+ if (ExQueryDepthSList (&Lookaside->ListHead) >= Lookaside->Depth)
{
Lookaside->FreeMisses++;
(Lookaside->Free)(Entry);
{
ExInterlockedPushEntrySList (&Lookaside->ListHead,
(PSINGLE_LIST_ENTRY)Entry,
- &Lookaside->Lock);
+ &Lookaside->Obsoleted);
}
}
-VOID
-STDCALL
-ExFreeToPagedLookasideList (
- PPAGED_LOOKASIDE_LIST Lookaside,
- PVOID Entry
- );
+static inline VOID
+ExFreeToPagedLookasideList(
+ IN PPAGED_LOOKASIDE_LIST Lookaside,
+ IN PVOID Entry)
+{
+ Lookaside->TotalFrees++;
+ if (ExQueryDepthSList(&Lookaside->ListHead) >= Lookaside->Depth) {
+ Lookaside->FreeMisses++;
+ (Lookaside->Free)(Entry);
+ } else {
+ InterlockedPushEntrySList(&Lookaside->ListHead, (PSLIST_ENTRY)Entry);
+ }
+}
VOID
STDCALL
PLONG Addend
);
+#ifndef InterlockedExchangePointer
#define InterlockedExchangePointer(__T__, __V__) \
(PVOID)InterlockedExchange((PLONG)(__T__), (LONG)(__V__))
+#endif
/*---*/
unsigned int exp
);
-/* BEGIN REACTOS ONLY */
-
-BOOLEAN STDCALL
-ExInitializeBinaryTree(IN PBINARY_TREE Tree,
- IN PKEY_COMPARATOR Compare,
- IN BOOLEAN UseNonPagedPool);
-
-VOID STDCALL
-ExDeleteBinaryTree(IN PBINARY_TREE Tree);
-
-VOID STDCALL
-ExInsertBinaryTree(IN PBINARY_TREE Tree,
- IN PVOID Key,
- IN PVOID Value);
-
-BOOLEAN STDCALL
-ExSearchBinaryTree(IN PBINARY_TREE Tree,
- IN PVOID Key,
- OUT PVOID * Value);
-
-BOOLEAN STDCALL
-ExRemoveBinaryTree(IN PBINARY_TREE Tree,
- IN PVOID Key,
- IN PVOID * Value);
-
-BOOLEAN STDCALL
-ExTraverseBinaryTree(IN PBINARY_TREE Tree,
- IN TRAVERSE_METHOD Method,
- IN PTRAVERSE_ROUTINE Routine,
- IN PVOID Context);
-
-BOOLEAN STDCALL
-ExInitializeSplayTree(IN PSPLAY_TREE Tree,
- IN PKEY_COMPARATOR Compare,
- IN BOOLEAN Weighted,
- IN BOOLEAN UseNonPagedPool);
-
-VOID STDCALL
-ExDeleteSplayTree(IN PSPLAY_TREE Tree);
-
-VOID STDCALL
-ExInsertSplayTree(IN PSPLAY_TREE Tree,
- IN PVOID Key,
- IN PVOID Value);
-
-BOOLEAN STDCALL
-ExSearchSplayTree(IN PSPLAY_TREE Tree,
- IN PVOID Key,
- OUT PVOID * Value);
-
-BOOLEAN STDCALL
-ExRemoveSplayTree(IN PSPLAY_TREE Tree,
- IN PVOID Key,
- IN PVOID * Value);
-
-BOOLEAN STDCALL
-ExWeightOfSplayTree(IN PSPLAY_TREE Tree,
- OUT PULONG Weight);
-
-BOOLEAN STDCALL
-ExTraverseSplayTree(IN PSPLAY_TREE Tree,
- IN TRAVERSE_METHOD Method,
- IN PTRAVERSE_ROUTINE Routine,
- IN PVOID Context);
-
-BOOLEAN STDCALL
-ExInitializeHashTable(IN PHASH_TABLE HashTable,
- IN ULONG HashTableSize,
- IN PKEY_COMPARATOR Compare OPTIONAL,
- IN BOOLEAN UseNonPagedPool);
-
-VOID STDCALL
-ExDeleteHashTable(IN PHASH_TABLE HashTable);
-
-VOID STDCALL
-ExInsertHashTable(IN PHASH_TABLE HashTable,
- IN PVOID Key,
- IN ULONG KeyLength,
- IN PVOID Value);
-
-BOOLEAN STDCALL
-ExSearchHashTable(IN PHASH_TABLE HashTable,
- IN PVOID Key,
- IN ULONG KeyLength,
- OUT PVOID * Value);
-
-BOOLEAN STDCALL
-ExRemoveHashTable(IN PHASH_TABLE HashTable,
- IN PVOID Key,
- IN ULONG KeyLength,
- IN PVOID * Value);
-
-/* END REACTOS ONLY */
-
#endif /* ndef _NTOS_EXFUNCS_H */