• Xianting Tian's avatar
    ipmi:msghandler: retry to get device id on an error · f8910ffa
    Xianting Tian authored
    We fail to get the BMCS's device id with low probability when loading
    the ipmi driver and it causes BMC device registration failed. When this
    issue occurs we got below kernel prints:
    
      [Wed Sep  9 19:52:03 2020] ipmi_si IPI0001:00: IPMI message handler:
         device id demangle failed: -22
      [Wed Sep  9 19:52:03 2020] IPMI BT: using default values
      [Wed Sep  9 19:52:03 2020] IPMI BT: req2rsp=5 secs retries=2
      [Wed Sep  9 19:52:03 2020] ipmi_si IPI0001:00: Unable to get the
         device id: -5
      [Wed Sep  9 19:52:04 2020] ipmi_si IPI0001:00: Unable to register
         device: error -5
    
    When this issue happens, we want to manually unload the driver and try to
    load it again, but it can't be unloaded by 'rmmod' as it is already 'in
    use'.
    
    We add a print in handle_one_recv_msg(), when this issue happens,
    the msg we received is "Recv: 1c 01 d5", which means the data_len is 1,
    data[0] is 0xd5 (completion code), which means "bmc cannot execute
    command.  Command, or request parameter(s), not supported in present
    state".  Debug code:
    	static int handle_one_recv_msg(struct ipmi_smi *intf,
                                   struct ipmi_smi_msg *msg) {
            	printk("Recv: %*ph\n", msg->rsp_size, msg->rsp);
    		... ...
    	}
    Then in ipmi_demangle_device_id(), it returned '-EINVAL' as 'data_len < 7'
    and 'data[0] != 0'.
    
    We created this patch to retry the get device id when this error
    happens.  We reproduced this issue again and the retry succeed on the
    first retry, we finally got the correct msg and then all is ok:
    Recv: 1c 01 00 01 81 05 84 02 af db 07 00 01 00 b9 00 10 00
    
    So use a retry machanism in this patch to give bmc more opportunity to
    correctly response kernel when we received specific completion codes.
    Signed-off-by: default avatarXianting Tian <tian.xianting@h3c.com>
    Message-Id: <20200915071817.4484-1-tian.xianting@h3c.com>
    [Cleaned up the verbage a bit in the header and prints.]
    Signed-off-by: default avatarCorey Minyard <cminyard@mvista.com>
    f8910ffa
ipmi_msghandler.c 131 KB