summaryrefslogtreecommitdiff
path: root/lapic.c
diff options
context:
space:
mode:
authorrtm <rtm>2006-08-08 19:58:06 +0000
committerrtm <rtm>2006-08-08 19:58:06 +0000
commit0e84a0ec6e7893dad13dff9a958c5bc987b79c82 (patch)
tree5739d0a2af8277db7a47c74e52975d9e9d81cef7 /lapic.c
parente8d11c2e846ad15b32caacc8a919722b76d00f79 (diff)
downloadxv6-labs-0e84a0ec6e7893dad13dff9a958c5bc987b79c82.tar.gz
xv6-labs-0e84a0ec6e7893dad13dff9a958c5bc987b79c82.tar.bz2
xv6-labs-0e84a0ec6e7893dad13dff9a958c5bc987b79c82.zip
fix race in holding() check in acquire()
give cpu1 a TSS and gdt for when it enters scheduler() and a pseudo proc[] entry for each cpu cpu0 waits for each other cpu to start up read() for files
Diffstat (limited to 'lapic.c')
-rw-r--r--lapic.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/lapic.c b/lapic.c
index f299b86..161d0a5 100644
--- a/lapic.c
+++ b/lapic.c
@@ -110,7 +110,7 @@ lapic_write(int r, int data)
void
lapic_timerinit(void)
{
- cprintf("%d: init timer\n", cpu());
+ cprintf("cpu%d: init timer\n", cpu());
lapic_write(LAPIC_TDCR, LAPIC_X1);
lapic_write(LAPIC_TIMER, LAPIC_CLKIN | LAPIC_PERIODIC | (IRQ_OFFSET + IRQ_TIMER));
lapic_write(LAPIC_TCCR, 10000000);
@@ -120,7 +120,7 @@ lapic_timerinit(void)
void
lapic_timerintr(void)
{
- cprintf("%d: timer interrupt!\n", cpu());
+ cprintf("cpu%d: timer interrupt!\n", cpu());
lapic_write (LAPIC_EOI, 0);
}
@@ -129,7 +129,7 @@ lapic_init(int c)
{
uint r, lvt;
- cprintf("lapic_init %d\n", c);
+ cprintf("cpu%d: lapic_init %d\n", c);
lapic_write(LAPIC_DFR, 0xFFFFFFFF); // set destination format register
r = (lapic_read(LAPIC_ID)>>24) & 0xFF; // read APIC ID
@@ -158,7 +158,7 @@ lapic_init(int c)
while(lapic_read(LAPIC_ICRLO) & APIC_DELIVS)
;
- cprintf("Done init of an apic\n");
+ cprintf("cpu%d: apic init done\n", cpu());
}
void
@@ -182,7 +182,8 @@ lapic_eoi(void)
int
cpu(void)
{
- return (lapic_read(LAPIC_ID)>>24) & 0xFF;
+ int x = (lapic_read(LAPIC_ID)>>24) & 0xFF;
+ return x;
}
void