summaryrefslogtreecommitdiff
path: root/main.c
diff options
context:
space:
mode:
authorrsc <rsc>2006-07-16 01:15:28 +0000
committerrsc <rsc>2006-07-16 01:15:28 +0000
commit65bd8e139a8368e987455a10ec59dd7b079b3af1 (patch)
tree8ce996135fadab4abde8acf5a6ed4eb69d463c60 /main.c
parent40a2a08319511fd157d2d77eefbda52423cc81ec (diff)
downloadxv6-labs-65bd8e139a8368e987455a10ec59dd7b079b3af1.tar.gz
xv6-labs-65bd8e139a8368e987455a10ec59dd7b079b3af1.tar.bz2
xv6-labs-65bd8e139a8368e987455a10ec59dd7b079b3af1.zip
New scheduler.
Removed cli and sti stack in favor of tracking number of locks held on each CPU and explicit conditionals in spinlock.c.
Diffstat (limited to 'main.c')
-rw-r--r--main.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/main.c b/main.c
index 402aab6..70e93cf 100644
--- a/main.c
+++ b/main.c
@@ -18,19 +18,19 @@ extern uint8_t _binary_userfs_start[], _binary_userfs_size[];
extern int use_console_lock;
+struct spinlock sillylock; // hold this to keep interrupts disabled
+
int
main()
{
struct proc *p;
if (acpu) {
- cpus[cpu()].clis = 1;
cprintf("an application processor\n");
idtinit(); // CPU's idt
lapic_init(cpu());
lapic_timerinit();
lapic_enableintr();
- sti();
scheduler();
}
acpu = 1;
@@ -40,10 +40,9 @@ main()
mp_init(); // collect info about this machine
+ acquire(&sillylock);
use_console_lock = 1;
- cpus[cpu()].clis = 1; // cpu starts as if we had called cli()
-
lapic_init(mp_bcpu());
cprintf("\nxV6\n\n");
@@ -56,7 +55,7 @@ main()
// create fake process zero
p = &proc[0];
memset(p, 0, sizeof *p);
- p->state = WAITING;
+ p->state = SLEEPING;
p->sz = 4 * PAGE;
p->mem = kalloc(p->sz);
memset(p->mem, 0, p->sz);
@@ -88,6 +87,7 @@ main()
//load_icode(p, _binary_userfs_start, (unsigned) _binary_userfs_size);
p->state = RUNNABLE;
cprintf("loaded userfs\n");
+ release(&sillylock);
scheduler();