summaryrefslogtreecommitdiff
path: root/kernel/trap.c
diff options
context:
space:
mode:
authorRobert Morris <[email protected]>2019-07-11 10:38:56 -0400
committerRobert Morris <[email protected]>2019-07-11 10:38:56 -0400
commit6bbc2b2245c5b006824eb42ef33d5b296158a693 (patch)
tree0ea3426449bcccc744ba5f009ebbc166021c9674 /kernel/trap.c
parent7797a384236cee31b924d27d8f814ef9543662cd (diff)
downloadxv6-labs-6bbc2b2245c5b006824eb42ef33d5b296158a693.tar.gz
xv6-labs-6bbc2b2245c5b006824eb42ef33d5b296158a693.tar.bz2
xv6-labs-6bbc2b2245c5b006824eb42ef33d5b296158a693.zip
cosmetic changes
Diffstat (limited to 'kernel/trap.c')
-rw-r--r--kernel/trap.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/kernel/trap.c b/kernel/trap.c
index eb7f6cf..ea5799f 100644
--- a/kernel/trap.c
+++ b/kernel/trap.c
@@ -158,6 +158,15 @@ kerneltrap()
w_sstatus(sstatus);
}
+void
+clockintr()
+{
+ acquire(&tickslock);
+ ticks++;
+ wakeup(&ticks);
+ release(&tickslock);
+}
+
// check if it's an external interrupt or software interrupt,
// and handle it.
// returns 2 if timer interrupt,
@@ -182,16 +191,15 @@ devintr()
plic_complete(irq);
return 1;
} else if(scause == 0x8000000000000001){
- // software interrupt from a machine-mode timer interrupt.
+ // software interrupt from a machine-mode timer interrupt,
+ // forwarded by machinevec in kernelvec.S.
if(cpuid() == 0){
- acquire(&tickslock);
- ticks++;
- wakeup(&ticks);
- release(&tickslock);
+ clockintr();
}
- // acknowledge.
+ // acknowledge the software interrupt by clearing
+ // the SSIP bit in sip.
w_sip(r_sip() & ~2);
return 2;