summaryrefslogtreecommitdiff
path: root/kernel/defs.h
diff options
context:
space:
mode:
authorFrans Kaashoek <[email protected]>2019-07-19 08:38:51 -0400
committerFrans Kaashoek <[email protected]>2019-07-19 08:38:51 -0400
commit91566327012cad2ca99df47f9321dfc012d8a7ff (patch)
treee9cb082d502a9f56857270264bea254149a3318d /kernel/defs.h
parentb924e44f06c9c0882a2cffe6c9215b12c5aee2e6 (diff)
downloadxv6-labs-91566327012cad2ca99df47f9321dfc012d8a7ff.tar.gz
xv6-labs-91566327012cad2ca99df47f9321dfc012d8a7ff.tar.bz2
xv6-labs-91566327012cad2ca99df47f9321dfc012d8a7ff.zip
One way of supporting a guard page below kstack: allocate kstacks in
procinit() and map them high up (below TRAMPOLNE) with an empty mapping below each stack. Never free a kernel stack. Another way would be to allocate and map them dynamically, but then we need to reload page table when switching processes in scheduler() and/or have a kernel pagetable per proc (if we want k->stack to be the same virtual address in each process). One gotcha: kernel addresses are not equal to physical addresses for stack addresses. A stack address must be translated if we need its physical address (e.g., virtio passes a stack address to the disk).
Diffstat (limited to 'kernel/defs.h')
-rw-r--r--kernel/defs.h2
1 files changed, 2 insertions, 0 deletions
diff --git a/kernel/defs.h b/kernel/defs.h
index bd89af0..3172cb3 100644
--- a/kernel/defs.h
+++ b/kernel/defs.h
@@ -193,6 +193,8 @@ uint64 walkaddr(pagetable_t, uint64);
int copyout(pagetable_t, uint64, char *, uint64);
int copyin(pagetable_t, char *, uint64, uint64);
int copyinstr(pagetable_t pagetable, char *dst, uint64 srcva, uint64 max);
+char* map_kstack();
+uint64 kernelpa(uint64);
// plic.c
void plicinit(void);