From: Matt Fleming <[email protected]> When the BMC does not respond to a "Get Device ID" command, the wait_event() in __get_device_id() blocks forever in TASK_UNINTERRUPTIBLE while holding bmc->dyn_mutex. Every subsequent sysfs reader then piles up in D state. Replace with wait_event_timeout() to return -EIO after 1 second.
Signed-off-by: Matt Fleming <[email protected]> --- drivers/char/ipmi/ipmi_msghandler.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_msghandler.c index c41f51c82edd..efa9588e8210 100644 --- a/drivers/char/ipmi/ipmi_msghandler.c +++ b/drivers/char/ipmi/ipmi_msghandler.c @@ -2599,7 +2599,13 @@ static int __get_device_id(struct ipmi_smi *intf, struct bmc_device *bmc) if (rv) goto out_reset_handler; - wait_event(intf->waitq, bmc->dyn_id_set != 2); + if (!wait_event_timeout(intf->waitq, bmc->dyn_id_set != 2, + msecs_to_jiffies(1000))) { + dev_warn(intf->si_dev, + "Timed out waiting for get bmc device id response\n"); + rv = -EIO; + goto out_reset_handler; + } if (!bmc->dyn_id_set) { if (bmc->cc != IPMI_CC_NO_ERROR && -- 2.43.0 _______________________________________________ Openipmi-developer mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/openipmi-developer
