[ros-diffs] [ros-arm-bringup] 32179: We now generate the correct ARM syscall stub code for system calls with IDs > 0x100. We never call KfRaise/LowerIrql in portable code anymore, isntead, we use Ke. We now have correctly defined IRQL routines for ARM, much more of the kernel builds as a result.

ros-arm-bringup at svn.reactos.org ros-arm-bringup at svn.reactos.org
Thu Feb 7 08:10:14 CET 2008


Author: ros-arm-bringup
Date: Thu Feb  7 10:10:13 2008
New Revision: 32179

URL: http://svn.reactos.org/svn/reactos?rev=32179&view=rev
Log:
We now generate the correct ARM syscall stub code for system calls with IDs > 0x100.
We never call KfRaise/LowerIrql in portable code anymore, isntead, we use Ke.
We now have correctly defined IRQL routines for ARM, much more of the kernel builds as a result.

Modified:
    trunk/reactos/include/ddk/winddk.h
    trunk/reactos/include/reactos/armddk.h
    trunk/reactos/ntoskrnl/ex/fmutex.c
    trunk/reactos/ntoskrnl/ex/shutdown.c
    trunk/reactos/ntoskrnl/inbv/inbv.c
    trunk/reactos/ntoskrnl/io/iomgr/file.c
    trunk/reactos/ntoskrnl/io/iomgr/irp.c
    trunk/reactos/ntoskrnl/ke/apc.c
    trunk/reactos/ntoskrnl/ke/bug.c
    trunk/reactos/ntoskrnl/ke/ipi.c
    trunk/reactos/ntoskrnl/ps/thread.c
    trunk/reactos/tools/nci/ncitool.c

Modified: trunk/reactos/include/ddk/winddk.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/ddk/winddk.h?rev=32179&r1=32178&r2=32179&view=diff
==============================================================================
--- trunk/reactos/include/ddk/winddk.h (original)
+++ trunk/reactos/include/ddk/winddk.h Thu Feb  7 10:10:13 2008
@@ -9561,6 +9561,10 @@
 DDKAPI
 KeRaiseIrqlToSynchLevel(
     VOID);
+    
+#elif defined(_M_ARM)
+    
+#include <armddk.h>
 
 #else
 

Modified: trunk/reactos/include/reactos/armddk.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/reactos/armddk.h?rev=32179&r1=32178&r2=32179&view=diff
==============================================================================
--- trunk/reactos/include/reactos/armddk.h (original)
+++ trunk/reactos/include/reactos/armddk.h Thu Feb  7 10:10:13 2008
@@ -100,4 +100,24 @@
     return (struct _TEB*)USERPCR->Teb;
 }
 
+//
+// IRQL Support on ARM is similar to MIPS/ALPHA
+//
+NTKERNELAPI
+KIRQL
+DDKAPI
+KeSwapIrql(
+    IN KIRQL NewIrql
+);
+
+NTKERNELAPI
+KIRQL
+NTAPI
+KeRaiseIrqlToDpcLevel(
+    VOID
+);
+
+#define KeLowerIrql(NewIrql) KeSwapIrql(NewIrql)
+#define KeRaiseIrql(NewIrql, OldIrql) *(OldIrql) = KeSwapIrql(NewIrql)
+
 #endif

Modified: trunk/reactos/ntoskrnl/ex/fmutex.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ex/fmutex.c?rev=32179&r1=32178&r2=32179&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/ex/fmutex.c (original)
+++ trunk/reactos/ntoskrnl/ex/fmutex.c Thu Feb  7 10:10:13 2008
@@ -109,7 +109,7 @@
     ASSERT(KeGetCurrentIrql() <= APC_LEVEL);
 
     /* Raise IRQL to APC */
-    OldIrql = KfRaiseIrql(APC_LEVEL);
+    KeRaiseIrql(APC_LEVEL, &OldIrql);
 
     /* Decrease the count */
     if (InterlockedDecrement(&FastMutex->Count) != 0)
@@ -145,7 +145,7 @@
     }
 
     /* Lower IRQL back */
-    KfLowerIrql(OldIrql);
+    KeLowerIrql(OldIrql);
 }
 
 /*
@@ -181,7 +181,7 @@
     ASSERT(KeGetCurrentIrql() <= APC_LEVEL);
 
     /* Raise to APC_LEVEL */
-    OldIrql = KfRaiseIrql(APC_LEVEL);
+    KeRaiseIrql(APC_LEVEL, &OldIrql);
 
     /* Check if we can quickly acquire it */
     if (InterlockedCompareExchange(&FastMutex->Count, 0, 1) == 1)
@@ -194,7 +194,7 @@
     else
     {
         /* Acquire attempt failed */
-        KfLowerIrql(OldIrql);
+        KeLowerIrql(OldIrql);
         return FALSE;
     }
 }

Modified: trunk/reactos/ntoskrnl/ex/shutdown.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ex/shutdown.c?rev=32179&r1=32178&r2=32179&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/ex/shutdown.c (original)
+++ trunk/reactos/ntoskrnl/ex/shutdown.c Thu Feb  7 10:10:13 2008
@@ -29,13 +29,14 @@
 			  IN PVOID SystemArgument1,
 			  IN PVOID SystemArgument2)
 {
+   KIRQL OldIrql;
    if (DeferredContext)
      {
        ExFreePool(DeferredContext);
      }
    while (TRUE)
      {
-       KfRaiseIrql(SYNCH_LEVEL);
+       KeRaiseIrql(SYNCH_LEVEL, &OldIrql);
 #if defined(_M_X86)
        Ke386HaltProcessor();
 #else

Modified: trunk/reactos/ntoskrnl/inbv/inbv.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/inbv/inbv.c?rev=32179&r1=32178&r2=32179&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/inbv/inbv.c (original)
+++ trunk/reactos/ntoskrnl/inbv/inbv.c Thu Feb  7 10:10:13 2008
@@ -157,7 +157,7 @@
     if (InbvOldIrql < DISPATCH_LEVEL)
     {
         /* Raise IRQL to dispatch level */
-        InbvOldIrql = KfRaiseIrql(DISPATCH_LEVEL);
+        KeRaiseIrql(DISPATCH_LEVEL, &InbvOldIrql);
     }
 
     /* Acquire the lock */
@@ -172,7 +172,7 @@
     KiReleaseSpinLock(&BootDriverLock);
 
     /* If we were below dispatch level, lower IRQL back */
-    if (InbvOldIrql < DISPATCH_LEVEL) KfLowerIrql(InbvOldIrql);
+    if (InbvOldIrql < DISPATCH_LEVEL) KeLowerIrql(InbvOldIrql);
 }
 
 VOID

Modified: trunk/reactos/ntoskrnl/io/iomgr/file.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/io/iomgr/file.c?rev=32179&r1=32178&r2=32179&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/io/iomgr/file.c (original)
+++ trunk/reactos/ntoskrnl/io/iomgr/file.c Thu Feb  7 10:10:13 2008
@@ -2748,7 +2748,7 @@
     if (!NT_SUCCESS(Status)) return Status;
 
     /* IRP cancellations are synchronized at APC_LEVEL. */
-    OldIrql = KfRaiseIrql(APC_LEVEL);
+    KeRaiseIrql(APC_LEVEL, &OldIrql);
 
     /* Get the current thread */
     Thread = PsGetCurrentThread();
@@ -2775,7 +2775,7 @@
     }
 
     /* Lower the IRQL */
-    KfLowerIrql(OldIrql);
+    KeLowerIrql(OldIrql);
 
     /* Check if we had found an IRP */
     if (OurIrpsInList)
@@ -2791,7 +2791,7 @@
             OurIrpsInList = FALSE;
 
             /* Raise IRQL */
-            OldIrql = KfRaiseIrql(APC_LEVEL);
+            KeRaiseIrql(APC_LEVEL, &OldIrql);
 
             /* Now loop the list again */
             NextEntry = ListHead->Flink;
@@ -2811,7 +2811,7 @@
             }
 
             /* Lower the IRQL */
-            KfLowerIrql(OldIrql);
+            KeLowerIrql(OldIrql);
         }
     }
 

Modified: trunk/reactos/ntoskrnl/io/iomgr/irp.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/io/iomgr/irp.c?rev=32179&r1=32178&r2=32179&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/io/iomgr/irp.c (original)
+++ trunk/reactos/ntoskrnl/io/iomgr/irp.c Thu Feb  7 10:10:13 2008
@@ -1021,7 +1021,7 @@
             Thread);
 
     /* Raise to APC to protect the IrpList */
-    OldIrql = KfRaiseIrql(APC_LEVEL);
+    KeRaiseIrql(APC_LEVEL, &OldIrql);
 
     /* Start by cancelling all the IRPs in the current thread queue. */
     ListHead = &Thread->IrpList;
@@ -1045,7 +1045,7 @@
     while (!IsListEmpty(&Thread->IrpList))
     {
         /* Now we can lower */
-        KfLowerIrql(OldIrql);
+        KeLowerIrql(OldIrql);
 
         /* Wait a short while and then look if all our IRPs were completed. */
         KeDelayExecutionThread(KernelMode, FALSE, &Interval);
@@ -1057,11 +1057,11 @@
         if (!(Retries--)) IopRemoveThreadIrp();
 
         /* Raise the IRQL Again */
-        OldIrql = KfRaiseIrql(APC_LEVEL);
+        KeRaiseIrql(APC_LEVEL, &OldIrql);
     }
 
     /* We're done, lower the IRQL */
-    KfLowerIrql(OldIrql);
+    KeLowerIrql(OldIrql);
 }
 
 /*

Modified: trunk/reactos/ntoskrnl/ke/apc.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ke/apc.c?rev=32179&r1=32178&r2=32179&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/ke/apc.c (original)
+++ trunk/reactos/ntoskrnl/ke/apc.c Thu Feb  7 10:10:13 2008
@@ -35,13 +35,15 @@
 NTAPI
 KiCheckForKernelApcDelivery(VOID)
 {
+    KIRQL OldIrql;
+
     /* We should only deliver at passive */
     if (KeGetCurrentIrql() == PASSIVE_LEVEL)
     {
         /* Raise to APC and Deliver APCs, then lower back to Passive */
-        KfRaiseIrql(APC_LEVEL);
+        KeRaiseIrql(APC_LEVEL, &OldIrql);
         KiDeliverApc(KernelMode, 0, 0);
-        KfLowerIrql(PASSIVE_LEVEL);
+        KeLowerIrql(PASSIVE_LEVEL);
     }
     else
     {

Modified: trunk/reactos/ntoskrnl/ke/bug.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ke/bug.c?rev=32179&r1=32178&r2=32179&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/ke/bug.c (original)
+++ trunk/reactos/ntoskrnl/ke/bug.c Thu Feb  7 10:10:13 2008
@@ -769,6 +769,7 @@
     PVOID DriverBase;
     PLDR_DATA_TABLE_ENTRY LdrEntry;
     PULONG_PTR HardErrorParameters;
+    KIRQL OldIrql;
 #ifdef CONFIG_SMP
     LONG i = 0;
 #endif
@@ -1115,7 +1116,7 @@
 
     /* Raise IRQL to HIGH_LEVEL */
     _disable();
-    KfRaiseIrql(HIGH_LEVEL);
+    KeRaiseIrql(HIGH_LEVEL, &OldIrql);
 
     /* Avoid recursion */
     if (!InterlockedDecrement((PLONG)&KeBugCheckCount))
@@ -1137,13 +1138,13 @@
 #endif
 
         /* Display the BSOD */
-        KfLowerIrql(APC_LEVEL); // This is a nastier hack than any ever before
+        KeLowerIrql(APC_LEVEL); // This is a nastier hack than any ever before
         KiDisplayBlueScreen(MessageId,
                             IsHardError,
                             HardErrCaption,
                             HardErrMessage,
                             AnsiName);
-        KfRaiseIrql(HIGH_LEVEL);
+        KeRaiseIrql(HIGH_LEVEL, &OldIrql);
 
         /* Check if the debugger is disabled but we can enable it */
         if (!(KdDebuggerEnabled) && !(KdPitchDebugger))

Modified: trunk/reactos/ntoskrnl/ke/ipi.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ke/ipi.c?rev=32179&r1=32178&r2=32179&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/ke/ipi.c (original)
+++ trunk/reactos/ntoskrnl/ke/ipi.c Thu Feb  7 10:10:13 2008
@@ -145,17 +145,17 @@
 #error Not yet implemented!
 #else
     ULONG_PTR Status;
-    KIRQL OldIrql;
+    KIRQL OldIrql, OldIrql2;
 
     /* Raise to DPC level if required */
     OldIrql = KeGetCurrentIrql();
-    if (OldIrql < DISPATCH_LEVEL) OldIrql = KfRaiseIrql(DISPATCH_LEVEL);
+    if (OldIrql < DISPATCH_LEVEL) KeRaiseIrql(DISPATCH_LEVEL, &OldIrql);
 
     /* Acquire the IPI lock */
     KefAcquireSpinLockAtDpcLevel(&KiIpiLock);
 
     /* Raise to IPI level */
-    KfRaiseIrql(IPI_LEVEL);
+    KeRaiseIrql(IPI_LEVEL, &OldIrql2);
 
     /* Call the function */
     Status = Function(Argument);
@@ -164,7 +164,7 @@
     KefReleaseSpinLockFromDpcLevel(&KiIpiLock);
 
     /* Lower IRQL back */
-    KfLowerIrql(OldIrql);
+    KeLowerIrql(OldIrql);
     return Status;
 #endif
 }

Modified: trunk/reactos/ntoskrnl/ps/thread.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ps/thread.c?rev=32179&r1=32178&r2=32179&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/ps/thread.c (original)
+++ trunk/reactos/ntoskrnl/ps/thread.c Thu Feb  7 10:10:13 2008
@@ -29,6 +29,7 @@
     PETHREAD Thread;
     PTEB Teb;
     BOOLEAN DeadThread = FALSE;
+    KIRQL OldIrql;
     PAGED_CODE();
     PSTRACE(PS_THREAD_DEBUG,
             "StartRoutine: %p StartContext: %p\n", StartRoutine, StartContext);
@@ -68,7 +69,7 @@
         }
 
         /* Raise to APC */
-        KfRaiseIrql(APC_LEVEL);
+        KeRaiseIrql(APC_LEVEL, &OldIrql);
 
         /* Queue the User APC */
         KiInitializeUserApc(NULL,

Modified: trunk/reactos/tools/nci/ncitool.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/tools/nci/ncitool.c?rev=32179&r1=32178&r2=32179&view=diff
==============================================================================
--- trunk/reactos/tools/nci/ncitool.c (original)
+++ trunk/reactos/tools/nci/ncitool.c Thu Feb  7 10:10:13 2008
@@ -71,7 +71,7 @@
 //
 // For now, only supports 0-4 arguments
 //
-#define UserModeStub_arm    "    mov r12, #0x%x\n" \
+#define UserModeStub_arm    "    ldr r12, =%x\n" \
                             "    swi #0x2E\n"      \
                             "    bx lr\n\n"
 
@@ -104,7 +104,7 @@
 #define KernelModeStub_mips "    j KiSystemService\n" \
                             "    nop\n"
 
-#define KernelModeStub_arm  "    mov r12, #0x%x\n" \
+#define KernelModeStub_arm  "    ldr r12, =x%x\n" \
                             "    swi #0x2E\n"      \
                             "    bx lr\n\n"
 




More information about the Ros-diffs mailing list