| .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 |
| |
| .I STATUS {number|fatal|corrected|uncorrected|pcc|uc|val|en|over} |
| |
| .I MCGSTATUS {number|mcip|ripv|eipv} |
| |
| .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. |
| |
| 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. |
| |
| |
| |