qlock wrappers
authorBarret Rhoden <brho@cs.berkeley.edu>
Thu, 16 Jan 2014 21:13:35 +0000 (13:13 -0800)
committerBarret Rhoden <brho@cs.berkeley.edu>
Thu, 16 Jan 2014 21:15:22 +0000 (13:15 -0800)
qlocks are binary semaphores.  For now, they are just wrappers around
our sems.

qlocks must be initialized.  plan9 will probably just set it to 0, and
then will hang the first time it tries to lock.

I didn't bother porting over the ilocks.  Should just spatch and
initialize those.

kern/include/kthread.h

index a0c3150..3f9ec4d 100644 (file)
@@ -118,4 +118,11 @@ void __reg_abortable_cv(struct cv_lookup_elm *cle, struct cond_var *cv);
 void dereg_abortable_cv(struct cv_lookup_elm *cle);
 bool should_abort(struct cv_lookup_elm *cle);
 
+/* qlocks are plan9's binary sempahore, which are wrappers around our sems */
+typedef struct semaphore qlock_t;
+#define qlock_init(x) sem_init((x), 1)
+#define qlock(x) sem_down(x)
+#define qunlock(x) sem_up(x)
+#define canqlock(x) sem_trydown(x)
+
 #endif /* ROS_KERN_KTHREAD_H */