perf: Fix buggy bitops
[akaros.git] / kern / include / env.h
index 7c6135e..255a5b9 100644 (file)
 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 +40,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 +71,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,11 +88,11 @@ 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;
@@ -103,6 +116,8 @@ struct proc {
 
        /* VMMCP */
        struct vmm vmm;
+
+       struct strace                           *strace;
 };
 
 /* Til we remove all Env references */