[ros-diffs] [arty] 31955: Unstub some interlocked functions.

arty at svn.reactos.org arty at svn.reactos.org
Wed Jan 23 02:11:13 CET 2008


Author: arty
Date: Wed Jan 23 04:11:13 2008
New Revision: 31955

URL: http://svn.reactos.org/svn/reactos?rev=31955&view=rev
Log:
Unstub some interlocked functions.

Modified:
    trunk/reactos/ntoskrnl/ex/powerpc/fastinterlck.c

Modified: trunk/reactos/ntoskrnl/ex/powerpc/fastinterlck.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ex/powerpc/fastinterlck.c?rev=31955&r1=31954&r2=31955&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/ex/powerpc/fastinterlck.c (original)
+++ trunk/reactos/ntoskrnl/ex/powerpc/fastinterlck.c Wed Jan 23 04:11:13 2008
@@ -67,7 +67,7 @@
   IN PLONGLONG  Exchange,
   IN PLONGLONG  Comperand)
 {
-    return 0ll;
+    return _InterlockedCompareExchange64(Destination, *Exchange, *Comperand);
 }
 
 NTKERNELAPI
@@ -78,7 +78,13 @@
   IN PLIST_ENTRY  ListEntry,
   IN PKSPIN_LOCK  Lock)
 {
-    return NULL;
+    KIRQL OldIrql;
+    PLIST_ENTRY OldHead = NULL;
+    KeAcquireSpinLock(Lock, &OldIrql);
+    if (!IsListEmpty(ListHead)) OldHead = ListEntry->Flink;
+    InsertHeadList(ListHead, ListEntry);
+    KeReleaseSpinLock(Lock, OldIrql);
+    return OldHead;
 }
 
 NTKERNELAPI
@@ -89,7 +95,13 @@
   IN PLIST_ENTRY  ListEntry,
   IN PKSPIN_LOCK  Lock)
 {
-    return NULL;
+    KIRQL OldIrql;
+    PLIST_ENTRY OldHead = NULL;
+    KeAcquireSpinLock(Lock,&OldIrql);
+    if (!IsListEmpty(ListHead)) OldHead = ListEntry->Blink;
+    InsertTailList(ListHead, ListEntry);
+    KeReleaseSpinLock(Lock, OldIrql);
+    return OldHead;
 }
 
 NTKERNELAPI
@@ -129,7 +141,7 @@
 Exfi386InterlockedIncrementLong(
   IN PLONG  Addend)
 {
-    return 0;
+    return InterlockedIncrement(Addend);
 }
 
 NTKERNELAPI
@@ -138,7 +150,7 @@
 Exfi386InterlockedDecrementLong(
   IN PLONG  Addend)
 {
-    return 0;
+    return InterlockedDecrement(Addend);
 }
 
 NTKERNELAPI
@@ -148,7 +160,7 @@
   IN PULONG  Target,
   IN ULONG  Value)
 {
-    return 0;
+    return (ULONG)_InterlockedExchange((PLONG)Target, Value);
 }
 
 NTKERNELAPI
@@ -159,9 +171,16 @@
   IN LARGE_INTEGER  Increment,
   IN PKSPIN_LOCK  Lock)
 {
-    LARGE_INTEGER Result;
-    Result.QuadPart = 0;
-    return Result;
+    LARGE_INTEGER tmp, comp, outnum;
+
+    do {
+        tmp.QuadPart = Addend->QuadPart + Increment.QuadPart;
+        comp = *Addend;
+        outnum.QuadPart = _InterlockedCompareExchange64
+            (&Addend->QuadPart, tmp.QuadPart, comp.QuadPart);
+    } while(outnum.QuadPart != comp.QuadPart);
+
+    return outnum;
 }
 
 NTKERNELAPI
@@ -172,7 +191,7 @@
   IN ULONG  Increment,
   PKSPIN_LOCK  Lock)
 {
-    return 0;
+    return (ULONG)_InterlockedExchangeAdd((PLONG)Addend, Increment);
 }
 
 #undef ExInterlockedIncrementLong
@@ -183,7 +202,7 @@
     IN PLONG  Addend,
     IN PKSPIN_LOCK Lock)
 {
-    return 0;
+    return _InterlockedIncrement(Addend);
 }
 
 #undef ExInterlockedDecrementLong
@@ -194,7 +213,7 @@
     IN PLONG  Addend,
     IN PKSPIN_LOCK Lock)
 {
-    return 0;
+    return _InterlockedDecrement(Addend);
 }
 
 NTKERNELAPI
@@ -205,7 +224,7 @@
   IN ULONG  Value,
   IN PKSPIN_LOCK Lock)
 {
-    return 0;
+    return (ULONG)_InterlockedExchange((PLONG)Target, Value);
 }
 
 NTKERNELAPI
@@ -216,7 +235,13 @@
   IN PLIST_ENTRY  ListEntry,
   IN PKSPIN_LOCK  Lock)
 {
-    return NULL;
+    KIRQL OldIrql;
+    PLIST_ENTRY OldHead = NULL;
+    KeAcquireSpinLock(Lock,&OldIrql);
+    if (!IsListEmpty(ListHead)) OldHead = ListEntry->Flink;
+    InsertHeadList(ListHead, ListEntry);
+    KeReleaseSpinLock(Lock, OldIrql);
+    return OldHead;
 }
 
 NTKERNELAPI
@@ -227,7 +252,13 @@
   IN PLIST_ENTRY  ListEntry,
   IN PKSPIN_LOCK  Lock)
 {
-    return NULL;
+    KIRQL OldIrql;
+    PLIST_ENTRY OldHead = NULL;
+    KeAcquireSpinLock(Lock,&OldIrql);
+    if (!IsListEmpty(ListHead)) OldHead = ListEntry->Blink;
+    InsertTailList(ListHead, ListEntry);
+    KeReleaseSpinLock(Lock, OldIrql);
+    return OldHead;
 }
 
 NTKERNELAPI




More information about the Ros-diffs mailing list