Apply by doing: cd /usr/src/sys/arch/powerpc/powerpc patch < 001_trap.patch build a new kernel, ie. cd /usr/src/sys/arch/powerpc/conf config GENERIC cd ../compile/GENERIC make mv /bsd /bsd.1 cp bsd /bsd reboot Index: trap.c =================================================================== RCS file: /cvs/src/sys/arch/powerpc/powerpc/trap.c,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- trap.c 1999/03/13 01:49:07 1.13 +++ trap.c 1999/04/22 06:08:06 1.14 @@ -133,7 +133,7 @@ ftype = VM_PROT_READ; if (vm_fault(map, trunc_page(va), ftype, FALSE) == KERN_SUCCESS) - break; + return; if (fb = p->p_addr->u_pcb.pcb_onfault) { p->p_addr->u_pcb.pcb_onfault = 0; frame->srr0 = fb->pc; /* PC */ @@ -465,8 +465,10 @@ faultbuf env; u_int32_t v; - if (setfault(env)) + if (setfault(env)) { + curpcb->pcb_onfault = 0; return EACCES; + } switch(len) { case 4: v = *((volatile u_int32_t *)addr); @@ -492,8 +494,10 @@ size_t l; faultbuf env; - if (setfault(env)) + if (setfault(env)) { + curpcb->pcb_onfault = 0; return EACCES; + } while (len > 0) { p = USER_ADDR + ((u_int)udaddr & ~SEGMENT_MASK); l = (USER_ADDR + SEGMENT_LENGTH) - p; @@ -520,6 +524,7 @@ faultbuf env; if (setfault(env)) { + curpcb->pcb_onfault = 0; return EACCES; } while (len > 0) {