Move trap reflection bits into their own header
authorBarret Rhoden <brho@cs.berkeley.edu>
Thu, 21 Jan 2016 19:26:50 +0000 (14:26 -0500)
committerBarret Rhoden <brho@cs.berkeley.edu>
Tue, 2 Feb 2016 22:43:52 +0000 (17:43 -0500)
I'll be adding more to this soon, and it makes sense to separate this from
vcore.h.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
user/parlib/include/riscv/trap.h [new file with mode: 0644]
user/parlib/include/riscv/vcore.h
user/parlib/include/x86/trap.h [new file with mode: 0644]
user/parlib/include/x86/vcore64.h
user/parlib/uthread.c

diff --git a/user/parlib/include/riscv/trap.h b/user/parlib/include/riscv/trap.h
new file mode 100644 (file)
index 0000000..e739f3d
--- /dev/null
@@ -0,0 +1,39 @@
+/* Copyright (c) 2016 Google Inc.
+ * Barret Rhoden <brho@cs.berkeley.edu>
+ * See LICENSE for details.
+ *
+ * Arch-specific defines for traps, vmexits, and similar things */
+
+#pragma once
+
+#include <parlib/common.h>
+#include <ros/trapframe.h>
+
+__BEGIN_DECLS
+
+#error implement these
+static bool has_refl_fault(struct user_context *ctx)
+{
+       return 0;
+}
+
+static void clear_refl_fault(struct user_context *ctx)
+{
+}
+
+static unsigned int __arch_refl_get_nr(struct user_context *ctx)
+{
+       return 0;
+}
+
+static unsigned int __arch_refl_get_err(struct user_context *ctx)
+{
+       return 0;
+}
+
+static unsigned long __arch_refl_get_aux(struct user_context *ctx)
+{
+       return 0;
+}
+
+__END_DECLS
index 4d6d3e3..dba6b97 100644 (file)
@@ -117,29 +117,4 @@ static inline uintptr_t get_user_ctx_stack(struct user_context *ctx)
        temp; \
 })
 
        temp; \
 })
 
-#error implement these
-static bool has_refl_fault(struct user_context *ctx)
-{
-       return 0;
-}
-
-static void clear_refl_fault(struct user_context *ctx)
-{
-}
-
-static unsigned int __arch_refl_get_nr(struct user_context *ctx)
-{
-       return 0;
-}
-
-static unsigned int __arch_refl_get_err(struct user_context *ctx)
-{
-       return 0;
-}
-
-static unsigned long __arch_refl_get_aux(struct user_context *ctx)
-{
-       return 0;
-}
-
 __END_DECLS
 __END_DECLS
diff --git a/user/parlib/include/x86/trap.h b/user/parlib/include/x86/trap.h
new file mode 100644 (file)
index 0000000..07e580c
--- /dev/null
@@ -0,0 +1,58 @@
+/* Copyright (c) 2016 Google Inc.
+ * Barret Rhoden <brho@cs.berkeley.edu>
+ * See LICENSE for details.
+ *
+ * Arch-specific defines for traps, vmexits, and similar things */
+
+#pragma once
+
+#include <parlib/common.h>
+#include <ros/trapframe.h>
+
+__BEGIN_DECLS
+
+static bool has_refl_fault(struct user_context *ctx)
+{
+       switch (ctx->type) {
+       case ROS_HW_CTX:
+               return ctx->tf.hw_tf.tf_padding3 == ROS_ARCH_REFL_ID;
+       case ROS_SW_CTX:
+               return FALSE;
+       case ROS_VM_CTX:
+               return ctx->tf.vm_tf.tf_flags & VMCTX_FL_HAS_FAULT ? TRUE : FALSE;
+       }
+}
+
+static void clear_refl_fault(struct user_context *ctx)
+{
+       switch (ctx->type) {
+       case ROS_HW_CTX:
+               ctx->tf.hw_tf.tf_padding3 = 0;
+               break;
+       case ROS_SW_CTX:
+               /* Should never attempt this on an SW ctx */
+               assert(0);
+               break;
+       case ROS_VM_CTX:
+               ctx->tf.vm_tf.tf_flags &= ~VMCTX_FL_HAS_FAULT;
+               break;
+       }
+}
+
+static unsigned int __arch_refl_get_nr(struct user_context *ctx)
+{
+       return ctx->tf.hw_tf.tf_trapno;
+}
+
+static unsigned int __arch_refl_get_err(struct user_context *ctx)
+{
+       return ctx->tf.hw_tf.tf_err;
+}
+
+static unsigned long __arch_refl_get_aux(struct user_context *ctx)
+{
+       return ((unsigned long)ctx->tf.hw_tf.tf_padding5 << 32) |
+              ctx->tf.hw_tf.tf_padding4;
+}
+
+__END_DECLS
index 8442d27..b1a8bcd 100644 (file)
@@ -388,48 +388,4 @@ static inline uintptr_t get_user_ctx_stack(struct user_context *ctx)
        temp; \
 })
 
        temp; \
 })
 
-static bool has_refl_fault(struct user_context *ctx)
-{
-       switch (ctx->type) {
-       case ROS_HW_CTX:
-               return ctx->tf.hw_tf.tf_padding3 == ROS_ARCH_REFL_ID;
-       case ROS_SW_CTX:
-               return FALSE;
-       case ROS_VM_CTX:
-               return ctx->tf.vm_tf.tf_flags & VMCTX_FL_HAS_FAULT ? TRUE : FALSE;
-       }
-}
-
-static void clear_refl_fault(struct user_context *ctx)
-{
-       switch (ctx->type) {
-       case ROS_HW_CTX:
-               ctx->tf.hw_tf.tf_padding3 = 0;
-               break;
-       case ROS_SW_CTX:
-               /* Should never attempt this on an SW ctx */
-               assert(0);
-               break;
-       case ROS_VM_CTX:
-               ctx->tf.vm_tf.tf_flags &= ~VMCTX_FL_HAS_FAULT;
-               break;
-       }
-}
-
-static unsigned int __arch_refl_get_nr(struct user_context *ctx)
-{
-       return ctx->tf.hw_tf.tf_trapno;
-}
-
-static unsigned int __arch_refl_get_err(struct user_context *ctx)
-{
-       return ctx->tf.hw_tf.tf_err;
-}
-
-static unsigned long __arch_refl_get_aux(struct user_context *ctx)
-{
-       return ((unsigned long)ctx->tf.hw_tf.tf_padding5 << 32) |
-              ctx->tf.hw_tf.tf_padding4;
-}
-
 __END_DECLS
 __END_DECLS
index fbc27b6..ba9a74b 100644 (file)
@@ -10,6 +10,7 @@
 #include <parlib/event.h>
 #include <stdlib.h>
 #include <parlib/assert.h>
 #include <parlib/event.h>
 #include <stdlib.h>
 #include <parlib/assert.h>
+#include <parlib/arch/trap.h>
 
 /* SCPs have a default 2LS that only manages thread 0.  Any other 2LS, such as
  * pthreads, should override sched_ops in its init code. */
 
 /* SCPs have a default 2LS that only manages thread 0.  Any other 2LS, such as
  * pthreads, should override sched_ops in its init code. */