summaryrefslogtreecommitdiff
path: root/kernel/memory/paging.c
diff options
context:
space:
mode:
authorFreya Murphy <freya@freyacat.org>2025-04-28 13:05:14 -0400
committerFreya Murphy <freya@freyacat.org>2025-04-28 13:05:14 -0400
commitf894f09bd84c13fb104d3720ead627728f04d6c6 (patch)
tree7b1954d60ddbd1e923155d1b96c48c1e2a6e8ec9 /kernel/memory/paging.c
parentfix segments (diff)
downloadcomus-f894f09bd84c13fb104d3720ead627728f04d6c6.tar.gz
comus-f894f09bd84c13fb104d3720ead627728f04d6c6.tar.bz2
comus-f894f09bd84c13fb104d3720ead627728f04d6c6.zip
allocate vaddrs when given directly
Diffstat (limited to 'kernel/memory/paging.c')
-rw-r--r--kernel/memory/paging.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/kernel/memory/paging.c b/kernel/memory/paging.c
index 2cc5b7e..ec3c5c7 100644
--- a/kernel/memory/paging.c
+++ b/kernel/memory/paging.c
@@ -736,6 +736,9 @@ void *mem_mapaddr(mem_ctx_t ctx, void *phys, void *virt, size_t len,
if (virt == NULL)
return NULL;
+ if (virtaddr_take(&ctx->virtctx, virt, pages))
+ return NULL;
+
assert((uint64_t)virt % PAGE_SIZE == 0,
"mem_mapaddr: vitural address not page aligned");
@@ -761,6 +764,9 @@ void *kmapuseraddr(mem_ctx_t ctx, const void *usrADDR, size_t len)
if (vADDR == NULL)
return NULL;
+ if (virtaddr_take(&kernel_mem_ctx->virtctx, vADDR, npages))
+ return NULL;
+
assert((size_t)vADDR % PAGE_SIZE == 0,
"kmapuseraddr: vitural address not page aligned");
@@ -847,6 +853,9 @@ void *mem_alloc_pages_at(mem_ctx_t ctx, size_t count, void *virt,
struct phys_page_slice prev_phys_block = PHYS_PAGE_SLICE_NULL;
struct phys_page_slice phys_pages;
+ if (virtaddr_take(&ctx->virtctx, virt, count))
+ return NULL;
+
while (pages_needed > 0) {
phys_pages = alloc_phys_page_withextra(pages_needed);
if (phys_pages.pagestart == NULL) {