-/* $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:
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);
}
/*
-; $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
;
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