diff options
author | Vasant Hegde <hegdevasant@linux.vnet.ibm.com> | 2019-02-06 11:44:13 +0530 |
---|---|---|
committer | Stewart Smith <stewart@linux.ibm.com> | 2019-02-20 00:33:07 -0600 |
commit | 01f977c33d46f35ae6735c874d415a793d7bd9af (patch) | |
tree | d27bdd6134965d6952f29f329df77f630cf3082c /core | |
parent | fdd27ca27231e1b128b6cfbc5d8786fe54861cdd (diff) | |
download | skiboot-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.c | 2 |
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); |