diff options
-rw-r--r-- | src/include/usr/targeting/attrrp.H | 23 | ||||
-rw-r--r-- | src/include/usr/targeting/common/targreasoncodes.H | 3 | ||||
-rw-r--r-- | src/usr/initservice/istepdispatcher/istepdispatcher.C | 10 | ||||
-rwxr-xr-x | src/usr/targeting/attrrp.C | 129 |
4 files changed, 128 insertions, 37 deletions
diff --git a/src/include/usr/targeting/attrrp.H b/src/include/usr/targeting/attrrp.H index b04973230..d4aa6eaec 100644 --- a/src/include/usr/targeting/attrrp.H +++ b/src/include/usr/targeting/attrrp.H @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2012,2018 */ +/* Contributors Listed Below - COPYRIGHT 2012,2019 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -351,6 +351,10 @@ class AttrRP MSG_PRIME_ATTR_SYNC = 0x00000003, // Invoke attribute synchronization MSG_INVOKE_ATTR_SYNC = 0x00000004, + // Shutdown attribute synchronization + MSG_SHUTDOWN_ATTR_SYNC = 0x00000005, + // Attribute overrides and syncs + MSG_ATTR_OVERRIDE_SYNC = 0x00000006, // Sentinel value for when message type is not yet known MSG_INVALID = 0xFFFFFFFF, }; @@ -381,6 +385,13 @@ class AttrRP static errlHndl_t syncAllAttributesToFsp(); /** + * @brief This is a static wrapper around _sendAttrOverridesAndSyncs + * + * @see _sendAttrOverridesAndSyncs for documentation + */ + static errlHndl_t sendAttrOverridesAndSyncs(); + + /** * @brief Modifies the memory R/W permissions on VMM pages for a * given type of AttrRP_Section. Valid types can be found * in the generated file pnorheader.H. Valid permissions @@ -648,6 +659,16 @@ class AttrRP errlHndl_t _syncAllAttributesToFsp() const; /** + * @brief Send attribute overrides and sync down to FSP + * + * @return errlHndl_t Error log handle + * @retval nullptr Send attribute overrides and sync successful + * @retval !nullptr Send attribute overrides and sync failed; handle + * references valid error log + */ + errlHndl_t _sendAttrOverridesAndSyncs() const; + + /** * @brief Sends message of the given type to the attribute resource * provider * diff --git a/src/include/usr/targeting/common/targreasoncodes.H b/src/include/usr/targeting/common/targreasoncodes.H index c5e2882f8..419248b1b 100644 --- a/src/include/usr/targeting/common/targreasoncodes.H +++ b/src/include/usr/targeting/common/targreasoncodes.H @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2012,2018 */ +/* Contributors Listed Below - COPYRIGHT 2012,2019 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -84,6 +84,7 @@ enum TargetingReasonCode TARG_RC_CONCURRENT_CODE_UPDATE_FAIL = TARG_COMP_ID | 0x18, TARG_RC_ATTR_OVER_FAPI_TANK_NOT_SUPPORTED = TARG_COMP_ID | 0x19, TARG_RC_UNSUPPORTED_ATTR_SYNC_MSG = TARG_COMP_ID | 0x1A, + TARG_RC_ATTR_SYNC_SERVICE_DOWN = TARG_COMP_ID | 0x1B, }; }; // End TARGETING namespace diff --git a/src/usr/initservice/istepdispatcher/istepdispatcher.C b/src/usr/initservice/istepdispatcher/istepdispatcher.C index e9915aaf4..e8db88f33 100644 --- a/src/usr/initservice/istepdispatcher/istepdispatcher.C +++ b/src/usr/initservice/istepdispatcher/istepdispatcher.C @@ -2138,7 +2138,15 @@ void IStepDispatcher::handleIStepRequestMsg(msg_t * & io_pMsg) // Send the potentially modified set of Attribute overrides and any // Attributes to sync (to Cronus) to the FSP - fapi2::theAttrOverrideSync().sendAttrOverridesAndSyncsToFsp(); + errlHndl_t l_errl = TARGETING::AttrRP::sendAttrOverridesAndSyncs(); + + if (l_errl) + { + TRACFCOMP(g_trac_initsvc, ERR_MRK + "doIstep: send attr overrides and syncs to FSP" + " failed, see 0x%08X for details", l_errl->eid()); + errlCommit(l_errl, INITSVC_COMP_ID); + } // Transfer ownership of the message pointer back from iv_pIstepMsg mutex_lock(&iv_mutex); diff --git a/src/usr/targeting/attrrp.C b/src/usr/targeting/attrrp.C index 2a9e8c463..1f7c359d7 100755 --- a/src/usr/targeting/attrrp.C +++ b/src/usr/targeting/attrrp.C @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2011,2018 */ +/* Contributors Listed Below - COPYRIGHT 2011,2019 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -167,12 +167,27 @@ namespace TARGETING { TRACFCOMP(g_trac_targeting, ENTER_MRK "AttrRP::_syncAllAttributesToFsp"); - auto pError = _sendAttrSyncMsg(MSG_INVOKE_ATTR_SYNC,true); + auto pError = _sendAttrSyncMsg(MSG_INVOKE_ATTR_SYNC, true); TRACFCOMP(g_trac_targeting, EXIT_MRK "AttrRP::_syncAllAttributesToFsp"); return pError; } + errlHndl_t AttrRP::sendAttrOverridesAndSyncs() + { + return Singleton<AttrRP>::instance()._sendAttrOverridesAndSyncs(); + } + + errlHndl_t AttrRP::_sendAttrOverridesAndSyncs() const + { + TRACFCOMP(g_trac_targeting, ENTER_MRK + "AttrRP::_sendAttrOverridesAndSyncs"); + auto pError = _sendAttrSyncMsg(MSG_ATTR_OVERRIDE_SYNC, true); + TRACFCOMP(g_trac_targeting, EXIT_MRK + "AttrRP::_sendAttrOverridesAndSyncs"); + return pError; + } + errlHndl_t AttrRP::_notifyResourceReady(const RESOURCE i_resource) const { TRACFCOMP(g_trac_targeting, ENTER_MRK @@ -384,7 +399,9 @@ namespace TARGETING // Crash Hostboot if this task dies (void)task_detach(); - errlHndl_t pError=nullptr; + errlHndl_t pError = nullptr; + + bool shutdown_requested = false; TRACFCOMP(g_trac_targeting, ENTER_MRK "AttrRP::attrSyncTask."); @@ -395,7 +412,7 @@ namespace TARGETING // registration happened already. INITSERVICE::registerShutdownEvent(TARG_COMP_ID, iv_attrSyncMsgQ, - MSG_INVOKE_ATTR_SYNC, + MSG_SHUTDOWN_ATTR_SYNC, INITSERVICE::NO_PRIORITY); while(1) { @@ -414,38 +431,82 @@ namespace TARGETING pMsg->type); do { - - switch(pMsg->type) + if (!shutdown_requested) { - case MSG_PRIME_ATTR_SYNC: - { - iv_attrSyncPrimed=true; - TRACFCOMP(g_trac_targeting, INFO_MRK - "AttrRP: attrSyncTask: " - "Attribute provider primed to synchronize " - "attributes."); - } - break; - case MSG_INVOKE_ATTR_SYNC: - { - TRACFCOMP(g_trac_targeting, INFO_MRK - "AttrRP: attrSyncTask: " - "Invoking attribute sync."); + switch(pMsg->type) + { + case MSG_PRIME_ATTR_SYNC: + { + iv_attrSyncPrimed=true; + TRACFCOMP(g_trac_targeting, INFO_MRK + "AttrRP: attrSyncTask: " + "Attribute provider primed to synchronize " + "attributes."); + } + break; + case MSG_INVOKE_ATTR_SYNC: + { + TRACFCOMP(g_trac_targeting, INFO_MRK + "AttrRP: attrSyncTask: " + "Invoking attribute sync."); - pError = _invokeAttrSync(); - } - break; - default: - { - TRACFCOMP(g_trac_targeting,ERR_MRK - "AttrRP: attrSyncTask: " - "Unhandled message type = 0x%08X.", - pMsg->type); - rc = -EINVAL; - } - break; - } + pError = _invokeAttrSync(); + } + break; + case MSG_ATTR_OVERRIDE_SYNC: + { + TRACFCOMP(g_trac_targeting, INFO_MRK + "AttrRP: attrSyncTask: " + "Attr sync and override."); + + fapi2::theAttrOverrideSync(). + sendAttrOverridesAndSyncsToFsp(); + } + break; + case MSG_SHUTDOWN_ATTR_SYNC: + { + TRACFCOMP(g_trac_targeting, INFO_MRK + "AttrRP: attrSyncTask: " + "Shutdown attribute sync."); + pError = _invokeAttrSync(); + shutdown_requested = true; + } + break; + default: + { + TRACFCOMP(g_trac_targeting, ERR_MRK + "AttrRP: attrSyncTask: " + "Unhandled message type = 0x%08X.", + pMsg->type); + rc = -EINVAL; + } + break; + } + } + else if (!msg_is_async(pMsg)) + { + TRACFCOMP(g_trac_targeting, ERR_MRK + "AttrRP: attrSyncTask: " + "Service is down so message can not be handled"); + /*@ + * @errortype + * @moduleid TARG_ATTR_SYNC_TASK + * @reasoncode TARG_RC_ATTR_SYNC_SERVICE_DOWN + * @userdata1 Return code + * @userdata2 Message type + * @devdesc Shutdown just occurred so the mailbox service + * is down. Messages can not be handled at this time. + * @custdesc Tolerated boot firmware error occurred + */ + pError = new ErrlEntry( + ERRL_SEV_INFORMATIONAL, + TARG_ATTR_SYNC_TASK, + TARG_RC_ATTR_SYNC_SERVICE_DOWN, + TO_UINT64(rc), + TO_UINT64(pMsg->type), + ERRORLOG::ErrlEntry::ADD_SW_CALLOUT); + } } while (0); if (rc != 0) @@ -473,7 +534,7 @@ namespace TARGETING if(pError) { plid = pError->plid(); - errlCommit(pError,TARG_COMP_ID); + errlCommit(pError, TARG_COMP_ID); } if(msg_is_async(pMsg)) |