linux/drivers
Xianting Tian f8910ffa81 ipmi:msghandler: retry to get device id on an error
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: Xianting 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: Corey Minyard <cminyard@mvista.com>
2020-09-15 09:57:45 -05:00
..
accessibility TTY/Serial patches for 5.9-rc1 2020-08-06 14:56:11 -07:00
acpi - Add support to enable/disable the thermal zones resulting on core code and 2020-08-06 18:10:55 -07:00
amba
android drivers: android: Fix the SPDX comment style 2020-07-29 17:05:44 +02:00
ata
atm Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next 2020-08-05 20:13:21 -07:00
auxdisplay Minor cleanup for auxdisplay: 2020-08-06 18:09:34 -07:00
base More power management updates for 5.9-rc1 2020-08-07 13:13:09 -07:00
bcma bcma: gpio: Use irqchip template 2020-08-02 18:26:51 +03:00
block pci-v5.9-changes 2020-08-07 18:48:15 -07:00
bluetooth Merge branch 'for-upstream' of git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next 2020-07-31 15:11:52 -07:00
bus MIPS upates for v5.9 2020-08-06 10:54:07 -07:00
cdrom
char ipmi:msghandler: retry to get device id on an error 2020-09-15 09:57:45 -05:00
clk It looks like a smaller batch of clk updates this time around. In the core 2020-08-07 13:35:51 -07:00
clocksource Time, timers and related driver updates: 2020-08-04 18:17:37 -07:00
connector
counter Merge branch 'ib-5.8-tcb' into HEAD 2020-07-22 14:37:23 +01:00
cpufreq Merge branch 'cpufreq/arm/linux-next' of git://git.kernel.org/pub/scm/linux/kernel/git/vireshk/pm 2020-08-04 12:44:53 +02:00
cpuidle powerpc updates for 5.9 2020-08-07 10:33:50 -07:00
crypto Merge branch 'akpm' (patches from Andrew) 2020-08-07 11:39:33 -07:00
dax
dca
devfreq PM / devfreq: Fix the wrong end with semicolon 2020-07-30 17:22:58 +09:00
dio
dma Merge branch 'work.misc' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2020-08-07 21:14:30 -07:00
dma-buf Linux 5.8-rc6 2020-07-24 08:48:05 +10:00
edac 17ed808ad2 ("EDAC: Fix reference count leaks") 2020-08-03 20:01:00 -07:00
eisa
extcon
firewire
firmware Kbuild updates for v5.9 2020-08-09 14:10:26 -07:00
fpga Linux 5.8-rc7 2020-07-27 11:49:37 +02:00
fsi
gnss
gpio This is the bulk of GPIO changes for the v5.9 kernel cycle: 2020-08-05 12:56:27 -07:00
gpu pci-v5.9-changes 2020-08-07 18:48:15 -07:00
greybus greybus: Use fallthrough pseudo-keyword 2020-07-29 16:58:08 +02:00
hid
hsi
hv hyperv-next for 5.9 2020-08-06 09:26:10 -07:00
hwmon hwmon updates for v5.9 2020-08-05 13:13:57 -07:00
hwspinlock
hwtracing coresight: etm4x: Fix save/restore during cpu idle 2020-07-21 15:48:40 +02:00
i2c Remove uninitialized_var() macro for v5.9-rc1 2020-08-04 13:49:43 -07:00
i3c
ide
idle Remove uninitialized_var() macro for v5.9-rc1 2020-08-04 13:49:43 -07:00
iio iio: imu: st_lsm6dsx: reset hw ts after resume 2020-07-22 14:55:43 +01:00
infiniband RDMA 5.9 merge window pull request 2020-08-06 16:43:36 -07:00
input Staging/IIO driver patches for 5.9-rc1 2020-08-06 14:36:13 -07:00
interconnect Char/Misc driver patches for 5.9-rc1 2020-08-05 11:43:47 -07:00
iommu pci-v5.9-changes 2020-08-07 18:48:15 -07:00
ipack
irqchip The usual boring updates from the interrupt subsystem: 2020-08-04 18:11:58 -07:00
isdn mISDN: Don't try to print a sockptr_t from debug logging code. 2020-07-24 16:36:13 -07:00
leds LEDs changes for 5.9-rc1. 2020-08-05 19:24:27 -07:00
lightnvm
macintosh powerpc updates for 5.9 2020-08-07 10:33:50 -07:00
mailbox mailbox: mediatek: cmdq: clear task in channel before shutdown 2020-08-03 23:56:38 -05:00
mcb
md - DM multipath locking fixes around m->flags tests and improvements to 2020-08-07 13:08:09 -07:00
media pci-v5.9-changes 2020-08-07 18:48:15 -07:00
memory MTD core changes: 2020-08-09 12:38:51 -07:00
memstick MMC core: 2020-08-05 13:23:24 -07:00
message
mfd irqdomain/treewide: Free firmware node after domain removal 2020-07-23 00:08:52 +02:00
misc Merge branch 'work.misc' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2020-08-07 21:14:30 -07:00
mmc This tree adds the sched_set_fifo*() encapsulation APIs to remove 2020-08-06 11:55:43 -07:00
most drivers: most: add USB adapter driver 2020-07-31 14:38:12 +02:00
mtd MTD core changes: 2020-08-09 12:38:51 -07:00
mux
net pci-v5.9-changes 2020-08-07 18:48:15 -07:00
nfc nfc: s3fwrn5: add missing release on skb in s3fwrn5_recv_frame 2020-07-20 18:31:33 -07:00
ntb
nubus
nvdimm powerpc updates for 5.9 2020-08-07 10:33:50 -07:00
nvme for-5.9/block-merge-20200804 2020-08-05 11:12:34 -07:00
nvmem nvmem: qcom-spmi-sdam: Enable multiple devices 2020-07-29 17:12:09 +02:00
of MIPS upates for v5.9 2020-08-06 10:54:07 -07:00
opp Merge branch 'cpufreq/arm/linux-next' of git://git.kernel.org/pub/scm/linux/kernel/git/vireshk/pm 2020-08-04 12:44:53 +02:00
oprofile
parisc
parport
pci pci-v5.9-changes 2020-08-07 18:48:15 -07:00
pcmcia
perf It looks like a smaller batch of clk updates this time around. In the core 2020-08-07 13:35:51 -07:00
phy phy for 5.9 2020-07-23 09:52:10 +02:00
pinctrl This is the bulk of the pin control changes for the v5.9 2020-08-09 12:52:28 -07:00
platform - Add support to enable/disable the thermal zones resulting on core code and 2020-08-06 18:10:55 -07:00
pnp
power power supply and reset changes for the v5.9 series 2020-08-07 21:27:37 -07:00
powercap This tree adds the sched_set_fifo*() encapsulation APIs to remove 2020-08-06 11:55:43 -07:00
pps
ps3
ptp ptp: only allow phase values lower than 1 period 2020-08-05 12:06:44 -07:00
pwm
rapidio
ras
regulator Merge remote-tracking branch 'regulator/for-5.9' into regulator-next 2020-07-30 23:27:08 +01:00
remoteproc
reset SOC: TI Keystone driver update for v5.9 2020-07-27 14:24:51 +02:00
rpmsg
rtc
s390 Merge branch 'akpm' (patches from Andrew) 2020-08-07 11:39:33 -07:00
sbus
scsi pci-v5.9-changes 2020-08-07 18:48:15 -07:00
sfi
sh
siox
slimbus
soc Merge branch 'work.misc' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2020-08-07 21:14:30 -07:00
soundwire soundwire updates for 5.9-rc1 2020-07-23 09:12:15 +02:00
spi sound updates for 5.9 2020-08-06 14:27:31 -07:00
spmi
ssb Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next 2020-08-05 20:13:21 -07:00
staging pci-v5.9-changes 2020-08-07 18:48:15 -07:00
target Merge branch 'akpm' (patches from Andrew) 2020-08-07 11:39:33 -07:00
tc
tee
thermal thermal: don't make THERMAL_NETLINK 'default y' 2020-08-07 09:05:02 -07:00
thunderbolt thunderbolt: merge fix for kunix_resource changes 2020-08-09 11:06:10 -07:00
tty TTY/Serial patches for 5.9-rc1 2020-08-06 14:56:11 -07:00
uio
usb media updates for v5.9-rc1 2020-08-07 13:00:53 -07:00
vdpa dma-mapping: make support for dma ops optional 2020-07-19 09:29:23 +02:00
vfio
vhost Remove uninitialized_var() macro for v5.9-rc1 2020-08-04 13:49:43 -07:00
video TTY/Serial patches for 5.9-rc1 2020-08-06 14:56:11 -07:00
virt
virtio Remove uninitialized_var() macro for v5.9-rc1 2020-08-04 13:49:43 -07:00
visorbus
vlynq
vme
w1
watchdog
xen Kbuild updates for v5.9 2020-08-09 14:10:26 -07:00
zorro
Kconfig
Makefile