Author: sir_richard
Date: Wed Oct 6 16:25:30 2010
New Revision: 49019
URL:
http://svn.reactos.org/svn/reactos?rev=49019&view=rev
Log:
[NTOS]: Fix bugs in the VAD algorithms, we should be rounding up, not down.
Modified:
trunk/reactos/ntoskrnl/mm/ARM3/vadnode.c
Modified: trunk/reactos/ntoskrnl/mm/ARM3/vadnode.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/mm/ARM3/vadnode.c…
==============================================================================
--- trunk/reactos/ntoskrnl/mm/ARM3/vadnode.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/mm/ARM3/vadnode.c [iso-8859-1] Wed Oct 6 16:25:30 2010
@@ -150,8 +150,6 @@
MiRemoveNode(IN PMMADDRESS_NODE Node,
IN PMM_AVL_TABLE Table)
{
- DPRINT("Removing address node: %lx %lx\n", Node->StartingVpn,
Node->EndingVpn);
-
/* Call the AVL code */
RtlpDeleteAvlTreeNode(Table, Node);
@@ -254,8 +252,8 @@
/* Precompute page numbers for the length, alignment, and starting address */
LengthVpn = (Length + (PAGE_SIZE - 1)) >> PAGE_SHIFT;
AlignmentVpn = Alignment >> PAGE_SHIFT;
- StartingVpn = ROUND_DOWN((ULONG_PTR)MM_LOWEST_USER_ADDRESS >> PAGE_SHIFT,
- AlignmentVpn);
+ StartingVpn = ROUND_UP((ULONG_PTR)MM_LOWEST_USER_ADDRESS >> PAGE_SHIFT,
+ AlignmentVpn);
/* Check if the table is free, so the lowest possible address is available */
if (!Table->NumberGenericTableElements) goto FoundAtBottom;
@@ -279,7 +277,7 @@
while (TRUE)
{
/* The last aligned page number in this entry */
- LowVpn = ROUND_DOWN(Node->EndingVpn + 1, AlignmentVpn);
+ LowVpn = ROUND_UP(Node->EndingVpn + 1, AlignmentVpn);
/* Keep going as long as there's still a next node */
NextNode = MiGetNextNode(Node);
@@ -292,8 +290,8 @@
Found:
/* Yes! Use this VAD to store the allocation */
*PreviousVad = Node;
- *Base = ROUND_DOWN((Node->EndingVpn << PAGE_SHIFT) | (PAGE_SIZE -
1),
- Alignment);
+ *Base = ROUND_UP((Node->EndingVpn << PAGE_SHIFT) | (PAGE_SIZE - 1),
+ Alignment);
return STATUS_SUCCESS;
}
@@ -335,7 +333,7 @@
if (Table->NumberGenericTableElements == 0)
{
/* Tree is empty, the candidate address is already the best one */
- *Base = ROUND_DOWN(BoundaryAddress + 1 - Length, Alignment);
+ *Base = ROUND_UP(BoundaryAddress + 1 - Length, Alignment);
return TableEmptyTree;
}