Add the 'current_kthread' helper
[akaros.git] / kern / include / env.h
index 7c6135e..30a5ac0 100644 (file)
@@ -17,7 +17,6 @@
 #include <sys/queue.h>
 #include <atomic.h>
 #include <mm.h>
-#include <vfs.h>
 #include <schedule.h>
 #include <devalarm.h>
 #include <ns.h>
 TAILQ_HEAD(vcore_tailq, vcore);
 /* 'struct proc_list' declared in sched.h (not ideal...) */
 
+struct username {
+       char name[128];
+       spinlock_t name_lock;
+};
+void __set_username(struct username *u, char *name);
+void set_username(struct username *u, char *name);
+
 #define PROC_PROGNAME_SZ 20
 // TODO: clean this up.
 struct proc {
@@ -33,8 +39,17 @@ struct proc {
        TAILQ_ENTRY(proc) sibling_link;
        spinlock_t proc_lock;
        struct user_context scp_ctx;    /* context for an SCP.  TODO: move to vc0 */
-       char user[64]; /* user name */
+       struct username user;
+
+       /* This is effectively a (potentially short) version of argv[0].
+        */
        char progname[PROC_PROGNAME_SZ];
+
+       /* This is the full path of the binary which the current proc structure
+        * is tracking.
+        */
+       char *binary_path;
+
        pid_t pid;
        /* Tempting to add a struct proc *parent, but we'd need to protect the use
         * of that reference from concurrent parent-death (letting init inherit
@@ -55,14 +70,11 @@ struct proc {
        /* Scheduler mgmt (info, data, whatever) */
        struct sched_proc_data ksched_data;
 
-       /* Cache color map: bitmap of the cache colors currently allocated to this
-        * process */
-       uint8_t* cache_colors_map;
-       size_t next_cache_color;
-
-       /* Keeps track of this process's current memory allocation 
-     * (i.e. its heap pointer) */
-       void* heap_top;
+       /* The args_base pointer is a user pointer which points to the base of
+        * the executable boot block (where args, environment, aux vectors, ...)
+        * are stored.
+        */
+       void *args_base;
 
        // Address space
        pgdir_t env_pgdir;                      // Kernel virtual address of page dir
@@ -75,18 +87,17 @@ struct proc {
        // Per process info and data pages
        procinfo_t *procinfo;       // KVA of per-process shared info table (RO)
        procdata_t *procdata;       // KVA of per-process shared data table (RW)
-       
+
        // The backring pointers for processing asynchronous system calls from the user
        // Note this is the actual backring, not a pointer to it somewhere else
        syscall_back_ring_t syscallbackring;
-       
+
        // The front ring pointers for pushing asynchronous system events out to the user
        // Note this is the actual frontring, not a pointer to it somewhere else
        sysevent_front_ring_t syseventfrontring;
 
        /* Filesystem info */
-       struct namespace                        *ns;
-       struct fs_struct                        fs_env;
+       int                                                     umask;
        struct fd_table                         open_files;
        struct pgrp                                     *pgrp;
        struct chan                                     *slash;
@@ -103,6 +114,8 @@ struct proc {
 
        /* VMMCP */
        struct vmm vmm;
+
+       struct strace                           *strace;
 };
 
 /* Til we remove all Env references */