mpcheck
Firmware Test Suite - mpcheck test
This test sanity checks any existing Multi Processor tables against the the MultiProcessor Specification. The MultiProcessor Specification describes enhancements to both operating systems and firmware allowing them to work with x86 processors in a multi-processor system.
Typical output from the mpcheck test is as follows:
00014 mpcheck Check MultiProcessor Tables. 00015 mpcheck --------------------------------------------------------- 00016 mpcheck Test 1 of 9: Check MP header. 00017 mpcheck PASSED: Test 1, MP header looks sane. 00018 mpcheck 00019 mpcheck Test 2 of 9: Check MP CPU entries. 00020 mpcheck PASSED: Test 2, All 2 CPU entries look sane. 00021 mpcheck 00022 mpcheck Test 3 of 9: Check MP Bus entries. 00023 mpcheck PASSED: Test 3, All 5 Bus Entries looked sane. 00024 mpcheck 00025 mpcheck Test 4 of 9: Check MP IO APIC entries. 00026 mpcheck PASSED: Test 4, All 1 IO APIC Entries look sane. 00027 mpcheck 00028 mpcheck Test 5 of 9: Check MP IO Interrupt entries. 00029 mpcheck PASSED: Test 5, All 35 IO Interrupt Entries look sane. 00030 mpcheck 00031 mpcheck Test 6 of 9: Check MP Local Interrupt entries. 00032 mpcheck PASSED: Test 6, All 2 Local Interrupt Entries look sane. 00033 mpcheck 00034 mpcheck Test 7 of 9: Check MP System Address entries. 00035 mpcheck PASSED: Test 7, All 7 System Address Space Mapping Entries 00036 mpcheck looks sane. 00037 mpcheck 00038 mpcheck Test 8 of 9: Check MP Bus Hierarchy entries. 00039 mpcheck PASSED: Test 8, All 1 Bus Hierarchy Entries look sane. 00040 mpcheck 00041 mpcheck Test 9 of 9: Check MP Compatible Bus Address Space 00042 mpcheck entries. 00043 mpcheck PASSED: Test 9, All 2 Compatible Bus Address Space Entries 00044 mpcheck look sane.
Example:
sudo fwts mpcheck -
..runs the mpcheck test on your machine and dumps the output to stdout.
Explanation of test results
Certain test results may require a little more explanation. This section will try and give some context to specific test failures.
Error ID |
Explanation |
MPCPUEntryLAPICId |
The first Local APIC ID was not zero. |
MPCPUEntryLAPICId |
The Local APIC ID of a CPU entry was not the expected value. Local APIC IDs should be enumerated sequentially according to the specification. |
MPCPUEntryLAPICVersion |
The Local APIC CPU entry did not have the expected version number. |
MPCPUEntryBootCPU |
A CPU entry that isn't the first one has been flagged as the boot CPU. Only the first CPU should be the boot CPU. |
MPCPUEntryUsable |
Not CPU entries were flagged as boot CPUs. There must be at least one boot CPU. |
MPBusEntryBusType |
A MultiProcessor bus entry has an unrecognised bus type. |
MPBusEntryLAPICId |
A bus entry has a non-zero local APIC ID and hence does not conform to the specification. |
MPBusEntryBusId |
A bus entry has an invalid bus ID. |
MPIOAPICNullAddr |
An IO APIC entry has an invalid (NULL) address. It must be defined. |
MPIOAPICId |
An IO APIC entry as an invalid APIC ID. |
MPIOAPICIdSeries |
An IO APIC entry has an APIC ID that does not follow the previous IO APIC entry APIC ID. |
MPIOAPICEnabled |
Non of the IO APIC entries were marked as enabled. |
MPIOIRQType |
An IO Interrupt entry does not have a type in the range 0x00..0x03. |
MPIOAPICId |
An IO Interrupt entry has a destination IO APIC ID which refers to an IO APIC that has not been defined. |
MPLocalIRQType |
A Local Interrupt entry does not have a type in the range 0x00..0x03. |
MPLocalIRQDestIRQAPIDId |
A Local Interrupt entry has a destination IO APIC ID which refers to an IO APIC that has not been defined. |
MPSysAddrSpaceBusId |
A System Address Space Mapping entry has a bus ID that is not defined in any of the Bus Entries. |
MPSysAddrSpaceType |
A System Address Space Mapping entry has an incorrect address type. It should be in the range 0x00..0x03. |
MPSysAddrSpaceAddrLength |
A System Address Space Mapping entry has a zero sized Address Length. |
MPBusHieraracyLength |
A Bus Hierarchy entry has an incorrect length. |
MPBusHierarchyParents |
A Bus Hierarchy entry did not have any parents that connected to a top level Bus entry. |
MPCompatBusLength |
A Compatible Bus Address Space entry had an invalid length. |
MPCompatBusRangeList |
A Compatible Bus Address Space entry had an invalid range list. The value should be 0x00 or 0x01. |
MPHeaderSig |
The MultiProcessor table header signature was incorrect. |
MPHeaderRevision |
The MultiProcessor table header revision was not 0x01 or 0x04. |
MPHeaderLAPICAddrNull |
The MultiProcessor table header Local APIC address was NULL. |