kernel/vm: Fix allocating virtual ranges downwards from the bottom.
Another regression from hrev58236: the code assigned start then size previously, but there was another temporary that made things work properly that was removed in that commit. Fixes #18140.
This commit is contained in:
@@ -4297,7 +4297,7 @@ allocate_early_virtual(kernel_args* args, size_t size, addr_t alignment)
|
|||||||
const addr_t lastRangeEnd = lastRange.start + lastRange.size;
|
const addr_t lastRangeEnd = lastRange.start + lastRange.size;
|
||||||
addr_t base = alignment > 0
|
addr_t base = alignment > 0
|
||||||
? ROUNDUP(lastRangeEnd, alignment) : lastRangeEnd;
|
? ROUNDUP(lastRangeEnd, alignment) : lastRangeEnd;
|
||||||
if (KERNEL_BASE + (KERNEL_SIZE - 1) - base >= size) {
|
if ((KERNEL_BASE + (KERNEL_SIZE - 1) - base) >= size) {
|
||||||
lastRange.size += base + size - lastRangeEnd;
|
lastRange.size += base + size - lastRangeEnd;
|
||||||
return base;
|
return base;
|
||||||
}
|
}
|
||||||
@@ -4310,8 +4310,8 @@ allocate_early_virtual(kernel_args* args, size_t size, addr_t alignment)
|
|||||||
base = ROUNDDOWN(base, alignment);
|
base = ROUNDDOWN(base, alignment);
|
||||||
|
|
||||||
if (base >= KERNEL_BASE) {
|
if (base >= KERNEL_BASE) {
|
||||||
firstRange.start = base;
|
|
||||||
firstRange.size += firstRange.start - base;
|
firstRange.size += firstRange.start - base;
|
||||||
|
firstRange.start = base;
|
||||||
return base;
|
return base;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user