From 109616ec309e1ce61c730b026e195a709a57041b Mon Sep 17 00:00:00 2001 From: Max Wash Date: Mon, 6 Feb 2023 20:40:27 +0000 Subject: [PATCH] vm: add memblock support to vm_virt_to_phys, add vm_phys_to_virt --- include/socks/vm.h | 1 + vm/page.c | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/include/socks/vm.h b/include/socks/vm.h index 8eb8aac..741ec0b 100644 --- a/include/socks/vm.h +++ b/include/socks/vm.h @@ -201,6 +201,7 @@ extern kern_status_t vm_bootstrap(const vm_zone_descriptor_t *zones, size_t nr_z extern vm_pg_data_t *vm_pg_data_get(vm_node_id_t node); extern phys_addr_t vm_virt_to_phys(void *p); +extern void *vm_phys_to_virt(phys_addr_t p); extern void vm_page_init_array(); extern vm_page_t *vm_page_get(phys_addr_t addr); diff --git a/vm/page.c b/vm/page.c index 7afaa08..45c5ccb 100644 --- a/vm/page.c +++ b/vm/page.c @@ -49,10 +49,23 @@ void tmp_set_vaddr_base(void *p, size_t len) phys_addr_t vm_virt_to_phys(void *p) { + if ((uintptr_t)p >= memblock.m_alloc_start && (uintptr_t)p < memblock.m_alloc_end) { + return memblock_virt_to_phys(p); + } + phys_addr_t x = (phys_addr_t)p - (phys_addr_t)tmp_vaddr_base; return x; } +void *vm_phys_to_virt(phys_addr_t p) +{ + if (p >= (memblock.m_alloc_start - memblock.m_voffset) && p < (memblock.m_alloc_end - memblock.m_voffset)) { + return memblock_phys_to_virt(p); + } + + return NULL; +} + void vm_page_init_array() { size_t pmem_size = 0;