removed X_KLUGE
authorKazumasa Utashiro <utashiro@ucbvax.Berkeley.EDU>
Thu, 8 Apr 1993 17:36:50 +0000 (09:36 -0800)
committerKazumasa Utashiro <utashiro@ucbvax.Berkeley.EDU>
Thu, 8 Apr 1993 17:36:50 +0000 (09:36 -0800)
Changed asynchronous bus error handling.

SCCS-vsn: sys/news3400/news3400/trap.c 7.8

usr/src/sys/news3400/news3400/trap.c

index 878eb72..6881025 100644 (file)
@@ -12,7 +12,7 @@
  *
  * from: Utah $Hdr: trap.c 1.32 91/04/06$
  *
  *
  * from: Utah $Hdr: trap.c 1.32 91/04/06$
  *
- *     @(#)trap.c      7.7 (Berkeley) %G%
+ *     @(#)trap.c      7.8 (Berkeley) %G%
  */
 
 #include <sys/param.h>
  */
 
 #include <sys/param.h>
 #include <news3400/hbdev/dmac_0448.h>
 #include <news3400/sio/scc.h>
 
 #include <news3400/hbdev/dmac_0448.h>
 #include <news3400/sio/scc.h>
 
-/*
- * This is a kludge to allow X windows to work.
- */
-#undef X_KLUGE
-
-#ifdef X_KLUGE
-#define USER_MAP_ADDR  0x4000
-#define NPTES 300
-static pt_entry_t UserMapPtes[NPTES];
-static unsigned nUserMapPtes;
-static pid_t UserMapPid;
-#endif
-
 struct proc *machFPCurProcPtr;         /* pointer to last proc to use FP */
 
 extern void MachKernGenException();
 struct proc *machFPCurProcPtr;         /* pointer to last proc to use FP */
 
 extern void MachKernGenException();
@@ -309,18 +296,6 @@ trap(statusReg, causeReg, vadr, pc, args)
                register vm_map_t map = &vm->vm_map;
                int rv;
 
                register vm_map_t map = &vm->vm_map;
                int rv;
 
-#ifdef X_KLUGE
-               if (p->p_pid == UserMapPid &&
-                   (va = pmax_btop(vadr - USER_MAP_ADDR)) < nUserMapPtes) {
-                       register pt_entry_t *pte;
-
-                       pte = &UserMapPtes[va];
-                       MachTLBWriteRandom((vadr & PG_FRAME) |
-                               (vm->vm_pmap.pm_tlbpid << VMMACH_TLB_PID_SHIFT),
-                               pte->pt_entry);
-                       return (pc);
-               }
-#endif
                va = trunc_page((vm_offset_t)vadr);
                rv = vm_fault(map, va, ftype, FALSE);
                if (rv != KERN_SUCCESS) {
                va = trunc_page((vm_offset_t)vadr);
                rv = vm_fault(map, va, ftype, FALSE);
                if (rv != KERN_SUCCESS) {
@@ -681,7 +656,6 @@ trap(statusReg, causeReg, vadr, pc, args)
                printf("trap: pid %d %s sig %d adr %x pc %x ra %x\n", p->p_pid,
                        p->p_comm, i, vadr, pc, p->p_md.md_regs[RA]); /* XXX */
                trapDump("trap");
                printf("trap: pid %d %s sig %d adr %x pc %x ra %x\n", p->p_pid,
                        p->p_comm, i, vadr, pc, p->p_md.md_regs[RA]); /* XXX */
                trapDump("trap");
-               traceback();
 #endif
 #endif
                panic("trap");
 #endif
 #endif
                panic("trap");
@@ -729,6 +703,8 @@ out:
        return (pc);
 }
 
        return (pc);
 }
 
+int    badaddr_flag;
+
 /*
  * Handle an interrupt.
  * Called from MachKernIntr() or MachUserIntr()
 /*
  * Handle an interrupt.
  * Called from MachKernIntr() or MachUserIntr()
@@ -766,10 +742,15 @@ interrupt(statusReg, causeReg, pc)
                 * asynchronous bus error
                 */
                splx((MACH_SPL_MASK_7 & ~causeReg) | MACH_SR_INT_ENA_CUR);
                 * asynchronous bus error
                 */
                splx((MACH_SPL_MASK_7 & ~causeReg) | MACH_SR_INT_ENA_CUR);
-               printf("level 4 interrupt: PC %x CR %x SR %x\n",
-                       pc, causeReg, statusReg);
                *(char *)INTCLR0 = INTCLR0_BERR;
                causeReg &= ~MACH_INT_MASK_4;
                *(char *)INTCLR0 = INTCLR0_BERR;
                causeReg &= ~MACH_INT_MASK_4;
+#define BADADDR 1
+               if (oonfault == BADADDR) {              /* XXX */
+                       badaddr_flag = 1;
+               } else {
+                       printf("level 4 interrupt: PC %x CR %x SR %x\n",
+                               pc, causeReg, statusReg);
+               }
        }
        if (mask & MACH_INT_MASK_3) {           /* level 3 interrupt */
                /*
        }
        if (mask & MACH_INT_MASK_3) {           /* level 3 interrupt */
                /*
@@ -938,53 +919,6 @@ trapDump(msg)
 }
 #endif
 
 }
 #endif
 
-#ifdef X_KLUGE
-/*
- * This is a kludge to allow X windows to work.
- */
-caddr_t
-vmUserMap(size, pa)
-       int size;
-       unsigned pa;
-{
-       register caddr_t v;
-       unsigned off, entry;
-
-       if (nUserMapPtes == 0)
-               UserMapPid = curproc->p_pid;
-       else if (UserMapPid != curproc->p_pid)
-               return ((caddr_t)0);
-       off = pa & PGOFSET;
-       size = btoc(off + size);
-       if (nUserMapPtes + size > NPTES)
-               return ((caddr_t)0);
-       v = (caddr_t)(USER_MAP_ADDR + pmax_ptob(nUserMapPtes) + off);
-       entry = (pa & 0x9ffff000) | PG_V | PG_M;
-       if (pa >= MACH_UNCACHED_MEMORY_ADDR)
-               entry |= PG_N;
-       while (size > 0) {
-               UserMapPtes[nUserMapPtes].pt_entry = entry;
-               entry += NBPG;
-               nUserMapPtes++;
-               size--;
-       }
-       return (v);
-}
-
-vmUserUnmap()
-{
-       int id;
-
-       nUserMapPtes = 0;
-       if (UserMapPid == curproc->p_pid) {
-               id = curproc->p_vmspace->vm_pmap.pm_tlbpid;
-               if (id >= 0)
-                       MachTLBFlushPID(id);
-       }
-       UserMapPid = 0;
-}
-#endif
-
 /*
  * Return the resulting PC as if the branch was executed.
  */
 /*
  * Return the resulting PC as if the branch was executed.
  */