Module: wine Branch: master Commit: a1dfdfaf22c24524f26dad720fceaf421ec6bb78 URL: https://source.winehq.org/git/wine.git/?a=commit;h=a1dfdfaf22c24524f26dad720...
Author: Zebediah Figura z.figura12@gmail.com Date: Sun Jan 27 20:45:31 2019 -0600
ntoskrnl.exe: Implement KeReleaseSpinLockFromDpcLevel().
Signed-off-by: Zebediah Figura z.figura12@gmail.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/ntoskrnl.exe/ntoskrnl.exe.spec | 2 +- dlls/ntoskrnl.exe/sync.c | 11 ++++++++++- include/ddk/wdm.h | 1 + 3 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec index bf87504..47ce683 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec +++ b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec @@ -594,7 +594,7 @@ @ stdcall KeReleaseMutex(ptr long) @ stdcall KeReleaseSemaphore(ptr long long long) @ stdcall -arch=arm,arm64,x86_64 KeReleaseSpinLock(ptr long) -@ stub KeReleaseSpinLockFromDpcLevel +@ stdcall KeReleaseSpinLockFromDpcLevel(ptr) @ stub KeRemoveByKeyDeviceQueue @ stub KeRemoveByKeyDeviceQueueIfBusy @ stub KeRemoveDeviceQueue diff --git a/dlls/ntoskrnl.exe/sync.c b/dlls/ntoskrnl.exe/sync.c index 475fcf1..b439695 100644 --- a/dlls/ntoskrnl.exe/sync.c +++ b/dlls/ntoskrnl.exe/sync.c @@ -386,7 +386,6 @@ void WINAPI KeInitializeSpinLock( KSPIN_LOCK *lock ) *lock = 0; }
-#ifndef __i386__ static inline void small_pause(void) { #ifdef __x86_64__ @@ -397,6 +396,16 @@ static inline void small_pause(void) }
/*********************************************************************** + * KeReleaseSpinLockFromDpcLevel (NTOSKRNL.EXE.@) + */ +void WINAPI KeReleaseSpinLockFromDpcLevel( KSPIN_LOCK *lock ) +{ + TRACE("lock %p.\n", lock); + InterlockedExchangePointer( (void **)lock, 0 ); +} + +#ifndef __i386__ +/*********************************************************************** * KeReleaseSpinLock (NTOSKRNL.EXE.@) */ void WINAPI KeReleaseSpinLock( KSPIN_LOCK *lock, KIRQL irql ) diff --git a/include/ddk/wdm.h b/include/ddk/wdm.h index a53c7a2..25d7da8 100644 --- a/include/ddk/wdm.h +++ b/include/ddk/wdm.h @@ -1443,6 +1443,7 @@ ULONG WINAPI KeQueryTimeIncrement(void); LONG WINAPI KeReleaseMutex(PRKMUTEX,BOOLEAN); LONG WINAPI KeReleaseSemaphore(PRKSEMAPHORE,KPRIORITY,LONG,BOOLEAN); void WINAPI KeReleaseSpinLock(KSPIN_LOCK*,KIRQL); +void WINAPI KeReleaseSpinLockFromDpcLevel(KSPIN_LOCK*); LONG WINAPI KeResetEvent(PRKEVENT); LONG WINAPI KeSetEvent(PRKEVENT,KPRIORITY,BOOLEAN); KPRIORITY WINAPI KeSetPriorityThread(PKTHREAD,KPRIORITY);