[ros-diffs] [sginsberg] 35565: - In IoAcquire/ReleaseCancelSpinLock, use the queued "IopCancelSpinLock" instead of a ros-specific "CancelSpinLock" standard spinlock - Misc fixes

sginsberg at svn.reactos.org sginsberg at svn.reactos.org
Sat Aug 23 18:30:15 CEST 2008


Author: sginsberg
Date: Sat Aug 23 11:30:14 2008
New Revision: 35565

URL: http://svn.reactos.org/svn/reactos?rev=35565&view=rev
Log:
- In IoAcquire/ReleaseCancelSpinLock, use the queued "IopCancelSpinLock" instead of a ros-specific "CancelSpinLock" standard spinlock
- Misc fixes

Modified:
    trunk/reactos/ntoskrnl/io/iomgr/error.c
    trunk/reactos/ntoskrnl/io/iomgr/iofunc.c
    trunk/reactos/ntoskrnl/io/iomgr/iomgr.c
    trunk/reactos/ntoskrnl/io/iomgr/irp.c
    trunk/reactos/ntoskrnl/io/iomgr/util.c

Modified: trunk/reactos/ntoskrnl/io/iomgr/error.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/io/iomgr/error.c?rev=35565&r1=35564&r2=35565&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/io/iomgr/error.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/io/iomgr/error.c [iso-8859-1] Sat Aug 23 11:30:14 2008
@@ -122,7 +122,7 @@
                            NULL);
     if (NT_SUCCESS(Status))
     {
-        /* Remmeber we're connected */
+        /* Remember we're connected */
         IopLogPortConnected = TRUE;
         return TRUE;
     }
@@ -583,7 +583,7 @@
     KeAcquireSpinLock(&IopLogListLock, &Irql);
     InsertHeadList(&IopErrorLogListHead, &LogEntry->ListEntry);
 
-    /* Check if the worker is runnign */
+    /* Check if the worker is running */
     if (!IopLogWorkerRunning)
     {
 #if 0
@@ -648,7 +648,7 @@
                               IN PKTHREAD Thread)
 {
     UNIMPLEMENTED;
-    return(FALSE);
+    return FALSE;
 }
 
 /*
@@ -659,14 +659,12 @@
 IoSetThreadHardErrorMode(IN BOOLEAN HardErrorEnabled)
 {
     PETHREAD Thread = PsGetCurrentThread();
-    BOOLEAN Old;
+    BOOLEAN OldMode;
 
     /* Get the current value */
-    Old = !Thread->HardErrorsAreDisabled;
+    OldMode = !Thread->HardErrorsAreDisabled;
 
     /* Set the new one and return the old */
     Thread->HardErrorsAreDisabled = !HardErrorEnabled;
-    return Old;
-}
-
-/* EOF */
+    return OldMode;
+}

Modified: trunk/reactos/ntoskrnl/io/iomgr/iofunc.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/io/iomgr/iofunc.c?rev=35565&r1=35564&r2=35565&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/io/iomgr/iofunc.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/io/iomgr/iofunc.c [iso-8859-1] Sat Aug 23 11:30:14 2008
@@ -682,7 +682,7 @@
     StackPtr->FileObject = FileObject;
 
     /* Call the Driver */
-    return IofCallDriver(DeviceObject, Irp);
+    return IoCallDriver(DeviceObject, Irp);
 }
 
 /*
@@ -732,7 +732,7 @@
     StackPtr->FileObject = FileObject;
 
     /* Call the Driver */
-    return IofCallDriver(DeviceObject, Irp);
+    return IoCallDriver(DeviceObject, Irp);
 }
 
 /*
@@ -776,7 +776,7 @@
 }
 
 /*
- * @unimplemented
+ * @implemented
  */
 NTSTATUS
 NTAPI
@@ -2045,7 +2045,7 @@
             CapturedByteOffset = FileObject->CurrentByteOffset;
         }
 
-        /* Rememer we are sync */
+        /* Remember we are sync */
         Synchronous = TRUE;
     }
     else if (!(ByteOffset) &&
@@ -2904,7 +2904,7 @@
             CapturedByteOffset = FileObject->CurrentByteOffset;
         }
 
-        /* Rememer we are sync */
+        /* Remember we are sync */
         Synchronous = TRUE;
     }
     else if (!(ByteOffset) &&

Modified: trunk/reactos/ntoskrnl/io/iomgr/iomgr.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/io/iomgr/iomgr.c?rev=35565&r1=35564&r2=35565&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/io/iomgr/iomgr.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/io/iomgr/iomgr.c [iso-8859-1] Sat Aug 23 11:30:14 2008
@@ -68,7 +68,6 @@
 extern LIST_ENTRY IopTimerQueueHead;
 extern KDPC IopTimerDpc;
 extern KTIMER IopTimer;
-extern KSPIN_LOCK CancelSpinLock;
 extern KSPIN_LOCK IoVpbLock;
 extern KSPIN_LOCK IoStatisticsLock;
 extern KSPIN_LOCK DriverReinitListLock;
@@ -463,7 +462,6 @@
     InitializeListHead(&LastChanceShutdownListHead);
     InitializeListHead(&FsChangeNotifyListHead);
     InitializeListHead(&IopErrorLogListHead);
-    KeInitializeSpinLock(&CancelSpinLock);
     KeInitializeSpinLock(&IoVpbLock);
     KeInitializeSpinLock(&IoStatisticsLock);
     KeInitializeSpinLock(&DriverReinitListLock);

Modified: trunk/reactos/ntoskrnl/io/iomgr/irp.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/io/iomgr/irp.c?rev=35565&r1=35564&r2=35565&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/io/iomgr/irp.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/io/iomgr/irp.c [iso-8859-1] Sat Aug 23 11:30:14 2008
@@ -1,8 +1,7 @@
-
 /*
  * PROJECT:         ReactOS Kernel
  * LICENSE:         GPL - See COPYING in the top level directory
- * FILE:            ntoskrnl/io/irp.c
+ * FILE:            ntoskrnl/io/iomgr/irp.c
  * PURPOSE:         IRP Handling Functions
  * PROGRAMMERS:     Alex Ionescu (alex.ionescu at reactos.org)
  *                  Gunnar Dalsnes
@@ -627,7 +626,7 @@
 
     /* Allocate IRP */
     Irp = IoAllocateIrp(DeviceObject->StackSize, FALSE);
-    if (!Irp) return Irp;
+    if (!Irp) return NULL;
 
     /* Get the Stack */
     StackPtr = IoGetNextIrpStackLocation(Irp);
@@ -731,7 +730,7 @@
     Irp->UserIosb = IoStatusBlock;
     Irp->Tail.Overlay.Thread = PsGetCurrentThread();
 
-    /* Set the Status Block after all is done */
+    /* Return the IRP */
     IOTRACE(IO_IRP_DEBUG,
             "%s - Built IRP %p with Major, Buffer, DO %lx %p %p\n",
             __FUNCTION__,
@@ -763,7 +762,7 @@
 
     /* Allocate IRP */
     Irp = IoAllocateIrp(DeviceObject->StackSize, FALSE);
-    if (!Irp) return Irp;
+    if (!Irp) return NULL;
 
     /* Get the Stack */
     StackPtr = IoGetNextIrpStackLocation(Irp);
@@ -857,6 +856,7 @@
             }
             else
             {
+                /* Clear the flags */
                 Irp->Flags = 0;
             }
 
@@ -1058,7 +1058,12 @@
          * Don't stay here forever if some broken driver doesn't complete
          * the IRP.
          */
-        if (!(Retries--)) IopRemoveThreadIrp();
+        if (!(Retries--))
+        {
+            /* Print out a message and remove the IRP */
+            DPRINT1("Broken driver did not complete!\n");
+            IopRemoveThreadIrp();
+        }
 
         /* Raise the IRQL Again */
         KeRaiseIrql(APC_LEVEL, &OldIrql);
@@ -1076,7 +1081,7 @@
 IoCallDriver(IN PDEVICE_OBJECT DeviceObject,
              IN PIRP Irp)
 {
-    /* Call fast call */
+    /* Call fastcall */
     return IofCallDriver(DeviceObject, Irp);
 }
 
@@ -1112,7 +1117,7 @@
               IN PIRP Irp)
 {
     PDRIVER_OBJECT DriverObject;
-    PIO_STACK_LOCATION Param;
+    PIO_STACK_LOCATION StackPtr;
 
     /* Get the Driver Object */
     DriverObject = DeviceObject->DriverObject;
@@ -1126,15 +1131,15 @@
     }
 
     /* Now update the stack location */
-    Param = IoGetNextIrpStackLocation(Irp);
-    Irp->Tail.Overlay.CurrentStackLocation = Param;
+    StackPtr = IoGetNextIrpStackLocation(Irp);
+    Irp->Tail.Overlay.CurrentStackLocation = StackPtr;
 
     /* Get the Device Object */
-    Param->DeviceObject = DeviceObject;
+    StackPtr->DeviceObject = DeviceObject;
 
     /* Call it */
-    return DriverObject->MajorFunction[Param->MajorFunction](DeviceObject,
-                                                             Irp);
+    return DriverObject->MajorFunction[StackPtr->MajorFunction](DeviceObject,
+                                                                Irp);
 }
 
 FORCEINLINE
@@ -1417,10 +1422,9 @@
 
 NTSTATUS
 NTAPI
-IopSynchronousCompletion(
-    IN PDEVICE_OBJECT DeviceObject,
-    IN PIRP Irp,
-    IN PVOID Context)
+IopSynchronousCompletion(IN PDEVICE_OBJECT DeviceObject,
+                         IN PIRP Irp,
+                         IN PVOID Context)
 {
     if (Irp->PendingReturned)
         KeSetEvent((PKEVENT)Context, IO_NO_INCREMENT, FALSE);
@@ -1464,6 +1468,7 @@
         KeWaitForSingleObject(&Event, Suspended, KernelMode, FALSE, NULL);
     }
 
+    /* Return success */
     return TRUE;
 }
 
@@ -1550,10 +1555,12 @@
 /*
  * @implemented
  */
-PEPROCESS NTAPI
+PEPROCESS
+NTAPI
 IoGetRequestorProcess(IN PIRP Irp)
 {
-    return(Irp->Tail.Overlay.Thread->ThreadsProcess);
+    /* Return the requestor process */
+    return Irp->Tail.Overlay.Thread->ThreadsProcess;
 }
 
 /*
@@ -1563,6 +1570,7 @@
 NTAPI
 IoGetRequestorProcessId(IN PIRP Irp)
 {
+    /* Return the requestor process' id */
     return (ULONG)(IoGetRequestorProcess(Irp)->UniqueProcessId);
 }
 
@@ -1586,6 +1594,7 @@
 NTAPI
 IoGetTopLevelIrp(VOID)
 {
+    /* Return the IRP */
     return (PIRP)PsGetCurrentThread()->TopLevelIrp;
 }
 
@@ -1736,5 +1745,3 @@
     /* Set the IRP */
     PsGetCurrentThread()->TopLevelIrp = (ULONG)Irp;
 }
-
-/* EOF */

Modified: trunk/reactos/ntoskrnl/io/iomgr/util.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/io/iomgr/util.c?rev=35565&r1=35564&r2=35565&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/io/iomgr/util.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/io/iomgr/util.c [iso-8859-1] Sat Aug 23 11:30:14 2008
@@ -1,9 +1,11 @@
 /*
  * PROJECT:         ReactOS Kernel
  * LICENSE:         GPL - See COPYING in the top level directory
- * FILE:            ntoskrnl/io/util.c
+ * FILE:            ntoskrnl/io/iomgr/util.c
  * PURPOSE:         I/O Utility Functions
- * PROGRAMMERS:     <UNKNOWN>
+ * PROGRAMMERS:     Alex Ionescu (alex.ionescu at reactos.org)
+ *                  Aleksey Bragin (aleksey at reactos.org)
+ *                  Daniel Zimmerman (netzimme at aim.com)
  */
 
 /* INCLUDES *****************************************************************/
@@ -17,10 +19,6 @@
 RtlpGetStackLimits(PULONG_PTR StackBase,
                    PULONG_PTR StackLimit);
 
-/* DATA **********************************************************************/
-
-KSPIN_LOCK CancelSpinLock;
-
 /* FUNCTIONS *****************************************************************/
 
 /*
@@ -28,10 +26,10 @@
  */
 VOID
 NTAPI
-IoAcquireCancelSpinLock(PKIRQL Irql)
+IoAcquireCancelSpinLock(OUT PKIRQL Irql)
 {
     /* Just acquire the internal lock */
-    KeAcquireSpinLock(&CancelSpinLock,Irql);
+    *Irql = KeAcquireQueuedSpinLock(LockQueueIoCancelLock);
 }
 
 /*
@@ -113,6 +111,7 @@
 NTAPI
 IoGetCurrentProcess(VOID)
 {
+    /* Return the current thread's process */
     return (PEPROCESS)PsGetCurrentThread()->Tcb.ApcState.Process;
 }
 
@@ -121,10 +120,10 @@
  */
 VOID
 NTAPI
-IoReleaseCancelSpinLock(KIRQL Irql)
+IoReleaseCancelSpinLock(IN KIRQL Irql)
 {
     /* Release the internal lock */
-    KeReleaseSpinLock(&CancelSpinLock,Irql);
+    KeReleaseQueuedSpinLock(LockQueueIoCancelLock, Irql);
 }
 
 /*
@@ -315,4 +314,3 @@
     UNIMPLEMENTED;
     return STATUS_NOT_IMPLEMENTED;
 }
-/* EOF */



More information about the Ros-diffs mailing list