diff options
Diffstat (limited to 'trap.c')
-rw-r--r-- | trap.c | 19 |
1 files changed, 6 insertions, 13 deletions
@@ -129,7 +129,6 @@ kerneltrap() { uint64 sstatus = r_sstatus(); uint64 scause = r_scause(); - uint64 sepc = r_sepc(); // XXX needed only for check at end? if((sstatus & SSTATUS_SPP) == 0) panic("kerneltrap: not from supervisor mode"); @@ -141,12 +140,6 @@ kerneltrap() printf("sepc=%p stval=%p\n", r_sepc(), r_stval()); panic("kerneltrap"); } - - // XXX assert that we don't have to save/restore sstatus or sepc. - if(r_sstatus() != sstatus) - panic("kerneltrap sstatus"); - if(r_sepc() != sepc) - panic("kerneltrap sepc"); } // check if it's an external interrupt or software interrupt, @@ -166,8 +159,6 @@ devintr() if(irq == UART0_IRQ){ uartintr(); - } else { - printf("stray interrupt irq=%d\n", irq); } plic_complete(irq); @@ -175,10 +166,12 @@ devintr() } else if(scause == 0x8000000000000001){ // software interrupt from a machine-mode timer interrupt. - acquire(&tickslock); - ticks++; - wakeup(&ticks); - release(&tickslock); + if(cpuid() == 0){ + acquire(&tickslock); + ticks++; + wakeup(&ticks); + release(&tickslock); + } // acknowledge. w_sip(r_sip() & ~2); |