blob: aca3e40cd2de73a81847ea6d052c8e4962e87e1e [file] [log] [blame]
.TH MCE-INJECT 8 "May 2009" "Intel OTC" "Linux's Administrator's Manual"
.SH NAME
mce-inject \- Inject machine checks into x86 kernel for testing
.SH SYNOPSIS
mce-inject mce-file1 ...
.br
mce-inject < mce-file
.SH DESCRIPTION
mce-inject allows to inject machine checks in a running x86 Linux kernel.
machine checks are internal CPU errors. This tool is intended to
test the machine check handling code.
The injection only happens on the software level and does
not simulate full machine check handling on the platform level.
The machine checks to be injected are described in a input language similar
to the format the kernel outputs on a panic message (with a few extension).
In general you should be able to pipe in a panic message to inject
that mce.
See the IA32 SDM Vol3a chapter 14 for the details on fields. They correspond
to the machine check MSRs of the standard IA32 Machine check architecture
described there.
.SH INPUT LANGUAGE
These generally represent the similarly CPU MSRs, with some
metadata on where to inject the exception. Please see
the IA software developers Manual for more details.
The machine check always starts with
.I MCE
or
.I CPU number|broadcast [bank-number]
Machine check is injected on CPU xx or broadcasted to all CPUs
.I BANK bank-number
Machine check bank to inject on.
.I STATUS {number|fatal|corrected|uncorrected|pcc|uc|val|en|over|ar|ucna|srao|srar|s}
The symbols generally represent hardware register bits, as documented in the Intel
software developer's manual.
When multiple are listed they are ored together.
.I MCGSTATUS {number|mcip|ripv|eipv}
The symbols generally represent hardware register bits, as documented in the Intel
software developer's manual.
When multiple are listed they are ored together.
.I ADDR number
.I RIP number
.I RIP number:<number>{string}
.I RIP number:number
.I MISC number
.I CPU number : machine check exception : number BANK number : number
parsed for compatibility with kernel output. Use explicit statements
.I TSC number
TSC state injected in machine check
.I NOBROADCAST
Don't broadcast exceptions to all CPUs. Default is to broadcast UC
.I IN_IRQ
MCE should be injected in interrupt context
.I IN_PROC
MCE injected in process context.
.I HOLD
Don't inject MCE immediately but hold it for later injection. This is useful
for testing injection on multiple CPUs in parallel
.I SOCKETID number
Socketid. Ignored by kernel on injection.
.I MCGCAP number
Machine check capabilities register value. Currently ignored by kernel on injection.
.I POLL
Inject in machine check poller code.
.I EXCP
Inject as machine check exception.
.I APICID number
APIC ID of CPU. Ignored by kernel on injection.
A list of symbols ors the symbols together.
.TE
Multiple fields can be on a line.
number can be hex/octal/decimal in the usual C format.
Multiple machine checks can be in a single file, each new one
starts with "CPU" or "MCE".
For all missing fields reasonable default values are filled in
(hopefully)
Comments start with # until the end of the line
The keywords are case-insensitive.
.SH REQUIREMENTS
mce-inject to run as root. /dev/mcelog has to exist. The kernels needs
to have machine check injection (
.I CONFIG_X86_MCE_INJECT
) enabled and if modular the mce-inject module loaded. This option is
available in Linux 2.6.31 or later.
.SH NOTES
The
.I mce-test
package has a lot of input file examples.
.SH SEE ALSO
Intel 64 and IA32 Architectures Software Developer's manual, Volume 3,
System programming guide
Parts 1 and 2. Machine checks are described in Chapter 14 in Part1 and in Append
ix E in Part2.
Datasheet of your CPU.