scanner的value值与直接读MCU命令字的值不匹配

情况描述:

一台服务器上使用14100665_00000001030302023936这个背板,插满了12个盘,其中disk0-7是sata,disk8-11是nvme。

我拔掉了disk8,结果发现BMC存储管理页面disk8和disk0都看不见了,于是查看csr配置,找到硬盘在位信息的来源:

通过mdbctl查看Drive_1对象,发现其Presence确实为0:

再查看Scanner_Drive0PresentAccessor,其status和value均为0:

最后直接使用busctl --user call bmc.kepler.hwproxy /bmc/kepler/Chip/Smc/Smc_EnclSMC_010102 bmc.kepler.Chip.BlockIO Read a{ss}uu 0 0x14000501 2命令去读smc,发现mask 1对应的bit为1(9→1001

image

问题:

Scanner_Drive0PresentAccessor.valuesmc的实际值不一样,请问要如何定位?我们基于2503代码做开发时没有出现该问题。切到2506和2509上都会存在该问题,而且是必现。

读一下SMC的其他有硬盘的槽位,然后拔盘在读一下,对比试试当前槽位试试呢;

所有盘的smc在位状态都读了,状态都和实际相符

这个问题必现,只要拔disk8,disk0的在位状态就也会跟着变成0;并且在只插disk8,不插disk0的情况下,disk0的在位状态scanner也会跟随disk8变成1,此时读disk0的smc是不在位。

感觉是在位状态是用位来表示的,正好0到7位表示0到7的盘符,但是8是不是应该是下一个地址的,哪里和0重复了,拔9会不会影响1?

disk8-11依次影响disk0-3。disk8-11是nvme盘,0-7是sata。

每个硬盘的在位状态的smc命令字各不相同,而且直接读smc读到的在位状态是正常的。

disk8不在位,disk0在位时:disk8的smc读值为0,disk0的smc读值为1;disk8和0的在位状态scanner的value都变成0。

disk8在位,disk0不在位时:disk8的smc读值为1,disk0的smc读值为0;disk8和0的在位状态scanner的value都变成1。

有没有配smcdfxinfo,那里的东西是不是配错了

确实是smcdfxinfo导致的 感谢