diff options
| author | Nick Bofferding <bofferdn@us.ibm.com> | 2018-07-09 17:56:05 -0500 |
|---|---|---|
| committer | William G. Hoffa <wghoffa@us.ibm.com> | 2018-07-17 17:18:04 -0400 |
| commit | 928ef690c0862878a457a965984ab90efaba3a00 (patch) | |
| tree | 55592d36bebe2dfccb88d96fa505bf52704ddabe /src/usr/ipmi | |
| parent | 38834a9cad0bb0929dab348745c296956c71b511 (diff) | |
| download | blackbird-hostboot-928ef690c0862878a457a965984ab90efaba3a00.tar.gz blackbird-hostboot-928ef690c0862878a457a965984ab90efaba3a00.zip | |
Send errors from previous boots as callhome type eSELs
During early boot, Hostboot attempts to resend unacknowledged error
logs from prior boots as eSELS, without correponding SELs. BMCs typically
require both in order to expose a given error log to a customer. This change
morphs errors from prior boots into callhome type logs, so that a simple eSEL
will be enough to get the error propagated.
Change-Id: If499defe8a39b9254f08392b264d72047b7e5f7c
CQ: SW426731
RTC: 193265
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/62079
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Reviewed-by: William G. Hoffa <wghoffa@us.ibm.com>
Diffstat (limited to 'src/usr/ipmi')
| -rw-r--r-- | src/usr/ipmi/ipmisel.C | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/src/usr/ipmi/ipmisel.C b/src/usr/ipmi/ipmisel.C index cbd9522c4..da8d7b38f 100644 --- a/src/usr/ipmi/ipmisel.C +++ b/src/usr/ipmi/ipmisel.C @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2014,2017 */ +/* Contributors Listed Below - COPYRIGHT 2014,2018 */ /* [+] Google Inc. */ /* [+] International Business Machines Corp. */ /* */ @@ -103,14 +103,18 @@ void sendESEL(uint8_t* i_eselData, uint32_t i_dataSize, msg_t *msg = msg_allocate(); #endif msg->type = MSG_SEND_ESEL; - msg->data[0] = i_eid; + auto * const pData = reinterpret_cast<send_esel_data_t*> + (msg->data); + pData->callhome=i_infoCallHome; + pData->eid=i_eid; + eselInitData *eselData = new eselInitData(i_selEventList, i_eselData, i_dataSize); msg->extra_data = eselData; #ifdef __HOSTBOOT_RUNTIME - process_esel(msg, i_infoCallHome); + process_esel(msg); #else // one message queue to the SEL thread static msg_q_t mq = Singleton<IpmiSEL>::instance().msgQueue(); @@ -130,11 +134,17 @@ void sendESEL(uint8_t* i_eselData, uint32_t i_dataSize, /* * @brief process esel msg */ -void process_esel(msg_t *i_msg, bool i_infoCallHome) +void process_esel(msg_t *i_msg) { errlHndl_t l_err = NULL; IPMI::completion_code l_cc = IPMI::CC_UNKBAD; - const uint32_t l_eid = i_msg->data[0]; + + assert(i_msg != nullptr,"i_msg was nullptr"); + const auto * const pData = reinterpret_cast<const send_esel_data_t*> + (i_msg->data); + const auto callhome = pData->callhome; + const auto l_eid = pData->eid; + eselInitData * l_data = (eselInitData*)(i_msg->extra_data); IPMI_TRAC(ENTER_MRK "process_esel"); @@ -181,7 +191,7 @@ void process_esel(msg_t *i_msg, bool i_infoCallHome) while (l_send_count > 0) { // try to send the esel to the bmc - send_esel(l_data, l_err, l_cc, i_infoCallHome); + send_esel(l_data, l_err, l_cc, callhome); // if no error but last completion code was: if ((l_err == NULL) && @@ -555,7 +565,7 @@ void IpmiSEL::execute(void) switch(msg_type) { case IPMISEL::MSG_SEND_ESEL: - IPMISEL::process_esel(msg, false); + IPMISEL::process_esel(msg); //done with msg msg_free(msg); break; |

