Event queues no longer use KVAs
[akaros.git] / kern / include / process.h
index 36042ff..bdcecab 100644 (file)
@@ -9,7 +9,7 @@
 #define ROS_KERN_PROCESS_H
 
 #include <ros/common.h>
-#include <ros/notification.h>
+#include <ros/event.h>
 #include <trap.h>
 #include <atomic.h>
 #include <kref.h>
@@ -76,14 +76,14 @@ struct proc *proc_create(struct file *prog, char **argv, char **envp);
 int __proc_set_state(struct proc *p, uint32_t state) WRITES(p->state);
 struct proc *pid2proc(pid_t pid);
 bool proc_controls(struct proc *SAFE actor, struct proc *SAFE target);
+void proc_incref(struct proc *p, unsigned int val);
+void proc_decref(struct proc *p);
 void proc_run(struct proc *SAFE p);
 void proc_restartcore(void);
 void proc_destroy(struct proc *SAFE p);
 void __proc_yield_s(struct proc *p, struct trapframe *tf);
 void proc_yield(struct proc *SAFE p, bool being_nice);
-void do_notify(struct proc *p, uint32_t vcoreid, unsigned int notif,
-               struct notif_event *ne);
-void proc_notify(struct proc *p, unsigned int notif, struct notif_event *ne);
+void proc_notify(struct proc *p, uint32_t vcoreid);
 
 /* Exposed for sys_getvcoreid(), til it's unnecessary */
 uint32_t proc_get_vcoreid(struct proc *SAFE p, uint32_t pcoreid);
@@ -110,11 +110,10 @@ bool __proc_set_allcores(struct proc *SAFE p, uint32_t *pcorelist,
                          size_t *num, amr_t message, TV(a0t) arg0,
                          TV(a1t) arg1, TV(a2t) arg2);
 /* Takes from process p the num cores listed in corelist */
-bool __proc_take_cores(struct proc *SAFE p, uint32_t *pcorelist,
-                       size_t num, amr_t message, TV(a0t) arg0,
-                       TV(a1t) arg1, TV(a2t) arg2);
-bool __proc_take_allcores(struct proc *SAFE p, amr_t message, TV(a0t) arg0,
-                          TV(a1t) arg1, TV(a2t) arg2);
+bool __proc_take_cores(struct proc *p, uint32_t *pcorelist, size_t num,
+                       amr_t message, long arg0, long arg1, long arg2);
+bool __proc_take_allcores(struct proc *p, amr_t message, long arg0, long arg1,
+                          long arg2);
 void __proc_kmsg_pending(struct proc *p, bool ipi_pending);
 /* Exposed for kern/src/resource.c for now */
 void __map_vcore(struct proc *p, uint32_t vcoreid, uint32_t pcoreid);
@@ -128,36 +127,23 @@ bool __proc_preempt_all(struct proc *p);
 void proc_preempt_core(struct proc *p, uint32_t pcoreid, uint64_t usec);
 void proc_preempt_all(struct proc *p, uint64_t usec);
 
-/* Allows the kernel to figure out what process is running on this core.  Can be
- * used just like a pointer to a struct proc.  Need these to be macros due to
- * some circular dependencies with smp.h. */
-#define current per_cpu_info[core_id()].cur_proc
-#define set_current_proc(p) per_cpu_info[core_id()].cur_proc = (p)
-
-/* Allows the kernel to figure out what *user* tf is on this core's stack.  Can
- * be used just like a pointer to a struct Trapframe.  Need these to be macros
- * due to some circular dependencies with smp.h.  This is done here instead of
- * elsewhere (like trap.h) for other elliptical reasons.  Note the distinction
- * between kernel and user contexts.  The kernel always returns to its nested,
- * interrupted contexts via iret/etc.  We never do that for user contexts. */
-#define current_tf per_cpu_info[core_id()].cur_tf
-
 void abandon_core(void);
 /* Hold the proc_lock, since it'll use the vcoremapping to send an unmapping
  * message for the region from start to end.  */
 void __proc_tlbshootdown(struct proc *p, uintptr_t start, uintptr_t end);
 
 /* Kernel message handlers for process management */
-void __startcore(trapframe_t *tf, uint32_t srcid, void *a0, void *a1, void *a2);
-void __notify(trapframe_t *tf, uint32_t srcid, void *a0, void *a1, void *a2);
-void __preempt(trapframe_t *tf, uint32_t srcid, void *a0, void *a1, void *a2);
-void __death(trapframe_t *tf, uint32_t srcid, void *a0, void *a1, void *a2);
-void __tlbshootdown(struct trapframe *tf, uint32_t srcid, void *a0, void *a1,
-                    void *a2);
+void __startcore(struct trapframe *tf, uint32_t srcid, long a0, long a1,
+                 long a2);
+void __notify(struct trapframe *tf, uint32_t srcid, long a0, long a1, long a2);
+void __preempt(trapframe_t *tf, uint32_t srcid, long a0, long a1, long a2);
+void __death(struct trapframe *tf, uint32_t srcid, long a0, long a1, long a2);
+void __tlbshootdown(struct trapframe *tf, uint32_t srcid, long a0, long a1,
+                    long a2);
 
 /* Arch Specific */
 void proc_init_trapframe(trapframe_t *SAFE tf, uint32_t vcoreid,
-                         uint32_t entryp, uint32_t stack_top);
+                         uintptr_t entryp, uintptr_t stack_top);
 void proc_secure_trapframe(struct trapframe *tf);
 void __abandon_core(void);
 
@@ -166,4 +152,4 @@ void print_idlecoremap(void);
 void print_allpids(void);
 void print_proc_info(pid_t pid);
 
-#endif // !ROS_KERN_PROCESS_H
+#endif /* !ROS_KERN_PROCESS_H */