vmap: Use {map,unmap}_segment() helpers
[akaros.git] / kern / arch / riscv / process.c
index f528a6f..7b72d2e 100644 (file)
@@ -8,7 +8,6 @@
 #include <assert.h>
 #include <stdio.h>
 
-/* TODO: handle user and kernel contexts */
 void proc_pop_ctx(struct user_context *ctx)
 {
        struct hw_trapframe *tf = &ctx->tf.hw_tf;
@@ -20,11 +19,20 @@ void proc_pop_ctx(struct user_context *ctx)
 
 /* TODO: consider using a SW context */
 void proc_init_ctx(struct user_context *ctx, uint32_t vcoreid, uintptr_t entryp,
-                   uintptr_t stack_top)
+                   uintptr_t stack_top, uintptr_t tls_desc)
 {
        struct hw_trapframe *tf = &ctx->tf.hw_tf;
        ctx->type = ROS_HW_CTX;
 
+       /* TODO: If you'd like, take tls_desc and save it in the ctx somehow, so
+        * that proc_pop_ctx will set up that TLS before launching.  If you do this,
+        * you can change _start.c to not reset the TLS in userspace.
+        *
+        * This is a bigger deal on amd64, where we take a (fast) syscall to change
+        * the TLS desc, right after the kernel just 0'd out the TLS desc.  If you
+        * can change your HW TLS desc with negligible overhead, then feel free to
+        * do whatever.  Long term, it might be better to do whatever amd64 does. */
+
        memset(tf, 0, sizeof(*tf));
 
        tf->gpr[GPR_SP] = stack_top-64;
@@ -37,7 +45,7 @@ void proc_init_ctx(struct user_context *ctx, uint32_t vcoreid, uintptr_t entryp,
        tf->gpr[GPR_A0] = vcoreid;
 }
 
-/* TODO: handle both HW and SW contexts */
+/* TODO: handle SW and VM contexts */
 void proc_secure_ctx(struct user_context *ctx)
 {
        struct hw_trapframe *tf = &ctx->tf.hw_tf;