diff options
Diffstat (limited to 'kernel/memory/paging.c')
-rw-r--r-- | kernel/memory/paging.c | 9 |
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) { |