ntoskrnl.exe: Implement KeReleaseSpinLockFromDpcLevel().

Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Zebediah Figura 2019-01-27 20:45:31 -06:00 committed by Alexandre Julliard
parent fbe23bdd99
commit a1dfdfaf22
3 changed files with 12 additions and 2 deletions

View File

@ -594,7 +594,7 @@
@ stdcall KeReleaseMutex(ptr long) @ stdcall KeReleaseMutex(ptr long)
@ stdcall KeReleaseSemaphore(ptr long long long) @ stdcall KeReleaseSemaphore(ptr long long long)
@ stdcall -arch=arm,arm64,x86_64 KeReleaseSpinLock(ptr long) @ stdcall -arch=arm,arm64,x86_64 KeReleaseSpinLock(ptr long)
@ stub KeReleaseSpinLockFromDpcLevel @ stdcall KeReleaseSpinLockFromDpcLevel(ptr)
@ stub KeRemoveByKeyDeviceQueue @ stub KeRemoveByKeyDeviceQueue
@ stub KeRemoveByKeyDeviceQueueIfBusy @ stub KeRemoveByKeyDeviceQueueIfBusy
@ stub KeRemoveDeviceQueue @ stub KeRemoveDeviceQueue

View File

@ -386,7 +386,6 @@ void WINAPI KeInitializeSpinLock( KSPIN_LOCK *lock )
*lock = 0; *lock = 0;
} }
#ifndef __i386__
static inline void small_pause(void) static inline void small_pause(void)
{ {
#ifdef __x86_64__ #ifdef __x86_64__
@ -396,6 +395,16 @@ static inline void small_pause(void)
#endif #endif
} }
/***********************************************************************
* KeReleaseSpinLockFromDpcLevel (NTOSKRNL.EXE.@)
*/
void WINAPI KeReleaseSpinLockFromDpcLevel( KSPIN_LOCK *lock )
{
TRACE("lock %p.\n", lock);
InterlockedExchangePointer( (void **)lock, 0 );
}
#ifndef __i386__
/*********************************************************************** /***********************************************************************
* KeReleaseSpinLock (NTOSKRNL.EXE.@) * KeReleaseSpinLock (NTOSKRNL.EXE.@)
*/ */

View File

@ -1443,6 +1443,7 @@ ULONG WINAPI KeQueryTimeIncrement(void);
LONG WINAPI KeReleaseMutex(PRKMUTEX,BOOLEAN); LONG WINAPI KeReleaseMutex(PRKMUTEX,BOOLEAN);
LONG WINAPI KeReleaseSemaphore(PRKSEMAPHORE,KPRIORITY,LONG,BOOLEAN); LONG WINAPI KeReleaseSemaphore(PRKSEMAPHORE,KPRIORITY,LONG,BOOLEAN);
void WINAPI KeReleaseSpinLock(KSPIN_LOCK*,KIRQL); void WINAPI KeReleaseSpinLock(KSPIN_LOCK*,KIRQL);
void WINAPI KeReleaseSpinLockFromDpcLevel(KSPIN_LOCK*);
LONG WINAPI KeResetEvent(PRKEVENT); LONG WINAPI KeResetEvent(PRKEVENT);
LONG WINAPI KeSetEvent(PRKEVENT,KPRIORITY,BOOLEAN); LONG WINAPI KeSetEvent(PRKEVENT,KPRIORITY,BOOLEAN);
KPRIORITY WINAPI KeSetPriorityThread(PKTHREAD,KPRIORITY); KPRIORITY WINAPI KeSetPriorityThread(PKTHREAD,KPRIORITY);