diff --git a/hw/ipmi/ipmi-sel.c b/hw/ipmi/ipmi-sel.c index 29dcebc59060..bfce043fc4df 100644 --- a/hw/ipmi/ipmi-sel.c +++ b/hw/ipmi/ipmi-sel.c @@ -18,6 +18,7 @@ #include #include #include +#include /* OEM SEL fields */ #define SEL_OEM_ID_0 0x55 @@ -434,10 +435,22 @@ int ipmi_elog_commit(struct errorlog *elog_buf) msg->error = ipmi_elog_error; msg->req_size = 0; - if (elog_buf->event_severity == OPAL_ERROR_PANIC) + if (elog_buf->event_severity == OPAL_ERROR_PANIC) { ipmi_queue_msg_sync(msg); - else + + /* + * eSEL logs are split into multiple smaller chunks and sent + * to BMC. Lets wait until we finish sending all the chunks + * to BMC. + */ + while (ipmi_sel_panic_msg.busy != false) { + if (msg->backend->poll) + msg->backend->poll(); + time_wait_ms(10); + } + } else { ipmi_queue_msg(msg); + } return 0; }