summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
Diffstat (limited to 'sys')
-rw-r--r--sys/arch/mips64/mips64/interrupt.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/sys/arch/mips64/mips64/interrupt.c b/sys/arch/mips64/mips64/interrupt.c
index 2c07070237e..20b6265809d 100644
--- a/sys/arch/mips64/mips64/interrupt.c
+++ b/sys/arch/mips64/mips64/interrupt.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: interrupt.c,v 1.36 2009/05/21 16:08:04 miod Exp $ */
+/* $OpenBSD: interrupt.c,v 1.37 2009/05/21 16:08:56 miod Exp $ */
/*
* Copyright (c) 2001-2004 Opsycon AB (www.opsycon.se / www.opsycon.com)
@@ -276,8 +276,18 @@ dummy_do_pending_int(int newcpl)
void
splinit()
{
+ struct proc *p = curproc;
+ struct pcb *pcb = &p->p_addr->u_pcb;
u_int32_t sr;
+ /*
+ * Update proc0 pcb to contain proper values.
+ */
+ pcb->pcb_context.val[13] = 0; /* IPL_NONE */
+ pcb->pcb_context.val[12] = (idle_mask << 8) & IC_INT_MASK;
+ pcb->pcb_context.val[11] = (pcb->pcb_regs.sr & ~SR_INT_MASK) |
+ (idle_mask & SR_INT_MASK);
+
spl0();
sr = updateimask(0);
sr |= SR_INT_ENAB;