[ros-diffs] [tkreuzer] 44269: [MM] Don't acquire the pfn lock before calling MmReleasePageMemoryConsumer. The function acquires it already and before that it acquires a different spinlock, leading to a race condition on SMP systems.

tkreuzer at svn.reactos.org tkreuzer at svn.reactos.org
Sun Nov 22 21:33:49 CET 2009


Author: tkreuzer
Date: Sun Nov 22 21:33:49 2009
New Revision: 44269

URL: http://svn.reactos.org/svn/reactos?rev=44269&view=rev
Log:
[MM]
Don't acquire the pfn lock before calling MmReleasePageMemoryConsumer. The function acquires it already and before that it acquires a different spinlock, leading to a race condition on SMP systems.

Modified:
    branches/ros-amd64-bringup/reactos/ntoskrnl/mm/ARM3/contmem.c

Modified: branches/ros-amd64-bringup/reactos/ntoskrnl/mm/ARM3/contmem.c
URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/ntoskrnl/mm/ARM3/contmem.c?rev=44269&r1=44268&r2=44269&view=diff
==============================================================================
--- branches/ros-amd64-bringup/reactos/ntoskrnl/mm/ARM3/contmem.c [iso-8859-1] (original)
+++ branches/ros-amd64-bringup/reactos/ntoskrnl/mm/ARM3/contmem.c [iso-8859-1] Sun Nov 22 21:33:49 2009
@@ -321,11 +321,6 @@
     MmUnmapIoSpace(BaseAddress, PageCount << PAGE_SHIFT);
     
     //
-    // Lock the PFN database
-    //
-    OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
-    
-    //
     // Loop all the pages
     //
     LastPage = PageFrameIndex + PageCount;    
@@ -336,11 +331,6 @@
         //
         MmReleasePageMemoryConsumer(MC_NPPOOL, PageFrameIndex);
     } while (++PageFrameIndex < LastPage);
-    
-    //
-    // Release the PFN lock
-    //
-    KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql);
 }
 
 /* PUBLIC FUNCTIONS ***********************************************************/




More information about the Ros-diffs mailing list