diff --git a/kernel/src/mm/vmm.c b/kernel/src/mm/vmm.c index 41ff37b..afb0f2c 100644 --- a/kernel/src/mm/vmm.c +++ b/kernel/src/mm/vmm.c @@ -71,7 +71,7 @@ void *valloc(vctx_t *ctx, size_t pages, uint64_t flags) if (page == 0) return NULL; - vmap(ctx->pagemap, new->start + i * PAGE_SIZE, page, new->flags); + vmap(ctx->pagemap, new->start + (i * PAGE_SIZE), page, new->flags); } return (void *)new->start; } @@ -96,7 +96,7 @@ void *valloc(vctx_t *ctx, size_t pages, uint64_t flags) if (page == 0) return NULL; - vmap(ctx->pagemap, new->start + i * PAGE_SIZE, page, new->flags); + vmap(ctx->pagemap, new->start + (i * PAGE_SIZE), page, new->flags); } return (void *)new->start; } @@ -110,6 +110,8 @@ void *vallocat(vctx_t *ctx, size_t pages, uint64_t flags, uint64_t phys) vregion_t *new = NULL; vregion_t *last = ctx->root; + phys = ALIGN_DOWN(phys, PAGE_SIZE); + while (region) { if (region->next == NULL || region->start + (region->pages * PAGE_SIZE) < region->next->start) @@ -127,11 +129,11 @@ void *vallocat(vctx_t *ctx, size_t pages, uint64_t flags, uint64_t phys) region->next = new; for (uint64_t i = 0; i < pages; i++) { - uint64_t page = phys + i * PAGE_SIZE; + uint64_t page = phys + (i * PAGE_SIZE); if (page == 0) return NULL; - vmap(ctx->pagemap, new->start + i * PAGE_SIZE, page, new->flags); + vmap(ctx->pagemap, new->start + (i * PAGE_SIZE), page, new->flags); } return (void *)new->start; } @@ -152,11 +154,11 @@ void *vallocat(vctx_t *ctx, size_t pages, uint64_t flags, uint64_t phys) for (uint64_t i = 0; i < pages; i++) { - uint64_t page = phys + i * PAGE_SIZE; + uint64_t page = phys + (i * PAGE_SIZE); if (page == 0) return NULL; - vmap(ctx->pagemap, new->start + i * PAGE_SIZE, page, new->flags); + vmap(ctx->pagemap, new->start + (i * PAGE_SIZE), page, new->flags); } return (void *)new->start; } @@ -184,7 +186,7 @@ void vfree(vctx_t *ctx, void *ptr) for (uint64_t i = 0; i < region->pages; i++) { - uint64_t virt = region->start + i * PAGE_SIZE; + uint64_t virt = region->start + (i * PAGE_SIZE); uint64_t phys = virt_to_phys(kernel_pagemap, virt); if (phys != 0) diff --git a/kernel/src/sys/acpi.c b/kernel/src/sys/acpi.c index c90754e..047c0b9 100644 --- a/kernel/src/sys/acpi.c +++ b/kernel/src/sys/acpi.c @@ -17,9 +17,8 @@ void acpi_init(void) } acpi_rsdp_t *rsdp = (acpi_rsdp_t *)vallocat(kvm_ctx, 1, VALLOC_RW, rsdp_response->address); - log_early("Allocated RSDP at %p", rsdp); - if (memcmp(rsdp->signature, "RSD PTR", 7)) + if (memcmp(rsdp->signature, "RSD PTR", 7) == 0) kpanic(NULL, "Invalid RSDP signature!"); if (rsdp->revision != 0)