bootloader/bios_ia32: Add an assertion and clean up rounding in MMU code.
No functional change intended.
This commit is contained in:
@@ -114,6 +114,9 @@ allocate_virtual(size_t size)
|
|||||||
static addr_t
|
static addr_t
|
||||||
allocate_physical(size_t size, bool forKernel)
|
allocate_physical(size_t size, bool forKernel)
|
||||||
{
|
{
|
||||||
|
if ((size % B_PAGE_SIZE) != 0)
|
||||||
|
panic("request for non-page-aligned physical memory!");
|
||||||
|
|
||||||
uint64 base;
|
uint64 base;
|
||||||
if (!forKernel) {
|
if (!forKernel) {
|
||||||
base = sNextPhysicalAddress;
|
base = sNextPhysicalAddress;
|
||||||
@@ -406,7 +409,7 @@ mmu_allocate(void *virtualAddress, size_t size)
|
|||||||
TRACE("mmu_allocate: requested vaddr: %p, next free vaddr: 0x%lx, size: "
|
TRACE("mmu_allocate: requested vaddr: %p, next free vaddr: 0x%lx, size: "
|
||||||
"%ld\n", virtualAddress, sNextVirtualAddress, size);
|
"%ld\n", virtualAddress, sNextVirtualAddress, size);
|
||||||
|
|
||||||
size = (size + B_PAGE_SIZE - 1) / B_PAGE_SIZE;
|
size = HOWMANY(size, B_PAGE_SIZE);
|
||||||
// get number of pages to map
|
// get number of pages to map
|
||||||
|
|
||||||
if (virtualAddress != NULL) {
|
if (virtualAddress != NULL) {
|
||||||
@@ -497,7 +500,8 @@ mmu_free(void *virtualAddress, size_t size)
|
|||||||
addr_t address = (addr_t)virtualAddress;
|
addr_t address = (addr_t)virtualAddress;
|
||||||
addr_t pageOffset = address % B_PAGE_SIZE;
|
addr_t pageOffset = address % B_PAGE_SIZE;
|
||||||
address -= pageOffset;
|
address -= pageOffset;
|
||||||
size = (size + pageOffset + B_PAGE_SIZE - 1) / B_PAGE_SIZE * B_PAGE_SIZE;
|
size += pageOffset;
|
||||||
|
size = ROUNDUP(size, B_PAGE_SIZE);
|
||||||
|
|
||||||
// is the address within the valid range?
|
// is the address within the valid range?
|
||||||
if (address < KERNEL_LOAD_BASE || address + size > sNextVirtualAddress) {
|
if (address < KERNEL_LOAD_BASE || address + size > sNextVirtualAddress) {
|
||||||
|
|||||||
Reference in New Issue
Block a user