summaryrefslogtreecommitdiff
path: root/proc.h
diff options
context:
space:
mode:
authorFrans Kaashoek <[email protected]>2017-02-01 18:04:13 -0500
committerFrans Kaashoek <[email protected]>2017-02-01 18:04:13 -0500
commited396c068b881877330f7d40bfce02db9b1199b3 (patch)
tree69103a78128b46d6bae179b0440cca0a9c7f0b0c /proc.h
parentfbb4c0944422f860484142010bb9f366f3e87bf8 (diff)
downloadxv6-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.h30
1 files changed, 1 insertions, 29 deletions
diff --git a/proc.h b/proc.h
index 7047d54..1647114 100644
--- a/proc.h
+++ b/proc.h
@@ -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: