diff --git a/sys/pc98/i386/trap.c b/sys/pc98/i386/trap.c index de45a14d985..6914fd4d135 100644 --- a/sys/pc98/i386/trap.c +++ b/sys/pc98/i386/trap.c @@ -35,7 +35,7 @@ * SUCH DAMAGE. * * from: @(#)trap.c 7.4 (Berkeley) 5/13/91 - * $Id: trap.c,v 1.7 1996/09/12 11:09:36 asami Exp $ + * $Id: trap.c,v 1.8 1996/10/23 07:25:03 asami Exp $ */ /* @@ -378,10 +378,10 @@ trap(frame) doreti_popl_ds_fault); MAYBE_DORETI_FAULT(doreti_popl_es, doreti_popl_es_fault); - } - if (curpcb && curpcb->pcb_onfault) { - frame.tf_eip = (int)curpcb->pcb_onfault; - return; + if (curpcb && curpcb->pcb_onfault) { + frame.tf_eip = (int)curpcb->pcb_onfault; + return; + } } break; @@ -532,7 +532,8 @@ trap_pfault(frame, usermode) if (p == NULL || (!usermode && va < VM_MAXUSER_ADDRESS && - (curpcb == NULL || curpcb->pcb_onfault == NULL))) { + (intr_nesting_level != 0 || curpcb == NULL || + curpcb->pcb_onfault == NULL))) { trap_fatal(frame); return (-1); } @@ -589,7 +590,7 @@ trap_pfault(frame, usermode) return (0); nogo: if (!usermode) { - if (curpcb && curpcb->pcb_onfault) { + if (intr_nesting_level == 0 && curpcb && curpcb->pcb_onfault) { frame->tf_eip = (int)curpcb->pcb_onfault; return (0); } @@ -695,7 +696,7 @@ trap_pfault(frame, usermode) return (0); nogo: if (!usermode) { - if (curpcb && curpcb->pcb_onfault) { + if (intr_nesting_level == 0 && curpcb && curpcb->pcb_onfault) { frame->tf_eip = (int)curpcb->pcb_onfault; return (0); }