Clean up profiler configure and usage functions.
[akaros.git] / kern / include / process.h
index 470d02f..23ae35c 100644 (file)
@@ -5,8 +5,7 @@
  * All things processes!  As we move away from the old envs to processes,
  * we'll move things into here that are designed for multicore processes. */
 
-#ifndef ROS_KERN_PROCESS_H
-#define ROS_KERN_PROCESS_H
+#pragma once
 
 #include <ros/common.h>
 #include <ros/event.h>
                               (state)==PROC_RUNNING_M  ? "RUNNING_M"  : \
                                                          "UNKNOWN")
 
+#define DEFAULT_PROGNAME ""
+
 #include <env.h>
 
+struct process_set {
+       size_t num_processes;
+       size_t size;
+       struct proc **procs;
+};
+
 /* Can use a htable iterator to iterate through all active procs */
 extern struct hashtable *pid_hash;
 extern spinlock_t pid_hash_lock;
 
 /* Initialization */
 void proc_init(void);
+void proc_set_progname(struct proc *p, char *name);
+void proc_replace_binary_path(struct proc *p, char *path);
+void proc_init_procinfo(struct proc* p);
+void proc_init_procdata(struct proc* p);
 
 /* Process management: */
 struct proc *pid_nth(unsigned int n);
 error_t proc_alloc(struct proc **pp, struct proc *parent, int flags);
 void __proc_ready(struct proc *p);
 struct proc *proc_create(struct file *prog, char **argv, char **envp);
-int __proc_set_state(struct proc *p, uint32_t state) WRITES(p->state);
+int __proc_set_state(struct proc *p, uint32_t state);
 struct proc *pid2proc(pid_t pid);
-bool proc_controls(struct proc *SAFE actor, struct proc *SAFE target);
+bool proc_controls(struct proc *actor, struct proc *target);
 void proc_incref(struct proc *p, unsigned int val);
 void proc_decref(struct proc *p);
 void proc_run_s(struct proc *p);
@@ -78,13 +89,16 @@ void proc_signal_parent(struct proc *child);
 int __proc_disown_child(struct proc *parent, struct proc *child);
 int proc_change_to_m(struct proc *p);
 void __proc_save_fpu_s(struct proc *p);
-void __proc_save_context_s(struct proc *p, struct user_context *ctx);
-void proc_yield(struct proc *SAFE p, bool being_nice);
+void __proc_save_context_s(struct proc *p);
+void proc_yield(struct proc *p, bool being_nice);
 void proc_notify(struct proc *p, uint32_t vcoreid);
 void proc_wakeup(struct proc *p);
 bool __proc_is_mcp(struct proc *p);
+bool proc_is_vcctx_ready(struct proc *p);
 int proc_change_to_vcore(struct proc *p, uint32_t new_vcoreid,
                          bool enable_my_notif);
+void proc_get_set(struct process_set *pset);
+void proc_free_set(struct process_set *pset);
 
 /* Vcoremap info: */
 uint32_t proc_get_vcoreid(struct proc *p);
@@ -127,8 +141,8 @@ bool proc_preempt_core(struct proc *p, uint32_t pcoreid, uint64_t usec);
 void proc_preempt_all(struct proc *p, uint64_t usec);
 
 /* Current / cr3 / context management */
-struct proc *switch_to(struct proc *new_p);
-void switch_back(struct proc *new_p, struct proc *old_proc);
+uintptr_t switch_to(struct proc *new_p);
+void switch_back(struct proc *new_p, uintptr_t old_ret);
 void abandon_core(void);
 void clear_owning_proc(uint32_t coreid);
 void proc_tlbshootdown(struct proc *p, uintptr_t start, uintptr_t end);
@@ -151,5 +165,3 @@ void __abandon_core(void);
 /* Degubbing */
 void print_allpids(void);
 void print_proc_info(pid_t pid);
-
-#endif /* !ROS_KERN_PROCESS_H */