added page-aligned allocations ( reworked patch by Mike Nordell )
authorRoyce Mitchell III <royce3@ev1.net>
Thu, 31 Jul 2003 01:44:18 +0000 (01:44 +0000)
committerRoyce Mitchell III <royce3@ev1.net>
Thu, 31 Jul 2003 01:44:18 +0000 (01:44 +0000)
fixed 2 small probs w/ ntoskrnl.edf

svn path=/trunk/; revision=5340

reactos/ntoskrnl/mm/pool.c
reactos/ntoskrnl/ntoskrnl.edf

index fbc05cb..c72fe42 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: pool.c,v 1.19 2003/07/21 21:53:53 royce Exp $
+/* $Id: pool.c,v 1.20 2003/07/31 01:44:17 royce Exp $
  * 
  * COPYRIGHT:    See COPYING in the top level directory
  * PROJECT:      ReactOS kernel
 /* FUNCTIONS ***************************************************************/
 
 PVOID STDCALL STATIC
-EiAllocatePool(POOL_TYPE PoolType,
-              ULONG NumberOfBytes,
-              ULONG Tag,
-              PVOID Caller)
+EiAllocatePool(
+       POOL_TYPE PoolType,
+       ULONG NumberOfBytes,
+       ULONG Tag,
+       PVOID Caller)
 {
-   PVOID Block;
-   
-   if (PoolType == NonPagedPoolCacheAligned || 
-       PoolType == NonPagedPoolCacheAlignedMustS)
-     {
-       UNIMPLEMENTED;
-     }
-   
-   switch(PoolType)
-     {
+  PVOID Block;
+  BOOL CacheAligned = FALSE;
+  BOOL MustSucceed = FALSE;
+  static const ULONG nCacheAlignBytes = 31;
+  
+  if ( PoolType == NonPagedPoolCacheAligned
+    || PoolType == NonPagedPoolCacheAlignedMustS
+    || PoolType == PagedPoolCacheAligned )
+    {
+      CacheAligned = TRUE;
+      NumberOfBytes += nCacheAlignBytes;
+    }
+
+  if ( PoolType == NonPagedPoolMustSucceed
+    || PoolType == NonPagedPoolCacheAlignedMustS )
+    MustSucceed = TRUE;
+
+  switch ( PoolType )
+    {
       case NonPagedPool:
       case NonPagedPoolMustSucceed:
       case NonPagedPoolCacheAligned:
@@ -48,23 +58,33 @@ EiAllocatePool(POOL_TYPE PoolType,
                                        NumberOfBytes,
                                        Tag,
                                        Caller);
-       break;
-       
+         break;
+         
       case PagedPool:
       case PagedPoolCacheAligned:
-       Block = ExAllocatePagedPoolWithTag(PoolType,NumberOfBytes,Tag);
+       Block =
+         ExAllocatePagedPoolWithTag(PoolType,
+                                    NumberOfBytes,
+                                    Tag);
        break;
-       
+
       default:
-       return(NULL);
-     };
-   
-   if ((PoolType==NonPagedPoolMustSucceed || 
-       PoolType==NonPagedPoolCacheAlignedMustS) && Block==NULL)     
-     {
-       KEBUGCHECK(MUST_SUCCEED_POOL_EMPTY);
-     }
-   return(Block);
+       DbgPrint ( "Unknown PoolType in call to EiAllocatePool!\n" );
+       /* a bug check may be overdramatic, but let's catch problems
+          as soon as we detect them, no? */
+       KEBUGCHECK(0);
+       return NULL;
+    };
+
+  if ( Block == NULL && MustSucceed == TRUE )
+    {
+      KEBUGCHECK(MUST_SUCCEED_POOL_EMPTY);
+    }
+
+  if ( Block != NULL && CacheAligned == TRUE )
+    Block = (PVOID)(((size_t)(Block + nCacheAlignBytes)) & (~nCacheAlignBytes));
+
+  return(Block);
 }
 
 /*
index b4a994f..e190cf3 100644 (file)
@@ -1,4 +1,4 @@
-; $Id: ntoskrnl.edf,v 1.146 2003/07/25 23:51:23 dwelch Exp $
+; $Id: ntoskrnl.edf,v 1.147 2003/07/31 01:44:18 royce Exp $
 ;
 ; reactos/ntoskrnl/ntoskrnl.def
 ;
@@ -217,8 +217,8 @@ InterlockedDecrement=@InterlockedDecrement@4
 InterlockedExchange=@InterlockedExchange@8
 InterlockedExchangeAdd=@InterlockedExchangeAdd@8
 InterlockedIncrement=@InterlockedIncrement@4
-@InterlockedPushEntrySList=@InterlockedPushEntrySList@8
-@InterlockedPopEntrySList=@InterlockedPopEntrySList@4
+InterlockedPushEntrySList=@InterlockedPushEntrySList@8
+InterlockedPopEntrySList=@InterlockedPopEntrySList@4
 IoAcquireCancelSpinLock=IoAcquireCancelSpinLock@4
 IoAcquireVpbSpinLock=IoAcquireVpbSpinLock@4
 IoAdapterObjectType DATA