Fixes preempt/indir tracing in lock_test
[akaros.git] / user / parlib / include / uthread.h
index 639090a..50faa90 100644 (file)
@@ -25,8 +25,9 @@ struct uthread {
        struct ancillary_state as;
        void *tls_desc;
        int flags;
-       struct syscall *sysc;   /* syscall we're blocking on, if any */
        int state;
+       struct syscall *sysc;   /* syscall we're blocking on, if any */
+       struct syscall local_sysc;      /* for when we don't want to use the stack */
        void (*yield_func)(struct uthread*, void*);
        void *yield_arg;
        int err_no;
@@ -35,7 +36,7 @@ struct uthread {
 typedef struct uthread uthread_t;
 extern __thread struct uthread *current_uthread;
 
-/* 2L-Scheduler operations.  Can be 0.  Examples in pthread.c. */
+/* 2L-Scheduler operations.  Examples in pthread.c. */
 struct schedule_ops {
        /* Functions supporting thread ops */
        void (*sched_entry)(void);
@@ -43,6 +44,8 @@ struct schedule_ops {
        void (*thread_paused)(struct uthread *);
        void (*thread_blockon_sysc)(struct uthread *, void *);
        void (*thread_has_blocked)(struct uthread *, int);
+       void (*thread_refl_fault)(struct uthread *, unsigned int, unsigned int,
+                                                         unsigned long);
        /* Functions event handling wants */
        void (*preempt_pending)(void);
        void (*spawn_thread)(uintptr_t pc_start, void *data);   /* don't run yet */
@@ -87,10 +90,6 @@ void run_current_uthread(void);
 void run_uthread(struct uthread *uthread);
 static inline struct uthread **get_cur_uth_addr(uint32_t vcoreid);
 
-/* Event handlers - exported globally so programs can wrap them */
-void handle_vc_preempt(struct event_msg *ev_msg, unsigned int ev_type);
-void handle_vc_indir(struct event_msg *ev_msg, unsigned int ev_type);
-
 /* Asking for trouble with this API, when we just want stacktop (or whatever
  * the SP will be). */
 static inline void init_uthread_ctx(struct uthread *uth, void (*entry)(void),