Showing signed sensor value when the command "ipmitool sel elist" is executed
James Feist
james.feist at linux.intel.com
Wed Oct 30 04:11:44 AEDT 2019
On 10/29/19 9:18 AM, James Feist wrote:
> On 10/28/19 11:40 PM, Tony Lee (李文富) wrote:
>>> On 10/27/19 11:41 PM, Tony Lee (李文富) wrote:
>>>> Hi Jason,
>>>>
>>>> We know that when we execute the command "ipmitool sel elist", it will
>>> return something like the following,
>>>> "18 | 10/16/19 | 18:28:41 UTC | Temperature nvme0 | Upper Non-critical
>>> going high | Asserted | Reading 72 > Threshold 70 degrees C".
>>>>
>>>> I met a problem that when the sensor value in the d-bus is negative,
>>>> the
>>> current reading in "ipmitool sel elist" will be 0.
>>>> It seems that because the type of scaledValue is defined "uint32_t",
>>>> there is
>>> always a none negative value even current value is a negative value
>>> obtained
>>> from the d-bus. In
>>>>
>>> https://github.com/openbmc/phosphor-sel-logger/blob/master/include/sens
>>> orutils.hpp#L159
>>>>
>>>> Is this is an issue or I need to set it up somewhere?
>>>
>>> If min is < 0, then this should work:
>>>
>>> https://github.com/openbmc/phosphor-sel-logger/blob/6afe9560852c6431c4
>>> 3c8e79a28e2b7cb498e355/include/sensorutils.hpp#L61
>>>
>>> https://github.com/openbmc/phosphor-dbus-interfaces/blob/12162be363f11
>>> b9dafa92b5379db671712b3523c/xyz/openbmc_project/Sensor/Value.interfac
>>> e.yaml#L28
>>>
>>> It uses MinValue < 0 to determine if the sensor is signed or not.
>>
>> Hi James,
>>
>> Yes, My MinValue and min are < 0.
>> I understand that If min is < 0 then bSigned = true finally it will
>> return static_cast<int8_t>(scaledValue)
>> then this should work. But, after
>> https://github.com/openbmc/phosphor-sel-logger/blob/6afe9560852c6431c43c8e79a28e2b7cb498e355/include/sensorutils.hpp#L159
>>
>> I got scaledValue = 0 and return 0 in the end.
>>
>> There are another question that why is "scaledValue" defined as uint32_t?
>> Shouldn't it return a byte(uint8_t) after calculation?
>
> The return value is an uint8_t (about 5 lines below where you linked).
> The point of it being a uint32_t is so you can check for overflow. That
> being said looking at the unit tests I don't believe we check for
> negative, and that might need to be a int32_t.
>
> The tests are here:
> https://github.com/openbmc/intel-ipmi-oem/blob/master/tests/test_sensorcommands.cpp
>
>
> I'll try to take a look in the next day or two and write a new test to
> see if that fixes it, but feel free to add a test yourself if you beat
> me to it.
Give this a shot:
https://gerrit.openbmc-project.xyz/c/openbmc/intel-ipmi-oem/+/26664
It'll need to be ported to phosphor-sel-logger when review passes.
>
> -James
>
>>
>> Here is my settings and debug logs:
>> max = 127.000000
>> min = -128.000000
>> value = -1.000000
>> mValue = 1
>> rExp = 0
>> bValue = 0
>> bExp = 0
>> bSigned = true
>> scaledValue = 0
>>
>> Thanks,
>> -Tony
>>
>>> Thanks,
>>>
>>> -James
>>>
>>>>
>>>> Thanks
>>>> Best Regards,
>>>> Tony
>>>>
More information about the openbmc
mailing list