summaryrefslogtreecommitdiff
path: root/proc.h
diff options
context:
space:
mode:
authorAustin Clements <[email protected]>2010-09-02 04:15:17 -0400
committerAustin Clements <[email protected]>2010-09-02 04:15:17 -0400
commitd8828817d72962a6220cb1fca315cab4bbf6d0a3 (patch)
tree018515d8e7ce0c6681121914fb9d78e9955025b3 /proc.h
parentdd3ecd42cd6c8dee72e5212848cd8037d47f81dd (diff)
downloadxv6-labs-d8828817d72962a6220cb1fca315cab4bbf6d0a3.tar.gz
xv6-labs-d8828817d72962a6220cb1fca315cab4bbf6d0a3.tar.bz2
xv6-labs-d8828817d72962a6220cb1fca315cab4bbf6d0a3.zip
Rearrange proc.h and proc.c to get our action-packed spreads back (mostly). They also make sense in this order, so it's not just for page layout.
Diffstat (limited to 'proc.h')
-rw-r--r--proc.h59
1 files changed, 30 insertions, 29 deletions
diff --git a/proc.h b/proc.h
index 8799668..4a80a28 100644
--- a/proc.h
+++ b/proc.h
@@ -8,6 +8,36 @@
#define SEG_TSS 6 // this process's task state
#define NSEGS 7
+// Per-CPU state
+struct cpu {
+ uchar id; // Local APIC ID; index into cpus[] below
+ struct context *scheduler; // Switch here to enter scheduler
+ struct taskstate ts; // Used by x86 to find stack for interrupt
+ struct segdesc gdt[NSEGS]; // x86 global descriptor table
+ volatile uint booted; // Has the CPU started?
+ int ncli; // Depth of pushcli nesting.
+ int intena; // Were interrupts enabled before pushcli?
+
+ // Cpu-local storage variables; see below
+ struct cpu *cpu;
+ struct proc *proc;
+};
+
+extern struct cpu cpus[NCPU];
+extern int ncpu;
+
+// Per-CPU variables, holding pointers to the
+// current cpu and to the current process.
+// The asm suffix tells gcc to use "%gs:0" to refer to cpu
+// and "%gs:4" to refer to proc. ksegment 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.
+extern struct cpu *cpu asm("%gs:0"); // This cpu.
+extern struct proc *proc asm("%gs:4"); // Current proc on this cpu.
+
+//PAGEBREAK: 17
// Saved registers for kernel context switches.
// Don't need to save all the segment registers (%cs, etc),
// because they are constant across kernel contexts.
@@ -50,32 +80,3 @@ struct proc {
// original data and bss
// fixed-size stack
// expandable heap
-
-// Per-CPU state
-struct cpu {
- uchar id; // Local APIC ID; index into cpus[] below
- struct context *scheduler; // Switch here to enter scheduler
- struct taskstate ts; // Used by x86 to find stack for interrupt
- struct segdesc gdt[NSEGS]; // x86 global descriptor table
- volatile uint booted; // Has the CPU started?
- int ncli; // Depth of pushcli nesting.
- int intena; // Were interrupts enabled before pushcli?
-
- // Cpu-local storage variables; see below
- struct cpu *cpu;
- struct proc *proc;
-};
-
-extern struct cpu cpus[NCPU];
-extern int ncpu;
-
-// Per-CPU variables, holding pointers to the
-// current cpu and to the current process.
-// The asm suffix tells gcc to use "%gs:0" to refer to cpu
-// and "%gs:4" to refer to proc. ksegment 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.
-extern struct cpu *cpu asm("%gs:0"); // This cpu.
-extern struct proc *proc asm("%gs:4"); // Current proc on this cpu.