diff options
author | Andrew Waterman <andrew@sifive.com> | 2021-03-17 00:30:12 -0700 |
---|---|---|
committer | Andrew Waterman <andrew@sifive.com> | 2021-03-25 22:21:06 -0700 |
commit | b9eba474fb52dbf205c7b466af458397a7487216 (patch) | |
tree | e203753f33c579d163b9c94bffa1d50c92c21b65 /pk/mmap.h | |
parent | 0b5ef9cf755811e6a8a2901585f3ecb5604e55f1 (diff) | |
download | pk-b9eba474fb52dbf205c7b466af458397a7487216.zip pk-b9eba474fb52dbf205c7b466af458397a7487216.tar.gz pk-b9eba474fb52dbf205c7b466af458397a7487216.tar.bz2 |
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.
Diffstat (limited to 'pk/mmap.h')
-rw-r--r-- | pk/mmap.h | 9 |
1 files changed, 7 insertions, 2 deletions
@@ -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 |