summaryrefslogtreecommitdiff
path: root/sys/src/9/pc64
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2014-07-09 22:45:51 +0200
committercinap_lenrek <cinap_lenrek@felloff.net>2014-07-09 22:45:51 +0200
commit3a6a754051a6f3f1ba742f12be0a2c33d309ca53 (patch)
tree5170261d4d211c331b732f3df9e5b94a0b7ab5dd /sys/src/9/pc64
parent3fe38f70014256cdd1d3b1b42f7b8760e6e80778 (diff)
pc, pc64: initial machine check architecture support
Diffstat (limited to 'sys/src/9/pc64')
-rw-r--r--sys/src/9/pc64/dat.h1
-rw-r--r--sys/src/9/pc64/fns.h1
-rw-r--r--sys/src/9/pc64/trap.c11
3 files changed, 5 insertions, 8 deletions
diff --git a/sys/src/9/pc64/dat.h b/sys/src/9/pc64/dat.h
index c5426b986..0bf421d79 100644
--- a/sys/src/9/pc64/dat.h
+++ b/sys/src/9/pc64/dat.h
@@ -286,6 +286,7 @@ enum {
Cpuapic = 1<<9,
Mtrr = 1<<12, /* memory-type range regs. */
Pge = 1<<13, /* page global extension */
+ Mca = 1<<14, /* machine-check architecture */
Pse2 = 1<<17, /* more page size extensions */
Clflush = 1<<19,
Acpif = 1<<22, /* therm control msr */
diff --git a/sys/src/9/pc64/fns.h b/sys/src/9/pc64/fns.h
index 0e2d8263c..04e1c5d69 100644
--- a/sys/src/9/pc64/fns.h
+++ b/sys/src/9/pc64/fns.h
@@ -28,6 +28,7 @@ int dmainit(int, int);
#define DMAREAD 1
#define DMALOOP 2
long dmasetup(int, void*, long, int);
+void dumpmcregs(void);
#define evenaddr(x) /* x86 doesn't care */
void (*fprestore)(FPsave*);
void (*fpsave)(FPsave*);
diff --git a/sys/src/9/pc64/trap.c b/sys/src/9/pc64/trap.c
index e8360d15f..2c2001115 100644
--- a/sys/src/9/pc64/trap.c
+++ b/sys/src/9/pc64/trap.c
@@ -503,14 +503,9 @@ dumpregs(Ureg* ureg)
iprint(" CR0 %8.8llux CR2 %16.16llux CR3 %16.16llux",
getcr0(), getcr2(), getcr3());
if(m->cpuiddx & (Mce|Tsc|Pse|Vmex)){
- iprint(" CR4 %16.16llux", getcr4());
- if((m->cpuiddx & (Mce|Cpumsr)) == (Mce|Cpumsr)){
- vlong mca, mct;
-
- rdmsr(0x00, &mca);
- rdmsr(0x01, &mct);
- iprint("\n MCA %8.8llux MCT %8.8llux", mca, mct);
- }
+ iprint(" CR4 %16.16llux\n", getcr4());
+ if(ureg->type == 18)
+ dumpmcregs();
}
iprint("\n ur %#p up %#p\n", ureg, up);
}