[ros-diffs] [tkreuzer] 52735: [NTOSKRNL] Patch by Thomas Faber: Fix broken interlocked functions See issue #6374 for more details.

tkreuzer at svn.reactos.org tkreuzer at svn.reactos.org
Wed Jul 20 13:48:06 UTC 2011


Author: tkreuzer
Date: Wed Jul 20 13:48:06 2011
New Revision: 52735

URL: http://svn.reactos.org/svn/reactos?rev=52735&view=rev
Log:
[NTOSKRNL]
Patch by Thomas Faber:
Fix broken interlocked functions

See issue #6374 for more details.

Modified:
    trunk/reactos/ntoskrnl/ex/i386/fastinterlck_asm.S
    trunk/reactos/ntoskrnl/ex/i386/interlck_asm.S
    trunk/reactos/ntoskrnl/ntoskrnl.pspec
    trunk/reactos/ntoskrnl/ntoskrnl.spec

Modified: trunk/reactos/ntoskrnl/ex/i386/fastinterlck_asm.S
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ex/i386/fastinterlck_asm.S?rev=52735&r1=52734&r2=52735&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/ex/i386/fastinterlck_asm.S [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/ex/i386/fastinterlck_asm.S [iso-8859-1] Wed Jul 20 13:48:06 2011
@@ -155,8 +155,8 @@
 /*PLIST_ENTRY
  *FASTCALL
  *ExfInterlockedInsertTailList(IN PLIST_ENTRY ListHead,
- *                            IN PLIST_ENTRY ListEntry,
- *                            IN PKSPIN_LOCK Lock)
+ *                             IN PLIST_ENTRY ListEntry,
+ *                             IN PKSPIN_LOCK Lock)
  */
 PUBLIC @ExfInterlockedInsertTailList at 12
 @ExfInterlockedInsertTailList at 12:
@@ -537,7 +537,7 @@
 
 /*ULONG
  *FASTCALL
- *Exfi386InterlockedExchangeUlong(IN PULONG Taget,
+ *Exfi386InterlockedExchangeUlong(IN PULONG Target,
  *                                IN ULONG Value)
  */
 PUBLIC @Exfi386InterlockedExchangeUlong at 8
@@ -591,16 +591,16 @@
 
 /*PVOID
  *FASTCALL
- *ExfInterlockedCompareExchange64(IN PLONGLONG Destination,
- *                                IN PLONGLONG Exchange,
- *                                IN PLONGLONG Comperand,
- *                                IN PKSPIN_LOCK Lock)
+ *ExInterlockedCompareExchange64(IN PLONGLONG Destination,
+ *                               IN PLONGLONG Exchange,
+ *                               IN PLONGLONG Comperand,
+ *                               IN PKSPIN_LOCK Lock)
  */
 PUBLIC @ExInterlockedCompareExchange64 at 16
 @ExInterlockedCompareExchange64 at 16:
 
     /* Save registers */
-    push ebp
+    push ebx
     push ebp
 
     /* Get destination pointer, exchange value and comperand value/address */

Modified: trunk/reactos/ntoskrnl/ex/i386/interlck_asm.S
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ex/i386/interlck_asm.S?rev=52735&r1=52734&r2=52735&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/ex/i386/interlck_asm.S [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/ex/i386/interlck_asm.S [iso-8859-1] Wed Jul 20 13:48:06 2011
@@ -5,7 +5,7 @@
  * PURPOSE:         STDCALL Interlocked Functions
  * PROGRAMMERS:     Alex Ionescu (alex at relsoft.net)
  */
- 
+
 /* INCLUDES ******************************************************************/
 
 #include <asm.inc>
@@ -26,8 +26,8 @@
 
 /*PLIST_ENTRY
  *NTAPI
- *ExInterlockedAddLargeInteger(IN PLIST_ENTRY ListHead,
- *                             IN PLIST_ENTRY ListEntry,
+ *ExInterlockedAddLargeInteger(IN PLARGE_INTEGER Addend,
+ *                             IN LARGE_INTEGER Increment,
  *                             IN PKSPIN_LOCK Lock)
  */
 PUBLIC _ExInterlockedAddLargeInteger at 16
@@ -92,9 +92,9 @@
 
 /*PLIST_ENTRY
  *NTAPI
- *ExInterlockedInsertHeadList(IN PLIST_ENTRY ListHead,
- *                            IN PLIST_ENTRY ListEntry,
- *                            IN PKSPIN_LOCK Lock)
+ *ExInterlockedAddUlong(IN PULONG Addend,
+ *                      IN ULONG Increment,
+ *                      IN PKSPIN_LOCK Lock)
  */
 PUBLIC _ExInterlockedAddUlong at 12
 _ExInterlockedAddUlong at 12:
@@ -471,14 +471,18 @@
 PUBLIC _ExInterlockedExchangeUlong at 12
 _ExInterlockedExchangeUlong at 12:
 
+#ifdef CONFIG_SMP
     /* Get pointers */
     mov edx, [esp+4]
     mov eax, [esp+8]
 
-#ifdef CONFIG_SMP
     /* On MP, do the exchange */
     xchg [edx], eax
 #else
+    /* Get pointers */
+    mov edx, [esp+4]
+    mov ecx, [esp+8]
+
     /* On UP, disable interrupts and save flags */
     pushfd
     cli
@@ -494,8 +498,7 @@
 
 /*INTERLOCKED_RESULT
  *NTAPI
- *Exi386InterlockedIncrementLong(IN PLONG Addend,
- *                               IN PKSPIN_LOCK Lock)
+ *Exi386InterlockedIncrementLong(IN PLONG Addend)
  */
 PUBLIC _Exi386InterlockedIncrementLong at 4
 _Exi386InterlockedIncrementLong at 4:
@@ -513,8 +516,7 @@
 
 /*INTERLOCKED_RESULT
  *NTAPI
- *Exi386InterlockedDecrementLong(IN PLONG Addend,
- *                               IN PKSPIN_LOCK Lock)
+ *Exi386InterlockedDecrementLong(IN PLONG Addend)
  */
 PUBLIC _Exi386InterlockedDecrementLong at 4
 _Exi386InterlockedDecrementLong at 4:
@@ -528,25 +530,28 @@
     /* Return */
     lahf
     and eax, EFLAG_SELECT
-    ret 8
+    ret 4
 
 /*ULONG
  *NTAPI
  *Exi386InterlockedExchangeUlong(IN PULONG Target,
- *                               IN ULONG Value,
- *                               IN PKSPIN_LOCK Lock)
- */
-PUBLIC _Exi386InterlockedExchangeUlong at 12
-_Exi386InterlockedExchangeUlong at 12:
-
+ *                               IN ULONG Value)
+ */
+PUBLIC _Exi386InterlockedExchangeUlong at 8
+_Exi386InterlockedExchangeUlong at 8:
+
+#ifdef CONFIG_SMP
     /* Get pointers */
     mov edx, [esp+4]
     mov eax, [esp+8]
 
-#ifdef CONFIG_SMP
     /* On MP, do the exchange */
     xchg [edx], eax
 #else
+    /* Get pointers */
+    mov edx, [esp+4]
+    mov ecx, [esp+8]
+
     /* On UP, disable interrupts and save flags */
     pushfd
     cli

Modified: trunk/reactos/ntoskrnl/ntoskrnl.pspec
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ntoskrnl.pspec?rev=52735&r1=52734&r2=52735&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/ntoskrnl.pspec [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/ntoskrnl.pspec [iso-8859-1] Wed Jul 20 13:48:06 2011
@@ -198,7 +198,7 @@
 @ FASTCALL -arch=i386 Exfi386InterlockedExchangeUlong(ptr long)
 @ FASTCALL -arch=i386 Exfi386InterlockedIncrementLong(ptr)
 @ stdcall -arch=i386 Exi386InterlockedDecrementLong(ptr)
-@ stdcall -arch=i386 Exi386InterlockedExchangeUlong(ptr long long)
+@ stdcall -arch=i386 Exi386InterlockedExchangeUlong(ptr long)
 @ stdcall -arch=i386 Exi386InterlockedIncrementLong(ptr)
 @ FASTCALL -arch=i386 ExiAcquireFastMutex(ptr) ExAcquireFastMutex
 @ FASTCALL -arch=i386 ExiReleaseFastMutex(ptr) ExReleaseFastMutex

Modified: trunk/reactos/ntoskrnl/ntoskrnl.spec
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ntoskrnl.spec?rev=52735&r1=52734&r2=52735&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/ntoskrnl.spec [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/ntoskrnl.spec [iso-8859-1] Wed Jul 20 13:48:06 2011
@@ -178,7 +178,7 @@
 @ fastcall -arch=i386 Exfi386InterlockedExchangeUlong(ptr long)
 @ fastcall -arch=i386 Exfi386InterlockedIncrementLong(ptr)
 @ stdcall -arch=i386 Exi386InterlockedDecrementLong(ptr)
-@ stdcall -arch=i386 Exi386InterlockedExchangeUlong(ptr long long)
+@ stdcall -arch=i386 Exi386InterlockedExchangeUlong(ptr long)
 @ stdcall -arch=i386 Exi386InterlockedIncrementLong(ptr)
 @ fastcall -arch=i386 ExiAcquireFastMutex(ptr) ExAcquireFastMutex
 @ fastcall -arch=i386 ExiReleaseFastMutex(ptr) ExReleaseFastMutex




More information about the Ros-diffs mailing list