X-Git-Url: http://git.jankratochvil.net/?p=reactos.git;a=blobdiff_plain;f=include%2Fddk%2Fexfuncs.h;fp=include%2Fddk%2Fexfuncs.h;h=a678ea3a526e4d2034546d43fbee3638aaeb04b7;hp=026f90c801aced258022533ef1f090ccee36f5c1;hb=7c0cf90e3b750f1f0dc83b2eec9e5c68a512c30f;hpb=ee8b63255465d8c28be3e7bd11628015708fc1ab diff --git a/include/ddk/exfuncs.h b/include/ddk/exfuncs.h index 026f90c..a678ea3 100644 --- a/include/ddk/exfuncs.h +++ b/include/ddk/exfuncs.h @@ -256,12 +256,12 @@ ExInitializeResourceLite ( * 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 @@ -288,7 +288,7 @@ ExInterlockedAddLargeStatistic ( ); ULONG -STDCALL +FASTCALL ExInterlockedAddUlong ( PULONG Addend, ULONG Increment, @@ -355,21 +355,21 @@ ExInterlockedIncrementLong ( 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 @@ -381,7 +381,7 @@ ExInterlockedPopEntrySList ( PKSPIN_LOCK Lock ); PSINGLE_LIST_ENTRY -STDCALL +FASTCALL ExInterlockedPushEntryList ( PSINGLE_LIST_ENTRY ListHead, PSINGLE_LIST_ENTRY ListEntry, @@ -403,7 +403,7 @@ ExInterlockedRemoveEntryList ( ); PLIST_ENTRY -STDCALL +FASTCALL ExInterlockedRemoveHeadList ( PLIST_ENTRY Head, PKSPIN_LOCK Lock @@ -441,7 +441,8 @@ ExIsResourceAcquiredExclusiveLite ( PERESOURCE Resource ); -ULONG +/* was ULONG */ +USHORT STDCALL ExIsResourceAcquiredSharedLite ( PERESOURCE Resource @@ -457,7 +458,7 @@ ExLocalTimeToSystemTime ( VOID STDCALL ExNotifyCallback ( - IN PVOID CallbackObject, + IN PCALLBACK_OBJECT CallbackObject, IN PVOID Argument1, IN PVOID Argument2 ); @@ -477,7 +478,7 @@ ExPostSystemEvent ( * ); */ #define ExQueryDepthSList(ListHead) \ - (USHORT)(ListHead)->s.Depth + (USHORT)(ListHead)->Depth VOID STDCALL @@ -586,6 +587,18 @@ ExUnregisterCallback ( IN PVOID CallbackRegistration ); +PSLIST_ENTRY +FASTCALL +InterlockedPopEntrySList ( + IN PSLIST_HEADER ListHead + ); + +PSLIST_ENTRY +FASTCALL +InterlockedPushEntrySList( + IN PSLIST_HEADER ListHead, + IN PSLIST_ENTRY ListEntry + ); /* * PVOID @@ -614,7 +627,7 @@ ExAllocateFromNPagedLookasideList ( Lookaside->TotalAllocates++; Entry = ExInterlockedPopEntrySList (&Lookaside->ListHead, - &Lookaside->Lock); + &Lookaside->Obsoleted); if (Entry == NULL) { Lookaside->AllocateMisses++; @@ -626,11 +639,21 @@ ExAllocateFromNPagedLookasideList ( 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 @@ -669,7 +692,7 @@ ExFreeToNPagedLookasideList ( ) { Lookaside->TotalFrees++; - if (ExQueryDepthSList (&Lookaside->ListHead) >= Lookaside->MinimumDepth) + if (ExQueryDepthSList (&Lookaside->ListHead) >= Lookaside->Depth) { Lookaside->FreeMisses++; (Lookaside->Free)(Entry); @@ -678,16 +701,23 @@ ExFreeToNPagedLookasideList ( { 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 @@ -801,8 +831,10 @@ InterlockedIncrement ( PLONG Addend ); +#ifndef InterlockedExchangePointer #define InterlockedExchangePointer(__T__, __V__) \ (PVOID)InterlockedExchange((PLONG)(__T__), (LONG)(__V__)) +#endif /*---*/ @@ -818,98 +850,4 @@ ExHookException ( 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 */