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
This commit is contained in:
@@ -141,16 +141,16 @@ static bool
|
|||||||
add_mtrrs_for_range(uint64 base, uint64 size, uint32 type)
|
add_mtrrs_for_range(uint64 base, uint64 size, uint32 type)
|
||||||
{
|
{
|
||||||
for (uint64 interval = B_PAGE_SIZE; size > 0; interval <<= 1) {
|
for (uint64 interval = B_PAGE_SIZE; size > 0; interval <<= 1) {
|
||||||
if (((base | size) & interval) != 0) {
|
if ((base & interval) != 0) {
|
||||||
if ((base & interval) != 0) {
|
if (!add_used_mtrr(base, interval, type))
|
||||||
if (!add_used_mtrr(base, interval, type))
|
return false;
|
||||||
return false;
|
base += interval;
|
||||||
base += interval;
|
size -= interval;
|
||||||
} else {
|
}
|
||||||
if (!add_used_mtrr(base + size - interval, interval, type))
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if ((size & interval) != 0) {
|
||||||
|
if (!add_used_mtrr(base + size - interval, interval, type))
|
||||||
|
return false;
|
||||||
size -= interval;
|
size -= interval;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user