From b9eba474fb52dbf205c7b466af458397a7487216 Mon Sep 17 00:00:00 2001 From: Andrew Waterman Date: Wed, 17 Mar 2021 00:30:12 -0700 Subject: pk: support >2 GiB of user memory for RV64 Previously, the pk would always run from virtual address MEM_START. Instead, remap it into the negative virtual addresses, allowing user processes to expand beyond MEM_START. --- pk/mmap.h | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'pk/mmap.h') diff --git a/pk/mmap.h b/pk/mmap.h index 9e3fad6..7e68777 100644 --- a/pk/mmap.h +++ b/pk/mmap.h @@ -34,7 +34,12 @@ uintptr_t do_mremap(uintptr_t addr, size_t old_size, size_t new_size, int flags) uintptr_t do_mprotect(uintptr_t addr, size_t length, int prot); uintptr_t do_brk(uintptr_t addr); -#define kva2pa(va) ((uintptr_t)(va)) -#define is_uva(va) ((uintptr_t)(va) < MEM_START) +#define KVA_START ((uintptr_t)-1 << (VA_BITS-1)) + +extern uintptr_t kva2pa_offset; +#define kva2pa(va) ((uintptr_t)(va) - kva2pa_offset) +#define pa2kva(pa) ((uintptr_t)(pa) + kva2pa_offset) +#define kva2pa_maybe(va) ((uintptr_t)(va) >= KVA_START ? kva2pa(va) : (uintptr_t)(va)) +#define is_uva(va) ((uintptr_t)(va) < KVA_START) #endif -- cgit v1.1