blob: aca3e40cd2de73a81847ea6d052c8e4962e87e1e [file] [log] [blame]
.TH MCE-INJECT 8 "May 2009" "Intel OTC" "Linux's Administrator's Manual"
mce-inject \- Inject machine checks into x86 kernel for testing
mce-inject mce-file1 ...
mce-inject < mce-file
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.
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 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
Don't broadcast exceptions to all CPUs. Default is to broadcast UC
MCE should be injected in interrupt context
MCE injected in process context.
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.
Inject in machine check poller code.
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.
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
Comments start with # until the end of the line
The keywords are case-insensitive.
mce-inject to run as root. /dev/mcelog has to exist. The kernels needs
to have machine check injection (
) enabled and if modular the mce-inject module loaded. This option is
available in Linux 2.6.31 or later.
.I mce-test
package has a lot of input file examples.
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.