问题描述
PCIe Card BBU读值概率为NA,预期为0.

正常读值:

环境信息
- 软件版本:[openUBMC 25.12 LTS SP1]
sensor/1.71.1.001@openubmc.dev/dev#d23671e26ff616fe5c2c4e3727225a6f%1775716355.9888885
重现步骤
OS下电后重启BMC,概率性产生状态为NA,产生NA后上电不会恢复。
期望结果
状态正常,读值正常显示。状态正常显示。
实际结果
OS下电后重启BMC,概率性产生状态为NA,产生NA后上电不会恢复。
分析结论
DiscreteSensor初始化关联Entity对象,存在时序问题,导致大量Sensor状态与代码配置不符。
传感器状态关联mdb_obj的EntityID与EntityInstance,host_id一般为0.
但是加打印后发现,会出现大量的[0|0|0]场景,而EntityInstance的默认值为96
查看sync_property_trace.log后发现,DiscreteSensor对象初值就绪概率性晚于代码初始化。

这里会导致问题1:代码找不到Entity对象时默认Sensor Enable,下电状态下预期被禁用的传感器,依然为Enable,可能导致误产生SEL。
问题2:RAID卡类似的PCIe设备,拓扑关系较长,无法获取整机PowerState,从而配死为1,但是Id与Instance也配死会导致关联到其它Entity(因为问题1,Entity部分没初始化完成),从而获取到不符合预期的Status。又由于PowerState与Presence配死,无法在后续OS上电时触发Listen函数,从而导致问题描述的问题发生。
如图,PSBoard的Id与RAID一致,EntityID默认为96,与RAID冲突,先注册了,导致RAID卡关联的Entity变为了PSBoard,获取到了不符合预期的PowerState

后续Entity更新正确后,Entity_RAIDCard的PowerState不会变更,导致对应的DiscreteSensor状态不会恢复,从而一直出现此问题。
诉求
希望有一个比较好的解决此问题的方法。
目前可以手动修改RAID卡的EntityInstance、ID或者把Capability去掉禁用标志,但感觉治标不治本。








