diff options
author | Andres Lugo-Reyes <aalugore@us.ibm.com> | 2015-05-20 14:12:35 -0500 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2015-07-02 13:38:01 -0500 |
commit | ad46bacd1b73e03203bbee12ce94867f0b291f57 (patch) | |
tree | 60f578c664b2bd831597aeea944dd100be75ff23 /src/usr | |
parent | e70e9e57950904ae9d137df53961498c3e286295 (diff) | |
download | talos-hostboot-ad46bacd1b73e03203bbee12ce94867f0b291f57.tar.gz talos-hostboot-ad46bacd1b73e03203bbee12ce94867f0b291f57.zip |
Ignore info/recovered logs in OpenPower boxes
Change-Id: Icb6f8b39ee7ab299f4292ac2d775adaf9c16721b
RTC:126449
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/17807
Tested-by: Jenkins Server
Tested-by: Jenkins OP Build CI
Tested-by: Jenkins OP HW
Reviewed-by: Brian H. Horton <brianh@linux.ibm.com>
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr')
-rw-r--r-- | src/usr/errl/errlentry.C | 3 | ||||
-rw-r--r-- | src/usr/errl/errlmanager.C | 77 | ||||
-rw-r--r-- | src/usr/errl/errlmanager_common.C | 9 | ||||
-rw-r--r-- | src/usr/errldisplay/errldisplay.C | 106 | ||||
-rw-r--r-- | src/usr/targeting/common/xmltohb/attribute_types.xml | 7 | ||||
-rw-r--r-- | src/usr/targeting/common/xmltohb/attribute_types_hb.xml | 40 | ||||
-rw-r--r-- | src/usr/targeting/common/xmltohb/target_types.xml | 1 |
7 files changed, 177 insertions, 66 deletions
diff --git a/src/usr/errl/errlentry.C b/src/usr/errl/errlentry.C index 07dd5b78a..a1f4c1193 100644 --- a/src/usr/errl/errlentry.C +++ b/src/usr/errl/errlentry.C @@ -181,7 +181,8 @@ ErrlEntry::ErrlEntry(const errlSeverity_t i_sev, // iv_Src assigns the epubSubSystem_t; example, 80 in SRC B180xxxx iv_Src( SRC_ERR_INFO, i_modId, i_reasonCode, i_user1, i_user2 ), iv_termState(TERM_STATE_UNKNOWN), - iv_sevFinal(false) + iv_sevFinal(false), + iv_skipShowingLog(true) { #ifdef CONFIG_ERRL_ENTRY_TRACE TRACDCOMP( g_trac_errl, ERR_MRK"Error created : PLID=%.8X, RC=%.4X, Mod=%.2X, Userdata=%.16X %.16X", plid(), i_reasonCode, i_modId, i_user1, i_user2 ); diff --git a/src/usr/errl/errlmanager.C b/src/usr/errl/errlmanager.C index f1aa208be..ede3c398f 100644 --- a/src/usr/errl/errlmanager.C +++ b/src/usr/errl/errlmanager.C @@ -61,6 +61,10 @@ extern trace_desc_t* g_trac_errl; // Store error logs in this memory buffer in L3 RAM. char* g_ErrlStorage = new char[ ERRL_STORAGE_SIZE ]; +// Allow Hidden error logs to be shown by default +uint8_t ErrlManager::iv_hiddenErrLogsEnable = + TARGETING::HIDDEN_ERRLOGS_ENABLE_ALLOW_ALL_LOGS; + /** * @brief * In storage, the flattened error logs are interspersed with "markers." @@ -264,6 +268,11 @@ void ErrlManager::errlogMsgHndlr () // do we NOT need to send the error? TARGETING::Target * sys = NULL; TARGETING::targetService().getTopLevelTarget( sys ); + + // set whether we want to skip certain error logs or not. + iv_hiddenErrLogsEnable = + sys->getAttr<TARGETING::ATTR_HIDDEN_ERRLOGS_ENABLE>(); + TARGETING::SpFunctions spfn; if (!(sys && @@ -426,6 +435,55 @@ void ErrlManager::errlogMsgHndlr () // error log handle to pass along errlHndl_t l_err = (errlHndl_t) theMsg->extra_data; + // Decide if we need to skip the error log + // Note: iv_skipShowingLog is set to True by default + //0 = Prevent INFORMATIONAL/RECOVERED error logs from being processed. + //1 = Send only INFORMATIONAL error logs. + //2 = Send only RECOVERED error logs. + //3 = Allow all hidden error logs to be processed. + + //Check severity + switch (l_err->sev()) + { + case ERRORLOG::ERRL_SEV_INFORMATIONAL: + + // check if we are allowing info logs through. + if((iv_hiddenErrLogsEnable == + TARGETING:: + HIDDEN_ERRLOGS_ENABLE_ALLOW_INFORMATIONAL)|| + (iv_hiddenErrLogsEnable == + TARGETING:: + HIDDEN_ERRLOGS_ENABLE_ALLOW_ALL_LOGS)) + { + l_err->setSkipShowingLog(false); + } + break; + + case ERRORLOG::ERRL_SEV_RECOVERED: + + // check if we are allowing recovered logs through. + if(((iv_hiddenErrLogsEnable == + TARGETING:: + HIDDEN_ERRLOGS_ENABLE_ALLOW_RECOVERED) || + (iv_hiddenErrLogsEnable == + TARGETING:: + HIDDEN_ERRLOGS_ENABLE_ALLOW_ALL_LOGS)) && + !iv_isSpBaseServices) + { + //Recovered error logs that are encountered + //before targeting and initservice are loaded, + //will still be queued for sending to PNOR/IPMI + l_err->setSkipShowingLog(false); + } + break; + + default: + + // For any error log that is not INFORMATIONAL + // or RECOVERED, we want to show the log + l_err->setSkipShowingLog(false); + } + // Ask the ErrlEntry to assign commit component, commit time l_err->commit( (compId_t) theMsg->data[0] ); @@ -1131,15 +1189,15 @@ bool ErrlManager::saveErrLogToPnor( errlHndl_t& io_err) bool rc = false; TRACFCOMP( g_trac_errl, ENTER_MRK"saveErrLogToPnor eid=%.8x", io_err->eid()); - // actually, if it's an INFORMATIONAL log, we don't want to waste the write - // cycles, so we'll just 'say' that we saved it and go on. - if (io_err->sev() == ERRORLOG::ERRL_SEV_INFORMATIONAL) - { - TRACDCOMP( g_trac_errl, INFO_MRK"saveErrLogToPnor: INFORMATIONAL log, skipping"); - rc = true; - } - else + do { + // Decide whether or not to skip error log + if( io_err->getSkipShowingLog() ) + { + TRACFCOMP( g_trac_errl, INFO_MRK"saveErrLogToPnor: INFORMATIONAL/RECOVERED log, skipping"); + break; + } + // save our current slot, and see if there's an open slot uint32_t l_previousSlot = iv_pnorOpenSlot; // in case flatten fails @@ -1183,7 +1241,8 @@ bool ErrlManager::saveErrLogToPnor( errlHndl_t& io_err) rc = true; } // else no open slot - return false - } + } while( 0 ); + TRACFCOMP( g_trac_errl, EXIT_MRK"saveErrLogToPnor returning %s", rc ? "true" : "false"); return rc; diff --git a/src/usr/errl/errlmanager_common.C b/src/usr/errl/errlmanager_common.C index fb4175092..52e3f82ec 100644 --- a/src/usr/errl/errlmanager_common.C +++ b/src/usr/errl/errlmanager_common.C @@ -42,15 +42,14 @@ void ErrlManager::sendErrLogToBmc(errlHndl_t &io_err) do { - // if it's an INFORMATIONAL log, we don't want to waste the cycles - if (io_err->sev() == ERRORLOG::ERRL_SEV_INFORMATIONAL) + // Decide whether we want to skip the error log + if( io_err->getSkipShowingLog() ) { - TRACFCOMP( g_trac_errl, INFO_MRK - "sendErrLogToBmc: %.8X is INFORMATIONAL; skipping", + TRACDCOMP( g_trac_errl, INFO_MRK + "sendErrLogToBmc: %.8X is INFORMATIONAL/RECOVERED; skipping", io_err->eid()); break; } - // look thru the errlog for any Callout UserDetail sections // to determine the sensor information for the SEL uint8_t l_sensorNumber = TARGETING::UTIL::INVALID_IPMI_SENSOR; diff --git a/src/usr/errldisplay/errldisplay.C b/src/usr/errldisplay/errldisplay.C index 4e2c73cae..8fa38224d 100644 --- a/src/usr/errldisplay/errldisplay.C +++ b/src/usr/errldisplay/errldisplay.C @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2013,2014 */ +/* Contributors Listed Below - COPYRIGHT 2013,2015 */ /* [+] Google Inc. */ /* [+] International Business Machines Corp. */ /* */ @@ -51,13 +51,13 @@ // I n c l u d e s /*****************************************************************************/ #include <trace/interface.H> +#include <errldisplay/errldisplay.H> #include <errl/errlmanager.H> #include <errl/errlentry.H> #include <errl/errlud.H> #include <errl/errludtarget.H> #include <errl/errlsctn.H> #include <errl/errlreasoncodes.H> -#include <errldisplay/errldisplay.H> #include <stdlib.h> #include <string.h> #include <initservice/taskargs.H> @@ -301,58 +301,68 @@ void ErrLogDisplay::msgDisplay (const errlHndl_t &i_err, { TRACDCOMP( g_trac_errldisp, ENTER_MRK "ErrLogDisplay::msgDisplay" ); - const errLogInfo *info = findErrLogInfo ( i_err->moduleId(), - i_err->reasonCode()); - CONSOLE::displayf(NULL, - "================================================"); - CONSOLE::displayf(NULL, "Error reported by %s (0x%04X)", - findComponentName( i_committerComp ), - i_committerComp ); - CONSOLE::displayf(NULL, " %s", info->descriptString); - CONSOLE::displayf(NULL, " ModuleId 0x%02x %s", - i_err->moduleId(), info->moduleName); - CONSOLE::displayf(NULL, " ReasonCode 0x%04x %s", - i_err->reasonCode(), info->reasonString); - CONSOLE::displayf(NULL, " UserData1 %s : 0x%016lx", - info->userData1String, i_err->getUserData1()); - CONSOLE::displayf(NULL, " UserData2 %s : 0x%016lx", - info->userData2String, i_err->getUserData2()); - - // Loop through and print all of the user data sections. - for ( size_t i = 0; i < i_err->iv_SectionVector.size(); ++i ) + do { - ERRORLOG::ErrlUD *user_data = i_err->iv_SectionVector[i]; - CONSOLE::displayf(NULL, "User Data Section %d, type %c%c", (int) i, - (user_data->iv_header.iv_sid >> 8) & 0xff, - user_data->iv_header.iv_sid & 0xff ); - CONSOLE::displayf(NULL, " Subsection type 0x%02x", - user_data->iv_header.iv_sst ); - CONSOLE::displayf(NULL, " ComponentId %s (0x%04x)", - findComponentName( user_data->iv_header.iv_compId ), - user_data->iv_header.iv_compId ); - switch ( user_data->iv_header.iv_sst ) + // Decide whether or not to skip the error log + if( i_err->getSkipShowingLog() ) { - case ERRORLOG::ERRL_UDT_TARGET: - CONSOLE::displayf(NULL, " TARGET" ); - displayTarget( user_data->iv_pData, user_data->iv_Size ); - break; - case ERRORLOG::ERRL_UDT_CALLOUT: - CONSOLE::displayf(NULL, " CALLOUT" ); - displayCallout( user_data->iv_pData, user_data->iv_Size ); - break; - case ERRORLOG::ERRL_UDT_STRING: - CONSOLE::displayf(NULL, " STRING" ); - CONSOLE::displayf(NULL, - " %s", - reinterpret_cast<char*>( user_data->iv_pData ) ); - break; + TRACDCOMP( g_trac_errldisp, INFO_MRK"msgDisplay: %.8X is INFORMATIONAL/RECOVERED; skipping...", i_err->eid()); + break; + } + const errLogInfo *info = findErrLogInfo ( i_err->moduleId(), + i_err->reasonCode()); + + CONSOLE::displayf(NULL, + "================================================"); + CONSOLE::displayf(NULL, "Error reported by %s (0x%04X)", + findComponentName( i_committerComp ), + i_committerComp ); + CONSOLE::displayf(NULL, " %s", info->descriptString); + CONSOLE::displayf(NULL, " ModuleId 0x%02x %s", + i_err->moduleId(), info->moduleName); + CONSOLE::displayf(NULL, " ReasonCode 0x%04x %s", + i_err->reasonCode(), info->reasonString); + CONSOLE::displayf(NULL, " UserData1 %s : 0x%016lx", + info->userData1String, i_err->getUserData1()); + CONSOLE::displayf(NULL, " UserData2 %s : 0x%016lx", + info->userData2String, i_err->getUserData2()); + + // Loop through and print all of the user data sections. + for ( size_t i = 0; i < i_err->iv_SectionVector.size(); ++i ) + { + ERRORLOG::ErrlUD *user_data = i_err->iv_SectionVector[i]; + CONSOLE::displayf(NULL, "User Data Section %d, type %c%c", (int) i, + (user_data->iv_header.iv_sid >> 8) & 0xff, + user_data->iv_header.iv_sid & 0xff ); + CONSOLE::displayf(NULL, " Subsection type 0x%02x", + user_data->iv_header.iv_sst ); + CONSOLE::displayf(NULL, " ComponentId %s (0x%04x)", + findComponentName( user_data->iv_header.iv_compId ), + user_data->iv_header.iv_compId ); + switch ( user_data->iv_header.iv_sst ) + { + case ERRORLOG::ERRL_UDT_TARGET: + CONSOLE::displayf(NULL, " TARGET" ); + displayTarget( user_data->iv_pData, user_data->iv_Size ); + break; + case ERRORLOG::ERRL_UDT_CALLOUT: + CONSOLE::displayf(NULL, " CALLOUT" ); + displayCallout( user_data->iv_pData, user_data->iv_Size ); + break; + case ERRORLOG::ERRL_UDT_STRING: + CONSOLE::displayf(NULL, " STRING" ); + CONSOLE::displayf(NULL, + " %s", + reinterpret_cast<char*>( user_data->iv_pData ) ); + break; + } } - } - CONSOLE::displayf(NULL, + CONSOLE::displayf(NULL, "================================================" ); - CONSOLE::flush(); + CONSOLE::flush(); + }while( 0 ); TRACDCOMP( g_trac_errldisp, EXIT_MRK "ErrLogDisplay::msgDisplay" ); } diff --git a/src/usr/targeting/common/xmltohb/attribute_types.xml b/src/usr/targeting/common/xmltohb/attribute_types.xml index d1cce5b86..9eae63e10 100644 --- a/src/usr/targeting/common/xmltohb/attribute_types.xml +++ b/src/usr/targeting/common/xmltohb/attribute_types.xml @@ -12071,7 +12071,7 @@ firmware notes: Platforms should initialize this attribute to AUTO (0)</descript <description> MFG_Guard policy: Used in MFG only to prevent and disable the following: - . Storing or creation of new Guard records from Diagnostic or other + . Storing or creation of new Guard records from Diagno`stic or other faults through error logs. This is all domains, CEC processor/memory, VPD, FSP, etc. . Storing or creation of Manual Guard record from user. @@ -15463,10 +15463,11 @@ firmware notes: Platforms should initialize this attribute to AUTO (0)</descript <default>0</default> </uint8_t> </simpleType> - <persistency>non-volatile</persistency> - <readable/> + <persistency>non-volatile</persistency> + <readable/> </attribute> + <attribute> <id>BRAZOS_RX_FIFO_OVERRIDE</id> <description> diff --git a/src/usr/targeting/common/xmltohb/attribute_types_hb.xml b/src/usr/targeting/common/xmltohb/attribute_types_hb.xml index ff0109eea..87839cb9a 100644 --- a/src/usr/targeting/common/xmltohb/attribute_types_hb.xml +++ b/src/usr/targeting/common/xmltohb/attribute_types_hb.xml @@ -31,6 +31,46 @@ Contains the definition of hostboot attributes which should not be synced to/from FSP ================================================================= --> +<attribute> + <id>HIDDEN_ERRLOGS_ENABLE</id> + <description> + Used to decide whether or not to prevent INFORMATIONAL/RECOVERED error + logs from being sent to the BMC via SEL/eSEL, saved to the PNOR, and + displayed to the console. + 0 = Prevent INFORMATIONAL/RECOVERED error logs from being processed. + 1 = Send only INFORMATIONAL error logs. + 2 = Send only RECOVERED error logs. + 3 = Allow all hidden error logs to be processed. + </description> + <simpleType> + <uint8_t> + <default>0</default> + </uint8_t> + </simpleType> + <persistency>volatile</persistency> + <readable/> +</attribute> + +<enumerationType> + <id>HIDDEN_ERRLOGS_ENABLE</id> + <description>Enumeration of HIDDEN_ERRLOGS_ENABLE</description> + <enumerator> + <name>NO_HIDDEN_LOGS</name> + <value>0</value> + </enumerator> + <enumerator> + <name>ALLOW_INFORMATIONAL</name> + <value>1</value> + </enumerator> + <enumerator> + <name>ALLOW_RECOVERED</name> + <value>2</value> + </enumerator> + <enumerator> + <name>ALLOW_ALL_LOGS</name> + <value>3</value> + </enumerator> +</enumerationType> <attribute> <id>IS_MPIPL_HB</id> diff --git a/src/usr/targeting/common/xmltohb/target_types.xml b/src/usr/targeting/common/xmltohb/target_types.xml index 6506a7a2a..c3034ef36 100644 --- a/src/usr/targeting/common/xmltohb/target_types.xml +++ b/src/usr/targeting/common/xmltohb/target_types.xml @@ -305,6 +305,7 @@ <attribute><id>FRU_ID</id></attribute> <attribute><id>BMC_FRU_ID</id></attribute> <attribute><id>BRAZOS_RX_FIFO_OVERRIDE</id></attribute> + <attribute><id>HIDDEN_ERRLOGS_ENABLE</id></attribute> </targetType> <targetType> |