mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 12:52:58 +00:00
Added missing fastcall list functions
svn path=/trunk/; revision=3305
This commit is contained in:
parent
d35d4191c1
commit
8e93e09163
4 changed files with 309 additions and 177 deletions
|
@ -700,6 +700,7 @@ ExInitializeNPagedLookasideList (
|
||||||
ULONG Tag,
|
ULONG Tag,
|
||||||
USHORT Depth
|
USHORT Depth
|
||||||
);
|
);
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
STDCALL
|
STDCALL
|
||||||
ExInitializePagedLookasideList (
|
ExInitializePagedLookasideList (
|
||||||
|
@ -712,52 +713,53 @@ ExInitializePagedLookasideList (
|
||||||
USHORT Depth
|
USHORT Depth
|
||||||
);
|
);
|
||||||
|
|
||||||
|
ULONG FASTCALL
|
||||||
|
ExfInterlockedAddUlong(IN PULONG Addend,
|
||||||
|
IN ULONG Increment,
|
||||||
|
IN PKSPIN_LOCK Lock);
|
||||||
|
|
||||||
ULONG
|
PLIST_ENTRY FASTCALL
|
||||||
FASTCALL
|
ExfInterlockedInsertHeadList(IN PLIST_ENTRY ListHead,
|
||||||
ExfInterlockedAddUlong (
|
IN PLIST_ENTRY ListEntry,
|
||||||
IN PULONG Addend,
|
IN PKSPIN_LOCK Lock);
|
||||||
IN ULONG Increment,
|
|
||||||
IN PKSPIN_LOCK Lock
|
|
||||||
);
|
|
||||||
|
|
||||||
INTERLOCKED_RESULT
|
PLIST_ENTRY FASTCALL
|
||||||
FASTCALL
|
ExfInterlockedInsertTailList(IN PLIST_ENTRY ListHead,
|
||||||
Exfi386InterlockedIncrementLong (
|
IN PLIST_ENTRY ListEntry,
|
||||||
IN PLONG Addend
|
IN PKSPIN_LOCK Lock);
|
||||||
);
|
|
||||||
|
|
||||||
INTERLOCKED_RESULT
|
PSINGLE_LIST_ENTRY FASTCALL
|
||||||
FASTCALL
|
ExfInterlockedPopEntryList(IN PSINGLE_LIST_ENTRY ListHead,
|
||||||
Exfi386InterlockedDecrementLong (
|
IN PKSPIN_LOCK Lock);
|
||||||
IN PLONG Addend
|
|
||||||
);
|
|
||||||
|
|
||||||
ULONG
|
PSINGLE_LIST_ENTRY FASTCALL
|
||||||
FASTCALL
|
ExfInterlockedPushEntryList(IN PSINGLE_LIST_ENTRY ListHead,
|
||||||
Exfi386InterlockedExchangeUlong (
|
IN PSINGLE_LIST_ENTRY ListEntry,
|
||||||
IN PULONG Target,
|
IN PKSPIN_LOCK Lock);
|
||||||
IN ULONG Value
|
|
||||||
);
|
|
||||||
|
|
||||||
INTERLOCKED_RESULT
|
PLIST_ENTRY FASTCALL
|
||||||
STDCALL
|
ExfInterlockedRemoveHeadList(IN PLIST_ENTRY Head,
|
||||||
Exi386InterlockedIncrementLong (
|
IN PKSPIN_LOCK Lock);
|
||||||
IN PLONG Addend
|
|
||||||
);
|
|
||||||
|
|
||||||
INTERLOCKED_RESULT
|
INTERLOCKED_RESULT FASTCALL
|
||||||
STDCALL
|
Exfi386InterlockedIncrementLong(IN PLONG Addend);
|
||||||
Exi386InterlockedDecrementLong (
|
|
||||||
IN PLONG Addend
|
|
||||||
);
|
|
||||||
|
|
||||||
ULONG
|
INTERLOCKED_RESULT FASTCALL
|
||||||
STDCALL
|
Exfi386InterlockedDecrementLong(IN PLONG Addend);
|
||||||
Exi386InterlockedExchangeUlong (
|
|
||||||
IN PULONG Target,
|
ULONG FASTCALL
|
||||||
IN ULONG Value
|
Exfi386InterlockedExchangeUlong(IN PULONG Target,
|
||||||
);
|
IN ULONG Value);
|
||||||
|
|
||||||
|
INTERLOCKED_RESULT STDCALL
|
||||||
|
Exi386InterlockedIncrementLong(IN PLONG Addend);
|
||||||
|
|
||||||
|
INTERLOCKED_RESULT STDCALL
|
||||||
|
Exi386InterlockedDecrementLong(IN PLONG Addend);
|
||||||
|
|
||||||
|
ULONG STDCALL
|
||||||
|
Exi386InterlockedExchangeUlong(IN PULONG Target,
|
||||||
|
IN ULONG Value);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
LONG
|
LONG
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: list.c,v 1.4 2001/07/04 20:40:20 chorns Exp $
|
/* $Id: list.c,v 1.5 2002/07/27 13:02:13 ekohl Exp $
|
||||||
*
|
*
|
||||||
* COPYRIGHT: See COPYING in the top level directory
|
* COPYRIGHT: See COPYING in the top level directory
|
||||||
* PROJECT: ReactOS kernel
|
* PROJECT: ReactOS kernel
|
||||||
|
@ -22,11 +22,9 @@
|
||||||
|
|
||||||
|
|
||||||
PLIST_ENTRY STDCALL
|
PLIST_ENTRY STDCALL
|
||||||
ExInterlockedInsertHeadList (
|
ExInterlockedInsertHeadList(PLIST_ENTRY ListHead,
|
||||||
PLIST_ENTRY ListHead,
|
PLIST_ENTRY ListEntry,
|
||||||
PLIST_ENTRY ListEntry,
|
PKSPIN_LOCK Lock)
|
||||||
PKSPIN_LOCK Lock
|
|
||||||
)
|
|
||||||
/*
|
/*
|
||||||
* FUNCTION: Inserts an entry at the head of a doubly linked list
|
* FUNCTION: Inserts an entry at the head of a doubly linked list
|
||||||
* ARGUMENTS:
|
* ARGUMENTS:
|
||||||
|
@ -36,56 +34,60 @@ ExInterlockedInsertHeadList (
|
||||||
* RETURNS: The previous head of the list
|
* RETURNS: The previous head of the list
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
PLIST_ENTRY Old;
|
PLIST_ENTRY Old;
|
||||||
KIRQL oldlvl;
|
KIRQL oldlvl;
|
||||||
|
|
||||||
KeAcquireSpinLock(Lock,&oldlvl);
|
KeAcquireSpinLock(Lock,&oldlvl);
|
||||||
if (IsListEmpty(ListHead))
|
if (IsListEmpty(ListHead))
|
||||||
{
|
{
|
||||||
Old = NULL;
|
Old = NULL;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Old = ListHead->Flink;
|
Old = ListHead->Flink;
|
||||||
}
|
}
|
||||||
InsertHeadList(ListHead,ListEntry);
|
InsertHeadList(ListHead,ListEntry);
|
||||||
KeReleaseSpinLock(Lock,oldlvl);
|
KeReleaseSpinLock(Lock,oldlvl);
|
||||||
|
|
||||||
return(Old);
|
return(Old);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
PLIST_ENTRY STDCALL
|
PLIST_ENTRY STDCALL
|
||||||
ExInterlockedInsertTailList (
|
ExInterlockedInsertTailList(PLIST_ENTRY ListHead,
|
||||||
PLIST_ENTRY ListHead,
|
PLIST_ENTRY ListEntry,
|
||||||
PLIST_ENTRY ListEntry,
|
PKSPIN_LOCK Lock)
|
||||||
PKSPIN_LOCK Lock
|
/*
|
||||||
)
|
* FUNCTION: Inserts an entry at the tail of a doubly linked list
|
||||||
|
* ARGUMENTS:
|
||||||
|
* ListHead = Points to the head of the list
|
||||||
|
* ListEntry = Points to the entry to be inserted
|
||||||
|
* Lock = Caller supplied spinlock used to synchronize access
|
||||||
|
* RETURNS: The previous head of the list
|
||||||
|
*/
|
||||||
{
|
{
|
||||||
PLIST_ENTRY Old;
|
PLIST_ENTRY Old;
|
||||||
KIRQL oldlvl;
|
KIRQL oldlvl;
|
||||||
|
|
||||||
KeAcquireSpinLock(Lock,&oldlvl);
|
KeAcquireSpinLock(Lock,&oldlvl);
|
||||||
if (IsListEmpty(ListHead))
|
if (IsListEmpty(ListHead))
|
||||||
{
|
{
|
||||||
Old = NULL;
|
Old = NULL;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Old = ListHead->Blink;
|
Old = ListHead->Blink;
|
||||||
}
|
}
|
||||||
InsertTailList(ListHead,ListEntry);
|
InsertTailList(ListHead,ListEntry);
|
||||||
KeReleaseSpinLock(Lock,oldlvl);
|
KeReleaseSpinLock(Lock,oldlvl);
|
||||||
|
|
||||||
return(Old);
|
return(Old);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
PLIST_ENTRY STDCALL
|
PLIST_ENTRY STDCALL
|
||||||
ExInterlockedRemoveHeadList (
|
ExInterlockedRemoveHeadList(PLIST_ENTRY Head,
|
||||||
PLIST_ENTRY Head,
|
PKSPIN_LOCK Lock)
|
||||||
PKSPIN_LOCK Lock
|
|
||||||
)
|
|
||||||
/*
|
/*
|
||||||
* FUNCTION: Removes the head of a double linked list
|
* FUNCTION: Removes the head of a double linked list
|
||||||
* ARGUMENTS:
|
* ARGUMENTS:
|
||||||
|
@ -94,27 +96,26 @@ ExInterlockedRemoveHeadList (
|
||||||
* RETURNS: The removed entry
|
* RETURNS: The removed entry
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
PLIST_ENTRY ret;
|
PLIST_ENTRY ret;
|
||||||
KIRQL oldlvl;
|
KIRQL oldlvl;
|
||||||
|
|
||||||
KeAcquireSpinLock(Lock,&oldlvl);
|
KeAcquireSpinLock(Lock,&oldlvl);
|
||||||
if (IsListEmpty(Head))
|
if (IsListEmpty(Head))
|
||||||
{
|
{
|
||||||
ret = NULL;
|
ret = NULL;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ret = RemoveHeadList(Head);
|
ret = RemoveHeadList(Head);
|
||||||
}
|
}
|
||||||
KeReleaseSpinLock(Lock,oldlvl);
|
KeReleaseSpinLock(Lock,oldlvl);
|
||||||
return(ret);
|
return(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
PLIST_ENTRY
|
PLIST_ENTRY
|
||||||
ExInterlockedRemoveTailList (
|
ExInterlockedRemoveTailList(PLIST_ENTRY Head,
|
||||||
PLIST_ENTRY Head,
|
PKSPIN_LOCK Lock)
|
||||||
PKSPIN_LOCK Lock
|
|
||||||
)
|
|
||||||
/*
|
/*
|
||||||
* FUNCTION: Removes the tail of a double linked list
|
* FUNCTION: Removes the tail of a double linked list
|
||||||
* ARGUMENTS:
|
* ARGUMENTS:
|
||||||
|
@ -123,27 +124,26 @@ ExInterlockedRemoveTailList (
|
||||||
* RETURNS: The removed entry
|
* RETURNS: The removed entry
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
PLIST_ENTRY ret;
|
PLIST_ENTRY ret;
|
||||||
KIRQL oldlvl;
|
KIRQL oldlvl;
|
||||||
|
|
||||||
KeAcquireSpinLock(Lock,&oldlvl);
|
KeAcquireSpinLock(Lock,&oldlvl);
|
||||||
if (IsListEmpty(Head))
|
if (IsListEmpty(Head))
|
||||||
{
|
{
|
||||||
ret = NULL;
|
ret = NULL;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ret = RemoveTailList(Head);
|
ret = RemoveTailList(Head);
|
||||||
}
|
}
|
||||||
KeReleaseSpinLock(Lock,oldlvl);
|
KeReleaseSpinLock(Lock,oldlvl);
|
||||||
return(ret);
|
return(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
PSINGLE_LIST_ENTRY FASTCALL
|
PSINGLE_LIST_ENTRY FASTCALL
|
||||||
ExInterlockedPopEntrySList(
|
ExInterlockedPopEntrySList(IN PSLIST_HEADER ListHead,
|
||||||
PSLIST_HEADER ListHead,
|
IN PKSPIN_LOCK Lock)
|
||||||
PKSPIN_LOCK Lock)
|
|
||||||
/*
|
/*
|
||||||
* FUNCTION: Removes (pops) an entry from a sequenced list
|
* FUNCTION: Removes (pops) an entry from a sequenced list
|
||||||
* ARGUMENTS:
|
* ARGUMENTS:
|
||||||
|
@ -152,26 +152,25 @@ ExInterlockedPopEntrySList(
|
||||||
* RETURNS: The removed entry
|
* RETURNS: The removed entry
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
PSINGLE_LIST_ENTRY ret;
|
PSINGLE_LIST_ENTRY ret;
|
||||||
KIRQL oldlvl;
|
KIRQL oldlvl;
|
||||||
|
|
||||||
KeAcquireSpinLock(Lock,&oldlvl);
|
KeAcquireSpinLock(Lock,&oldlvl);
|
||||||
ret = PopEntryList(&ListHead->s.Next);
|
ret = PopEntryList(&ListHead->s.Next);
|
||||||
if (ret)
|
if (ret)
|
||||||
{
|
{
|
||||||
ListHead->s.Depth--;
|
ListHead->s.Depth--;
|
||||||
ListHead->s.Sequence++;
|
ListHead->s.Sequence++;
|
||||||
}
|
}
|
||||||
KeReleaseSpinLock(Lock,oldlvl);
|
KeReleaseSpinLock(Lock,oldlvl);
|
||||||
return(ret);
|
return(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
PSINGLE_LIST_ENTRY FASTCALL
|
PSINGLE_LIST_ENTRY FASTCALL
|
||||||
ExInterlockedPushEntrySList(
|
ExInterlockedPushEntrySList(IN PSLIST_HEADER ListHead,
|
||||||
PSLIST_HEADER ListHead,
|
IN PSINGLE_LIST_ENTRY ListEntry,
|
||||||
PSINGLE_LIST_ENTRY ListEntry,
|
IN PKSPIN_LOCK Lock)
|
||||||
PKSPIN_LOCK Lock)
|
|
||||||
/*
|
/*
|
||||||
* FUNCTION: Inserts (pushes) an entry into a sequenced list
|
* FUNCTION: Inserts (pushes) an entry into a sequenced list
|
||||||
* ARGUMENTS:
|
* ARGUMENTS:
|
||||||
|
@ -181,25 +180,22 @@ ExInterlockedPushEntrySList(
|
||||||
* RETURNS: The previous head of the list
|
* RETURNS: The previous head of the list
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
KIRQL oldlvl;
|
KIRQL oldlvl;
|
||||||
PSINGLE_LIST_ENTRY ret;
|
PSINGLE_LIST_ENTRY ret;
|
||||||
|
|
||||||
KeAcquireSpinLock(Lock,&oldlvl);
|
KeAcquireSpinLock(Lock,&oldlvl);
|
||||||
ret=ListHead->s.Next.Next;
|
ret=ListHead->s.Next.Next;
|
||||||
PushEntryList(&ListHead->s.Next,ListEntry);
|
PushEntryList(&ListHead->s.Next,ListEntry);
|
||||||
ListHead->s.Depth++;
|
ListHead->s.Depth++;
|
||||||
ListHead->s.Sequence++;
|
ListHead->s.Sequence++;
|
||||||
KeReleaseSpinLock(Lock,oldlvl);
|
KeReleaseSpinLock(Lock,oldlvl);
|
||||||
return(ret);
|
return(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
PSINGLE_LIST_ENTRY
|
PSINGLE_LIST_ENTRY STDCALL
|
||||||
STDCALL
|
ExInterlockedPopEntryList(IN PSINGLE_LIST_ENTRY ListHead,
|
||||||
ExInterlockedPopEntryList (
|
IN PKSPIN_LOCK Lock)
|
||||||
PSINGLE_LIST_ENTRY ListHead,
|
|
||||||
PKSPIN_LOCK Lock
|
|
||||||
)
|
|
||||||
/*
|
/*
|
||||||
* FUNCTION: Removes (pops) an entry from a singly list
|
* FUNCTION: Removes (pops) an entry from a singly list
|
||||||
* ARGUMENTS:
|
* ARGUMENTS:
|
||||||
|
@ -208,23 +204,20 @@ ExInterlockedPopEntryList (
|
||||||
* RETURNS: The removed entry
|
* RETURNS: The removed entry
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
PSINGLE_LIST_ENTRY ret;
|
PSINGLE_LIST_ENTRY ret;
|
||||||
KIRQL oldlvl;
|
KIRQL oldlvl;
|
||||||
|
|
||||||
KeAcquireSpinLock(Lock,&oldlvl);
|
KeAcquireSpinLock(Lock,&oldlvl);
|
||||||
ret = PopEntryList(ListHead);
|
ret = PopEntryList(ListHead);
|
||||||
KeReleaseSpinLock(Lock,oldlvl);
|
KeReleaseSpinLock(Lock,oldlvl);
|
||||||
return(ret);
|
return(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
PSINGLE_LIST_ENTRY
|
PSINGLE_LIST_ENTRY STDCALL
|
||||||
STDCALL
|
ExInterlockedPushEntryList(IN PSINGLE_LIST_ENTRY ListHead,
|
||||||
ExInterlockedPushEntryList (
|
IN PSINGLE_LIST_ENTRY ListEntry,
|
||||||
PSINGLE_LIST_ENTRY ListHead,
|
IN PKSPIN_LOCK Lock)
|
||||||
PSINGLE_LIST_ENTRY ListEntry,
|
|
||||||
PKSPIN_LOCK Lock
|
|
||||||
)
|
|
||||||
/*
|
/*
|
||||||
* FUNCTION: Inserts (pushes) an entry into a singly linked list
|
* FUNCTION: Inserts (pushes) an entry into a singly linked list
|
||||||
* ARGUMENTS:
|
* ARGUMENTS:
|
||||||
|
@ -234,14 +227,151 @@ ExInterlockedPushEntryList (
|
||||||
* RETURNS: The previous head of the list
|
* RETURNS: The previous head of the list
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
KIRQL oldlvl;
|
KIRQL oldlvl;
|
||||||
PSINGLE_LIST_ENTRY ret;
|
PSINGLE_LIST_ENTRY ret;
|
||||||
|
|
||||||
KeAcquireSpinLock(Lock,&oldlvl);
|
KeAcquireSpinLock(Lock,&oldlvl);
|
||||||
ret=ListHead->Next;
|
ret=ListHead->Next;
|
||||||
PushEntryList(ListHead,ListEntry);
|
PushEntryList(ListHead,ListEntry);
|
||||||
KeReleaseSpinLock(Lock,oldlvl);
|
KeReleaseSpinLock(Lock,oldlvl);
|
||||||
return(ret);
|
return(ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
PLIST_ENTRY FASTCALL
|
||||||
|
ExfInterlockedInsertHeadList(IN PLIST_ENTRY ListHead,
|
||||||
|
IN PLIST_ENTRY ListEntry,
|
||||||
|
IN PKSPIN_LOCK Lock)
|
||||||
|
/*
|
||||||
|
* FUNCTION: Inserts an entry at the head of a doubly linked list
|
||||||
|
* ARGUMENTS:
|
||||||
|
* ListHead = Points to the head of the list
|
||||||
|
* ListEntry = Points to the entry to be inserted
|
||||||
|
* Lock = Caller supplied spinlock used to synchronize access
|
||||||
|
* RETURNS: The previous head of the list
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
PLIST_ENTRY Old;
|
||||||
|
KIRQL oldlvl;
|
||||||
|
|
||||||
|
KeAcquireSpinLock(Lock,&oldlvl);
|
||||||
|
if (IsListEmpty(ListHead))
|
||||||
|
{
|
||||||
|
Old = NULL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Old = ListHead->Flink;
|
||||||
|
}
|
||||||
|
InsertHeadList(ListHead,ListEntry);
|
||||||
|
KeReleaseSpinLock(Lock,oldlvl);
|
||||||
|
|
||||||
|
return(Old);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
PLIST_ENTRY FASTCALL
|
||||||
|
ExfInterlockedInsertTailList(IN PLIST_ENTRY ListHead,
|
||||||
|
IN PLIST_ENTRY ListEntry,
|
||||||
|
IN PKSPIN_LOCK Lock)
|
||||||
|
/*
|
||||||
|
* FUNCTION: Inserts an entry at the tail of a doubly linked list
|
||||||
|
* ARGUMENTS:
|
||||||
|
* ListHead = Points to the head of the list
|
||||||
|
* ListEntry = Points to the entry to be inserted
|
||||||
|
* Lock = Caller supplied spinlock used to synchronize access
|
||||||
|
* RETURNS: The previous head of the list
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
PLIST_ENTRY Old;
|
||||||
|
KIRQL oldlvl;
|
||||||
|
|
||||||
|
KeAcquireSpinLock(Lock,&oldlvl);
|
||||||
|
if (IsListEmpty(ListHead))
|
||||||
|
{
|
||||||
|
Old = NULL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Old = ListHead->Blink;
|
||||||
|
}
|
||||||
|
InsertTailList(ListHead,ListEntry);
|
||||||
|
KeReleaseSpinLock(Lock,oldlvl);
|
||||||
|
|
||||||
|
return(Old);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
PSINGLE_LIST_ENTRY FASTCALL
|
||||||
|
ExfInterlockedPopEntryList(IN PSINGLE_LIST_ENTRY ListHead,
|
||||||
|
IN PKSPIN_LOCK Lock)
|
||||||
|
/*
|
||||||
|
* FUNCTION: Removes (pops) an entry from a singly list
|
||||||
|
* ARGUMENTS:
|
||||||
|
* ListHead = Points to the head of the list
|
||||||
|
* Lock = Lock for synchronizing access to the list
|
||||||
|
* RETURNS: The removed entry
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
PSINGLE_LIST_ENTRY ret;
|
||||||
|
KIRQL oldlvl;
|
||||||
|
|
||||||
|
KeAcquireSpinLock(Lock,&oldlvl);
|
||||||
|
ret = PopEntryList(ListHead);
|
||||||
|
KeReleaseSpinLock(Lock,oldlvl);
|
||||||
|
return(ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
PSINGLE_LIST_ENTRY FASTCALL
|
||||||
|
ExfInterlockedPushEntryList(IN PSINGLE_LIST_ENTRY ListHead,
|
||||||
|
IN PSINGLE_LIST_ENTRY ListEntry,
|
||||||
|
IN PKSPIN_LOCK Lock)
|
||||||
|
/*
|
||||||
|
* FUNCTION: Inserts (pushes) an entry into a singly linked list
|
||||||
|
* ARGUMENTS:
|
||||||
|
* ListHead = Points to the head of the list
|
||||||
|
* ListEntry = Points to the entry to be inserted
|
||||||
|
* Lock = Caller supplied spinlock used to synchronize access
|
||||||
|
* RETURNS: The previous head of the list
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
KIRQL oldlvl;
|
||||||
|
PSINGLE_LIST_ENTRY ret;
|
||||||
|
|
||||||
|
KeAcquireSpinLock(Lock,&oldlvl);
|
||||||
|
ret=ListHead->Next;
|
||||||
|
PushEntryList(ListHead,ListEntry);
|
||||||
|
KeReleaseSpinLock(Lock,oldlvl);
|
||||||
|
return(ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
PLIST_ENTRY FASTCALL
|
||||||
|
ExfInterlockedRemoveHeadList(IN PLIST_ENTRY Head,
|
||||||
|
IN PKSPIN_LOCK Lock)
|
||||||
|
/*
|
||||||
|
* FUNCTION: Removes the head of a double linked list
|
||||||
|
* ARGUMENTS:
|
||||||
|
* Head = Points to the head of the list
|
||||||
|
* Lock = Lock for synchronizing access to the list
|
||||||
|
* RETURNS: The removed entry
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
PLIST_ENTRY ret;
|
||||||
|
KIRQL oldlvl;
|
||||||
|
|
||||||
|
KeAcquireSpinLock(Lock,&oldlvl);
|
||||||
|
if (IsListEmpty(Head))
|
||||||
|
{
|
||||||
|
ret = NULL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ret = RemoveHeadList(Head);
|
||||||
|
}
|
||||||
|
KeReleaseSpinLock(Lock,oldlvl);
|
||||||
|
return(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* EOF */
|
/* EOF */
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
; $Id: ntoskrnl.def,v 1.138 2002/07/25 13:18:31 ekohl Exp $
|
; $Id: ntoskrnl.def,v 1.139 2002/07/27 13:02:37 ekohl Exp $
|
||||||
;
|
;
|
||||||
; reactos/ntoskrnl/ntoskrnl.def
|
; reactos/ntoskrnl/ntoskrnl.def
|
||||||
;
|
;
|
||||||
|
@ -113,11 +113,11 @@ ExInsertHashTable@16
|
||||||
ExSearchHashTable@16
|
ExSearchHashTable@16
|
||||||
ExRemoveHashTable@16
|
ExRemoveHashTable@16
|
||||||
@ExfInterlockedAddUlong@12
|
@ExfInterlockedAddUlong@12
|
||||||
;@ExfInterlockedInsertHeadList
|
@ExfInterlockedInsertHeadList@12
|
||||||
;@ExfInterlockedInsertTailList
|
@ExfInterlockedInsertTailList@12
|
||||||
;@ExfInterlockedPopEntryList
|
@ExfInterlockedPopEntryList@8
|
||||||
;@ExfInterlockedPushEntryList
|
@ExfInterlockedPushEntryList@12
|
||||||
;@ExfInterlockedRemoveHeadList
|
@ExfInterlockedRemoveHeadList@8
|
||||||
@Exfi386InterlockedDecrementLong@4
|
@Exfi386InterlockedDecrementLong@4
|
||||||
@Exfi386InterlockedExchangeUlong@8
|
@Exfi386InterlockedExchangeUlong@8
|
||||||
@Exfi386InterlockedIncrementLong@4
|
@Exfi386InterlockedIncrementLong@4
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
; $Id: ntoskrnl.edf,v 1.124 2002/07/25 13:18:31 ekohl Exp $
|
; $Id: ntoskrnl.edf,v 1.125 2002/07/27 13:02:37 ekohl Exp $
|
||||||
;
|
;
|
||||||
; reactos/ntoskrnl/ntoskrnl.def
|
; reactos/ntoskrnl/ntoskrnl.def
|
||||||
;
|
;
|
||||||
|
@ -113,11 +113,11 @@ ExInsertHashTable=ExInsertHashTable@16
|
||||||
ExSearchHashTable=ExSearchHashTable@16
|
ExSearchHashTable=ExSearchHashTable@16
|
||||||
ExRemoveHashTable=ExRemoveHashTable@16
|
ExRemoveHashTable=ExRemoveHashTable@16
|
||||||
ExfInterlockedAddUlong=@ExfInterlockedAddUlong@12
|
ExfInterlockedAddUlong=@ExfInterlockedAddUlong@12
|
||||||
;ExfInterlockedInsertHeadList
|
ExfInterlockedInsertHeadList=@ExfInterlockedInsertHeadList@12
|
||||||
;ExfInterlockedInsertTailList
|
ExfInterlockedInsertTailList=@ExfInterlockedInsertTailList@12
|
||||||
;ExfInterlockedPopEntryList
|
ExfInterlockedPopEntryList=@ExfInterlockedPopEntryList@8
|
||||||
;ExfInterlockedPushEntryList
|
ExfInterlockedPushEntryList=@ExfInterlockedPushEntryList@12
|
||||||
;ExfInterlockedRemoveHeadList
|
ExfInterlockedRemoveHeadList=@ExfInterlockedRemoveHeadList@8
|
||||||
Exfi386InterlockedDecrementLong=@Exfi386InterlockedDecrementLong@4
|
Exfi386InterlockedDecrementLong=@Exfi386InterlockedDecrementLong@4
|
||||||
Exfi386InterlockedExchangeUlong=@Exfi386InterlockedExchangeUlong@8
|
Exfi386InterlockedExchangeUlong=@Exfi386InterlockedExchangeUlong@8
|
||||||
Exfi386InterlockedIncrementLong=@Exfi386InterlockedIncrementLong@4
|
Exfi386InterlockedIncrementLong=@Exfi386InterlockedIncrementLong@4
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue