diff options
author | Frans Kaashoek <[email protected]> | 2017-02-01 18:04:13 -0500 |
---|---|---|
committer | Frans Kaashoek <[email protected]> | 2017-02-01 18:04:13 -0500 |
commit | ed396c068b881877330f7d40bfce02db9b1199b3 (patch) | |
tree | 69103a78128b46d6bae179b0440cca0a9c7f0b0c /proc.h | |
parent | fbb4c0944422f860484142010bb9f366f3e87bf8 (diff) | |
download | xv6-labs-ed396c068b881877330f7d40bfce02db9b1199b3.tar.gz xv6-labs-ed396c068b881877330f7d40bfce02db9b1199b3.tar.bz2 xv6-labs-ed396c068b881877330f7d40bfce02db9b1199b3.zip |
Eliminate code for gs trick to track per-cpu state. We rely on lapiccpunum()
to find a per-cpu id with which we locate a cpu's cpu struct.
Diffstat (limited to 'proc.h')
-rw-r--r-- | proc.h | 30 |
1 files changed, 1 insertions, 29 deletions
@@ -7,39 +7,12 @@ struct cpu { volatile uint started; // Has the CPU started? int ncli; // Depth of pushcli nesting. int intena; // Were interrupts enabled before pushcli? - // Per-CPU variables, holding pointers to the current cpu and to the current - // process (see cpu() and proc() in proc.c) - struct cpu *cpu; // On cpu 0, cpu = &cpus[0]; on cpu 1, cpu=&cpus[1], etc. - struct proc *proc; // The currently-running process on this cpu + struct proc *proc; // The process running on this cpu or null }; extern struct cpu cpus[NCPU]; extern int ncpu; -// The asm suffix tells gcc to use "%gs:0" to refer to cpu -// and "%gs:4" to refer to proc. seginit sets up the -// %gs segment register so that %gs refers to the memory -// holding those two variables in the local cpu's struct cpu. -// This is similar to how thread-local variables are implemented -// in thread libraries such as Linux pthreads. - -static inline struct cpu* -mycpu(void) { - struct cpu *cpu; - asm("movl %%gs:0, %0" : "=r"(cpu)); - return cpu; -} - -#if 0 -static inline struct proc* -myproc(void) { - struct proc *proc; - asm("movl %%gs:4, %0" : "=r"(proc)); - return proc; -} -#endif - - //PAGEBREAK: 17 // Saved registers for kernel context switches. // Don't need to save all the segment registers (%cs, etc), @@ -76,7 +49,6 @@ struct proc { struct file *ofile[NOFILE]; // Open files struct inode *cwd; // Current directory char name[16]; // Process name (debugging) - struct cpu *cpu; // If running, which cpu. }; // Process memory is laid out contiguously, low addresses first: |