From 9981bb227093373649acd019d378dfccb54189c8 Mon Sep 17 00:00:00 2001 From: Robert Morris Date: Wed, 10 Jul 2019 08:57:51 -0400 Subject: tweak some comments. --- kernel/trap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'kernel/trap.c') diff --git a/kernel/trap.c b/kernel/trap.c index 018b7db..27cfd32 100644 --- a/kernel/trap.c +++ b/kernel/trap.c @@ -100,7 +100,7 @@ usertrapret(void) p->tf->kernel_satp = r_satp(); p->tf->kernel_sp = (uint64)p->kstack + PGSIZE; p->tf->kernel_trap = (uint64)usertrap; - p->tf->hartid = r_tp(); + p->tf->kernel_hartid = r_tp(); // set up the registers that trampoline.S's sret will use // to get to user space. -- cgit v1.2.3 From 5eb1685700a7665814f1bcf63fc26f5dbf0f719a Mon Sep 17 00:00:00 2001 From: Robert Morris Date: Wed, 10 Jul 2019 09:24:50 -0400 Subject: have kill() lock before looking at p->pid document wait()'s use of np->parent w/o holding lock. --- kernel/trap.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'kernel/trap.c') diff --git a/kernel/trap.c b/kernel/trap.c index 27cfd32..eb7f6cf 100644 --- a/kernel/trap.c +++ b/kernel/trap.c @@ -53,6 +53,9 @@ usertrap(void) if(r_scause() == 8){ // system call + if(p->killed) + exit(); + // sepc points to the ecall instruction, // but we want to return to the next instruction. p->tf->epc += 4; -- cgit v1.2.3 From 6bbc2b2245c5b006824eb42ef33d5b296158a693 Mon Sep 17 00:00:00 2001 From: Robert Morris Date: Thu, 11 Jul 2019 10:38:56 -0400 Subject: cosmetic changes --- kernel/trap.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) (limited to 'kernel/trap.c') 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; -- cgit v1.2.3