From affb47166b296b9c375f1a1f6c3480c7471531f4 Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Thu, 4 Mar 2010 09:43:04 +0000 Subject: [PATCH] add_mtrrs_for_range(): Fixed computation of the register ranges. Per power of 2 size we might need to use two registers (for the start and the end of the range). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35753 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/system/kernel/arch/x86/arch_vm.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/system/kernel/arch/x86/arch_vm.cpp b/src/system/kernel/arch/x86/arch_vm.cpp index ead981aceb..9f0f87437e 100644 --- a/src/system/kernel/arch/x86/arch_vm.cpp +++ b/src/system/kernel/arch/x86/arch_vm.cpp @@ -141,16 +141,16 @@ static bool add_mtrrs_for_range(uint64 base, uint64 size, uint32 type) { for (uint64 interval = B_PAGE_SIZE; size > 0; interval <<= 1) { - if (((base | size) & interval) != 0) { - if ((base & interval) != 0) { - if (!add_used_mtrr(base, interval, type)) - return false; - base += interval; - } else { - if (!add_used_mtrr(base + size - interval, interval, type)) - return false; - } + if ((base & interval) != 0) { + if (!add_used_mtrr(base, interval, type)) + return false; + base += interval; + size -= interval; + } + if ((size & interval) != 0) { + if (!add_used_mtrr(base + size - interval, interval, type)) + return false; size -= interval; } }