aboutsummaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorVasant Hegde <hegdevasant@linux.vnet.ibm.com>2019-02-06 11:44:13 +0530
committerStewart Smith <stewart@linux.ibm.com>2019-02-20 00:33:07 -0600
commit01f977c33d46f35ae6735c874d415a793d7bd9af (patch)
treed27bdd6134965d6952f29f329df77f630cf3082c /core
parentfdd27ca27231e1b128b6cfbc5d8786fe54861cdd (diff)
downloadskiboot-01f977c33d46f35ae6735c874d415a793d7bd9af.zip
skiboot-01f977c33d46f35ae6735c874d415a793d7bd9af.tar.gz
skiboot-01f977c33d46f35ae6735c874d415a793d7bd9af.tar.bz2
hw/bt: Add backend interface to disable ipmi message retry option
During boot OPAL makes IPMI_GET_BT_CAPS call to BMC to get BT interface capabilities which includes IPMI message max resend count, message timeout, etc,. Most of the time OPAL gets response from BMC within specified timeout. In some corner cases (like mboxd daemon reset in BMC, BMC reboot, etc) OPAL may not get response within timeout period. In such scenarios, OPAL resends message until max resend count reaches. OPAL uses synchronous IPMI message (ipmi_queue_msg_sync()) for few operations like flash read, write, etc. Thread will wait in OPAL until it gets response from BMC. In some corner cases like BMC reboot, thread may wait in OPAL for long time (more than 20 seconds) and results in kernel hardlockup. This patch introduces new interface to disable message resend option. We will disable message resend option for synchrous message. This will greatly reduces kernel hardlock up issues. This is short term fix. Long term solution is to convert all synchronous messages to asynhrounous one. Signed-off-by: Vasant Hegde <hegdevasant@linux.vnet.ibm.com> Signed-off-by: Stewart Smith <stewart@linux.ibm.com>
Diffstat (limited to 'core')
-rw-r--r--core/ipmi.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/core/ipmi.c b/core/ipmi.c
index 5cdc924..6770b43 100644
--- a/core/ipmi.c
+++ b/core/ipmi.c
@@ -176,6 +176,8 @@ void ipmi_queue_msg_sync(struct ipmi_msg *msg)
lock(&sync_lock);
while (sync_msg);
sync_msg = msg;
+ if (msg->backend->disable_retry)
+ msg->backend->disable_retry(msg);
ipmi_queue_msg(msg);
unlock(&sync_lock);