sys_change_vcore() (XCC)
[akaros.git] / user / parlib / syscall.c
index 43d5acb..31b64f0 100644 (file)
@@ -106,35 +106,21 @@ int sys_proc_run(int pid)
        return ros_syscall(SYS_proc_run, pid, 0, 0, 0, 0, 0);
 }
 
-/* We need to do some hackery to pass 6 arguments.  Arg4 pts to the real arg4,
- * arg5, and arg6.  Keep this in sync with kern/src/syscall.c.
- * TODO: consider a syscall_multi that can take more args, and keep it in sync
- * with the kernel.  Maybe wait til we fix sysenter to have 5 or 6 args. */
 void *CT(length) sys_mmap(void *SNT addr, size_t length, int prot, int flags,
                           int fd, size_t offset)
 {
-       struct args {
-               int _flags;
-               int _fd;
-               size_t _offset;
-       } extra_args;
-       extra_args._flags = flags;
-       extra_args._fd = fd;
-       extra_args._offset = offset;
-       // TODO: deputy bitches about this
-       return (void*CT(length))TC(ros_syscall(SYS_mmap, addr, length,
-                                              prot, &extra_args, 0, 0));
+       return (void*)ros_syscall(SYS_mmap, addr, length, prot, flags, fd, offset);
 }
 
-int sys_notify(int pid, unsigned int notif, struct notif_event *ne)
+int sys_notify(int pid, unsigned int ev_type, struct event_msg *u_msg)
 {
-       return ros_syscall(SYS_notify, pid, notif, ne, 0, 0, 0);
+       return ros_syscall(SYS_notify, pid, ev_type, u_msg, 0, 0, 0);
 }
 
-int sys_self_notify(uint32_t vcoreid, unsigned int notif,
-                    struct notif_event *ne)
+int sys_self_notify(uint32_t vcoreid, unsigned int ev_type,
+                    struct event_msg *u_msg)
 {
-       return ros_syscall(SYS_self_notify, vcoreid, notif, ne, 0, 0, 0);
+       return ros_syscall(SYS_self_notify, vcoreid, ev_type, u_msg, 0, 0, 0);
 }
 
 int sys_halt_core(unsigned int usec)
@@ -142,7 +128,23 @@ int sys_halt_core(unsigned int usec)
        return ros_syscall(SYS_halt_core, usec, 0, 0, 0, 0, 0);
 }
 
-int sys_init_arsc()
+void* sys_init_arsc()
 {
-       return ros_syscall(SYS_init_arsc, 0, 0, 0, 0, 0, 0);
+       return (void*)ros_syscall(SYS_init_arsc, 0, 0, 0, 0, 0, 0);
+}
+
+int sys_block(unsigned int usec)
+{
+       return ros_syscall(SYS_block, usec, 0, 0, 0, 0, 0);
+}
+
+/* enable_my_notif tells the kernel whether or not it is okay to turn on notifs
+ * when our calling vcore 'yields'.  This controls whether or not the vcore will
+ * get started from vcore_entry() or not, and whether or not remote cores need
+ * to sys_change_vcore to preempt-recover the calling vcore.  Only set this to
+ * FALSE if you are unable to handle starting fresh at vcore_entry().  One
+ * example of this is in mcs_pdr_locks */
+void sys_change_vcore(uint32_t vcoreid, bool enable_my_notif)
+{
+       ros_syscall(SYS_change_vcore, vcoreid, enable_my_notif, 0, 0, 0, 0);
 }