Complete rewrite of c3po for multicore
[akaros.git] / user / c3po / threads / threadlib.h
index 5801190..708b749 100644 (file)
@@ -4,6 +4,7 @@
 
 #include "pthread.h"
 #include "resource_stats.h"
+#include <stdbool.h>
 #include <time.h>
 #include <signal.h>
 
@@ -76,6 +77,8 @@ enum {
 
 typedef struct _thread_attr *thread_attr_t;
 
+extern void switch_to_vcore();
+extern void run_next_thread();
 void thread_exit(void *ret);
 void thread_exit_program(int exitcode);
 void thread_yield();
@@ -90,11 +93,11 @@ int thread_suspend_self(unsigned long long timeout);
 
 // resume is made idempotent - resuming an already runnable thread does nothing
 void thread_resume(thread_t* t);
-inline char* thread_name(thread_t *t);
+char* thread_name(thread_t *t);
 int thread_join(thread_t *t, void **val);
 void thread_set_daemon(thread_t *t);
 
-extern thread_t *current_thread;
+extern __thread thread_t *current_thread;
 static inline thread_t* thread_self() { return current_thread; }
 
 // Key-based thread specific storage
@@ -109,10 +112,10 @@ void *thread_key_getdata(thread_key_t key);
 void thread_usleep(unsigned long long timeout);
 
 // Mutex - return TRUE on success
-inline int thread_mutex_init(mutex_t *m, char *name);
-inline int thread_mutex_lock(mutex_t *m);
-inline int thread_mutex_trylock(mutex_t *m);    // do not block, return FALSE when mutex held but others
-inline int thread_mutex_unlock(mutex_t *m);
+int thread_mutex_init(mutex_t *m, char *name);
+int thread_mutex_lock(mutex_t *m);
+int thread_mutex_trylock(mutex_t *m);    // do not block, return FALSE when mutex held but others
+int thread_mutex_unlock(mutex_t *m);
 
 // Rwlocks
 enum rwlock_op {
@@ -146,8 +149,8 @@ int thread_kill(thread_t* t, int sig);
 int thread_kill_all(int sig);
 int thread_sigwait(const sigset_t *set, int *sig);
 
-extern inline void thread_stats_add_heap(long size);
-extern inline void thread_stats_add_fds(int num);
+extern void thread_stats_add_heap(long size);
+extern void thread_stats_add_fds(int num);
 
 
 typedef struct {
@@ -172,9 +175,6 @@ extern iostats_t diskio_stats;
   else            type##_stats.errors++; \
 }
 
-extern int cap_override_rw;
-
-
 extern const char *cap_current_syscall;  // used to inform the BG routines how they got there...
 #define CAP_SET_SYSCALL()   if(!cap_current_syscall) cap_current_syscall = __FUNCTION__
 #define CAP_CLEAR_SYSCALL() (cap_current_syscall = NULL)
@@ -216,8 +216,8 @@ do { \
 #define thread_latch_init(latch) do {(void)(latch);} while(0)
 #endif
 
-#define LATCH_INITIALIZER_UNLOCKED ((latch_t) { LATCH_UNLOCKED })
-#define LATCH_INITIALIZER_LOCKED   ((latch_t) { LATCH_UNKNOWN })
+#define LATCH_INITIALIZER_UNLOCKED { LATCH_UNLOCKED }
+#define LATCH_INITIALIZER_LOCKED   { LATCH_UNKNOWN }
 
 #endif /* THREADLIB_H */