From 5e556cc70a81272b97be23d4fadc8b225b9018ce Mon Sep 17 00:00:00 2001 From: Mark Pizzolato Date: Mon, 30 Mar 2015 10:27:02 -0700 Subject: [PATCH] ALL VAX: Fix vax_cpu to be model invariant and implement platform specific machine behavior in model specific machine_check routine. As per Bob Supnik. Fix #198 --- VAX/vax610_sysdev.c | 2 ++ VAX/vax730_sys.c | 2 ++ VAX/vax750_cmi.c | 3 +++ VAX/vax780_sbi.c | 2 ++ VAX/vax860_abus.c | 2 ++ VAX/vax_cpu.c | 5 ----- VAX/vax_sysdev.c | 2 ++ 7 files changed, 13 insertions(+), 5 deletions(-) diff --git a/VAX/vax610_sysdev.c b/VAX/vax610_sysdev.c index a6da4e40..a3e9fd37 100644 --- a/VAX/vax610_sysdev.c +++ b/VAX/vax610_sysdev.c @@ -477,6 +477,8 @@ int32 machine_check (int32 p1, int32 opc, int32 cc, int32 delta) { int32 p2, acc; +if (in_ie) /* in exc? panic */ + ABORT (STOP_INIE); p2 = mchk_va + 4; /* save vap */ cc = intexc (SCB_MCHK, cc, 0, IE_EXC); /* take exception */ acc = ACC_MASK (KERN); /* in kernel mode */ diff --git a/VAX/vax730_sys.c b/VAX/vax730_sys.c index fc09534a..74f68d73 100644 --- a/VAX/vax730_sys.c +++ b/VAX/vax730_sys.c @@ -437,6 +437,8 @@ int32 machine_check (int32 p1, int32 opc, int32 cc, int32 delta) { int32 acc, nxm; +if (in_ie) /* in exc? panic */ + ABORT (STOP_INIE); nxm = ((p1 == MCHK_NXM) || (p1 == MCHK_IIA) || (p1 == MCHK_IUA)); if (nxm) cc = intexc (SCB_MCHK, cc, 0, IE_EXC); /* take normal exception */ diff --git a/VAX/vax750_cmi.c b/VAX/vax750_cmi.c index 141101e9..03487f9d 100644 --- a/VAX/vax750_cmi.c +++ b/VAX/vax750_cmi.c @@ -516,6 +516,9 @@ return; int32 machine_check (int32 p1, int32 opc, int32 cc, int32 delta) { int32 acc; + +if (in_ie) /* in exc? panic */ + ABORT (STOP_INIE); if (p1 == MCHK_BPE) /* bus error? */ cc = intexc (SCB_MCHK, cc, 0, IE_EXC); /* take normal exception */ else diff --git a/VAX/vax780_sbi.c b/VAX/vax780_sbi.c index 1e997a73..f88108c3 100644 --- a/VAX/vax780_sbi.c +++ b/VAX/vax780_sbi.c @@ -585,6 +585,8 @@ int32 machine_check (int32 p1, int32 opc, int32 cc, int32 delta) { int32 acc, err; +if (in_ie) /* in exc? panic */ + ABORT (STOP_INIE); err = (GET_TRAP (trpirq) << 4) | (pme << 3) | ASTLVL; /* error word */ cc = intexc (SCB_MCHK, cc, 0, IE_SVE); /* take exception */ acc = ACC_MASK (KERN); /* in kernel mode */ diff --git a/VAX/vax860_abus.c b/VAX/vax860_abus.c index f74b13fa..55fd9e71 100644 --- a/VAX/vax860_abus.c +++ b/VAX/vax860_abus.c @@ -633,6 +633,8 @@ int32 machine_check (int32 p1, int32 opc, int32 cc, int32 delta) int32 acc; int32 mstat1, mstat2, mear, ebcs, merg, ehmsts; +if (in_ie) /* in exc? panic */ + ABORT (STOP_INIE); mstat1 = (MSTAT1_CPRD << MSTAT1_V_CYC); /* MBOX Status 1 */ mstat2 = MSTAT2_NXM; /* MBOX Status 2 */ mear = mchk_va; /* Memory error address */ diff --git a/VAX/vax_cpu.c b/VAX/vax_cpu.c index 18be9f8e..e8cda95c 100644 --- a/VAX/vax_cpu.c +++ b/VAX/vax_cpu.c @@ -640,11 +640,6 @@ else if (abortval < 0) { /* mm or rsrv or int */ break; case SCB_MCHK: /* machine check */ -/* The ka630 and ka620 CPU ROMs use double machine checks to size memory */ -#if !defined(VAX_620) && !defined(VAX_630) - if (in_ie) /* in exc? panic */ - ABORT (STOP_INIE); -#endif cc = machine_check (p1, opc, cc, delta); /* system specific */ in_ie = 0; GET_CUR; /* PSL changed */ diff --git a/VAX/vax_sysdev.c b/VAX/vax_sysdev.c index a70ace85..a179ca83 100644 --- a/VAX/vax_sysdev.c +++ b/VAX/vax_sysdev.c @@ -1643,6 +1643,8 @@ int32 machine_check (int32 p1, int32 opc, int32 cc, int32 delta) { int32 i, st1, st2, p2, hsir, acc; +if (in_ie) /* in exc? panic */ + ABORT (STOP_INIE); if (p1 & 0x80) /* mref? set v/p */ p1 = p1 + mchk_ref; p2 = mchk_va + 4; /* save vap */