Environment
Hewlett Packard G7, G8 and G9 servers
Novell Open Enterprise Server 11 (OES 11) Linux
SUSE Linux Enterprise Server 11 Service Pack 1 (SLES 11 SP1)
SUSE Linux Enterprise Server 11 Service Pack 2 (SLES 11 SP2)
SUSE Linux Enterprise Server 11 Service Pack 3 (SLES 11 SP3)
SUSE Linux Enterprise Server 11 Service Pack 4 (SLES 11 SP4)
SUSE Linux Enterprise Server 12
SUSE Linux Enterprise Server 12 Service Pack 1 (SLES 12 SP1)
Novell Open Enterprise Server 11 (OES 11) Linux
SUSE Linux Enterprise Server 11 Service Pack 1 (SLES 11 SP1)
SUSE Linux Enterprise Server 11 Service Pack 2 (SLES 11 SP2)
SUSE Linux Enterprise Server 11 Service Pack 3 (SLES 11 SP3)
SUSE Linux Enterprise Server 11 Service Pack 4 (SLES 11 SP4)
SUSE Linux Enterprise Server 12
SUSE Linux Enterprise Server 12 Service Pack 1 (SLES 12 SP1)
Situation
In /var/log/messages once or frequently the following messages appear:
[17377.371160] ACPI Error: SMBus or IPMI write requires Buffer of length 42, found length 20 (20090903/exfield-286) [17377.371166] ACPI Error (psparse-0537): Method parse/execution failed [\_SB_.PMI0._PMM] (Node ffff88201894eb28), AE_AML_BUFFER_LIMIT
[17377.371176] ACPI Exception: AE_AML_BUFFER_LIMIT, Evaluating _PMM (20090903/power_meter-347)
Resolution
The messages express a disagreement between the BIOS and the kernel as far as an ACPI buffer size is concerned. This is related to power monitoring.
This is confirmed to be a BIOS issue which should be addressed by a BIOS update from the hardware vendor. Short of a BIOS update from the vendor, the easiest solution is to blacklist the acpi_power_meter kernel module. The driver doesn't work due to the wrong buffer size anyway.
# echo "blacklist acpi_power_meter" >> /etc/modprobe.d/hwmon.conf
When running SLES11 SP2, and you really want to get rid of the error messages *and* get the acpi_power_meter driver working, you will have to provide a custom ACPI table to replace the faulty one. However this is a difficult task and needs to be done for every machine. Specifically you'll have to locate method _PMM and change the definition of BUFF from Buffer (0x20) to Buffer (0x42).
Even after doing that, you will notice a new set of kernel error messages:
ACPI Error: No handler for Region [POWR] (ffff8802333da588) [IPMI] (20110413/evregion-373)
ACPI Error: Region IPMI (ID=7) has no handler (20110413/exfldio-292)
ACPI Error: Method parse/execution failed [\_SB_.PMI0._PMM] (Node ffff8802333dbce0), AE_NOT_EXIST (20110413/psparse-536)
This is caused by a missing kernel module, which was not supported before kernel package version 3.0.26-0.7.6. The required modules will not be loaded automatically, so after updating the kernel, you will also have to load them with the following commands:
# modprobe ipmi_si
# modprobe acpi_ipmi
After that, you can load the acpi_power_meter module and it should work.
This is confirmed to be a BIOS issue which should be addressed by a BIOS update from the hardware vendor. Short of a BIOS update from the vendor, the easiest solution is to blacklist the acpi_power_meter kernel module. The driver doesn't work due to the wrong buffer size anyway.
# echo "blacklist acpi_power_meter" >> /etc/modprobe.d/hwmon.conf
When running SLES11 SP2, and you really want to get rid of the error messages *and* get the acpi_power_meter driver working, you will have to provide a custom ACPI table to replace the faulty one. However this is a difficult task and needs to be done for every machine. Specifically you'll have to locate method _PMM and change the definition of BUFF from Buffer (0x20) to Buffer (0x42).
Even after doing that, you will notice a new set of kernel error messages:
ACPI Error: No handler for Region [POWR] (ffff8802333da588) [IPMI] (20110413/evregion-373)
ACPI Error: Region IPMI (ID=7) has no handler (20110413/exfldio-292)
ACPI Error: Method parse/execution failed [\_SB_.PMI0._PMM] (Node ffff8802333dbce0), AE_NOT_EXIST (20110413/psparse-536)
This is caused by a missing kernel module, which was not supported before kernel package version 3.0.26-0.7.6. The required modules will not be loaded automatically, so after updating the kernel, you will also have to load them with the following commands:
# modprobe ipmi_si
# modprobe acpi_ipmi
After that, you can load the acpi_power_meter module and it should work.
Additional Information
To reproduce the issue on affected HW one should find a valid device by:
find /sys/devices/LNXSYSTM\:00/ |grep ACPI000Dthen trying to read out the power average:
cat /sys/devices/LNXSYSTM:00/device:00/ACPI000D:00/power1_averagewill result in the mentioned kernel errors in syslog.