Make the address space mutex unsafe, because sometimes it is acquired at > APC_LEVEL...
[reactos.git] / reactos / ntoskrnl / mm / aspace.c
index 5a97b03..b79d67b 100644 (file)
@@ -20,6 +20,7 @@ STATIC MADDRESS_SPACE KernelAddressSpace;
 /* FUNCTIONS *****************************************************************/
 
 VOID
+NTAPI
 MmLockAddressSpace(PMADDRESS_SPACE AddressSpace)
 {
    /*
@@ -29,10 +30,11 @@ MmLockAddressSpace(PMADDRESS_SPACE AddressSpace)
    {
       return;
    }
-   ExAcquireFastMutex(&AddressSpace->Lock);
+   ExEnterCriticalRegionAndAcquireFastMutexUnsafe(&AddressSpace->Lock);
 }
 
 VOID
+NTAPI
 MmUnlockAddressSpace(PMADDRESS_SPACE AddressSpace)
 {
    /*
@@ -42,26 +44,33 @@ MmUnlockAddressSpace(PMADDRESS_SPACE AddressSpace)
    {
       return;
    }
-   ExReleaseFastMutex(&AddressSpace->Lock);
+   ExReleaseFastMutexUnsafeAndLeaveCriticalRegion(&AddressSpace->Lock);
 }
 
-VOID INIT_FUNCTION
+VOID
+INIT_FUNCTION
+NTAPI
 MmInitializeKernelAddressSpace(VOID)
 {
    MmInitializeAddressSpace(NULL, &KernelAddressSpace);
 }
 
-PMADDRESS_SPACE MmGetCurrentAddressSpace(VOID)
+PMADDRESS_SPACE
+NTAPI
+MmGetCurrentAddressSpace(VOID)
 {
    return(&PsGetCurrentProcess()->AddressSpace);
 }
 
-PMADDRESS_SPACE MmGetKernelAddressSpace(VOID)
+PMADDRESS_SPACE
+NTAPI
+MmGetKernelAddressSpace(VOID)
 {
    return(&KernelAddressSpace);
 }
 
 NTSTATUS
+NTAPI
 MmInitializeAddressSpace(PEPROCESS Process,
                          PMADDRESS_SPACE AddressSpace)
 {
@@ -73,7 +82,7 @@ MmInitializeAddressSpace(PEPROCESS Process,
    }
    else
    {
-      AddressSpace->LowestAddress = (PVOID)KERNEL_BASE;
+      AddressSpace->LowestAddress = MmSystemRangeStart;
    }
    AddressSpace->Process = Process;
    if (Process != NULL)
@@ -95,6 +104,7 @@ MmInitializeAddressSpace(PEPROCESS Process,
 }
 
 NTSTATUS
+NTAPI
 MmDestroyAddressSpace(PMADDRESS_SPACE AddressSpace)
 {
    if (AddressSpace->PageTableRefCountTable != NULL)