diff options
author | Brian Horton <brianh@linux.ibm.com> | 2014-12-04 13:56:52 -0600 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2015-01-16 14:03:14 -0600 |
commit | fc7f56da0dd87cfb82433efb1f89a204914aface (patch) | |
tree | 3e70aa28c9c43ced1fcc3856344dc23b2f78c5ca /src/usr/errl | |
parent | 5236a087c01445bf80b7883e7cb9bd50540ce138 (diff) | |
download | blackbird-hostboot-fc7f56da0dd87cfb82433efb1f89a204914aface.tar.gz blackbird-hostboot-fc7f56da0dd87cfb82433efb1f89a204914aface.zip |
Send un-ACK'ed error logs in PNOR down to the BMC
when the errlmanager thread starts, it looks at all error logs in
PNOR; any that were not ACK'ed during the previous IPL (meaning
they were not confirmed as to have been processed by the BMC) will
be put into the queue to be sent down once BMC contact has been setup.
Change-Id: Ifef5a797eb53a1f28deefc90177dd958648e0210
RTC: 116461
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/14738
Tested-by: Jenkins Server
Reviewed-by: STEPHEN M. CPREK <smcprek@us.ibm.com>
Reviewed-by: Elizabeth Liner <eliner@us.ibm.com>
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr/errl')
-rw-r--r-- | src/usr/errl/errlentry.C | 5 | ||||
-rw-r--r-- | src/usr/errl/errlmanager.C | 43 |
2 files changed, 42 insertions, 6 deletions
diff --git a/src/usr/errl/errlentry.C b/src/usr/errl/errlentry.C index 4e978eb59..c8e1ac282 100644 --- a/src/usr/errl/errlentry.C +++ b/src/usr/errl/errlentry.C @@ -5,9 +5,9 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2011,2014 */ -/* [+] International Business Machines Corp. */ +/* Contributors Listed Below - COPYRIGHT 2011,2015 */ /* [+] Google Inc. */ +/* [+] International Business Machines Corp. */ /* */ /* */ /* Licensed under the Apache License, Version 2.0 (the "License"); */ @@ -1351,6 +1351,7 @@ uint64_t ErrlEntry::flatten( void * o_pBuffer, { // some section was too big and didn't get flatten - update the // section count in the PH section and re-flatten it. + // count is the PH, UH, PS, and the optionals. iv_Private.iv_sctns = 3 + l_sectionCount; l_cb = iv_Private.flatten( pPHBuffer, l_sizeRemaining ); if( 0 == l_cb ) diff --git a/src/usr/errl/errlmanager.C b/src/usr/errl/errlmanager.C index 3408aaf99..24209326c 100644 --- a/src/usr/errl/errlmanager.C +++ b/src/usr/errl/errlmanager.C @@ -932,13 +932,48 @@ void ErrlManager::setupPnorInfo() // save will increment correctly iv_pnorOpenSlot = i; } - // also check if it's ACKed or not. and ACK it. - // for FSP system, this shouldn't ever happen. - // for non-FSP systems, this clears out all 'last IPL' logs + // also check if it's ACKed or not if (!isSlotACKed(i)) { - TRACFCOMP( g_trac_errl, INFO_MRK"setupPnorInfo slot %d eid %.8X was not ACKed.", + TRACFCOMP( g_trac_errl, + INFO_MRK"setupPnorInfo slot %d eid %.8X was not ACKed.", i, l_id); + +#ifdef CONFIG_BMC_IPMI + // for IPMI systems, unflatten to send down to the BMC + err = new ERRORLOG::ErrlEntry( + ERRORLOG::ERRL_SEV_UNRECOVERABLE, 0,0); + char *l_errlAddr = iv_pnorAddr + (PNOR_ERROR_LENGTH * i); + uint64_t rc = err->unflatten(l_errlAddr, PNOR_ERROR_LENGTH); + if (rc != 0) + { + // unflatten didn't work, nothing we can do + TRACFCOMP( g_trac_errl, + ERR_MRK"setupPnorInfo unflatten failed on slot %d eid %.8X.", + i, l_id); + } + else + { + if (iv_isIpmiEnabled) + { + // convert to SEL/eSEL and send to BMC over IPMI + sendErrLogToBmc(err); + delete err; + } + else + { + TRACFCOMP( g_trac_errl, + INFO_MRK"setupPnorInfo pushing slot %d eid %.8X to iv_errList.", + i, l_id); + // Pair with IPMI flag to add to the errlList + // so that it'll get sent down when IPMI is up + ErrlFlagPair_t l_pair(err, IPMI_FLAG); + iv_errlList.push_back(l_pair); + } + } +#else + // for FSP system, this shouldn't ever happen. +#endif setACKInFlattened(i); } // not ACKed } // not empty |