diff options
author | Brian Horton <brianh@linux.ibm.com> | 2013-05-03 09:58:27 -0500 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2013-06-03 11:15:36 -0500 |
commit | cf0ce1fae5dbdb9586146bf21c3e56d3a21baa9d (patch) | |
tree | 463782a4d63f5740d0a93bb0a331523b615a2d7c /src/usr/hwas/hostbootIstep.C | |
parent | cc5acf567b1c2d29b03e493b3a3c4a834d8f9928 (diff) | |
download | talos-hostboot-cf0ce1fae5dbdb9586146bf21c3e56d3a21baa9d.tar.gz talos-hostboot-cf0ce1fae5dbdb9586146bf21c3e56d3a21baa9d.zip |
only apply EX gard records on MPIPL.
hostboot istep 6.6 calls collectGard(), and this should be done with
a predicate for EX targets only if it is during an MPIPL.
Change-Id: Ia68661c10c0fdbfbdbb6ddcb6637b02216d52f66
RTC: 70939
Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/4345
Tested-by: Jenkins Server
Reviewed-by: MIKE J. JONES <mjjones@us.ibm.com>
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr/hwas/hostbootIstep.C')
-rw-r--r-- | src/usr/hwas/hostbootIstep.C | 57 |
1 files changed, 45 insertions, 12 deletions
diff --git a/src/usr/hwas/hostbootIstep.C b/src/usr/hwas/hostbootIstep.C index 4e5b900de..9205e03fc 100644 --- a/src/usr/hwas/hostbootIstep.C +++ b/src/usr/hwas/hostbootIstep.C @@ -87,10 +87,7 @@ void* host_discover_targets( void *io_pArgs ) // Check whether we're in MPIPL mode using namespace TARGETING; Target* l_pTopLevel = NULL; - uint8_t l_attrIsMpipl = 0; - - TargetService& l_targetService = targetService(); - l_targetService.getTopLevelTarget( l_pTopLevel ); + targetService().getTopLevelTarget( l_pTopLevel ); if( l_pTopLevel == NULL ) { @@ -111,20 +108,16 @@ void* host_discover_targets( void *io_pArgs ) } else { - l_attrIsMpipl = l_pTopLevel->getAttr<ATTR_IS_MPIPL_HB> (); - - if (l_attrIsMpipl) + if (l_pTopLevel->getAttr<ATTR_IS_MPIPL_HB>()) { - TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, - "MPIPL mode" ); + TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, "MPIPL mode"); // Sync attributes from Fsp errl = syncAllAttributesFromFsp(); } else { - TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, - "Normal IPL mode" ); + TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, "Normal IPL mode"); errl = discoverTargets(); } @@ -143,8 +136,48 @@ void* host_gard( void *io_pArgs ) { TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "host_gard entry" ); - errlHndl_t errl = collectGard(); + errlHndl_t errl; + + // Check whether we're in MPIPL mode + using namespace TARGETING; + Target* l_pTopLevel = NULL; + targetService().getTopLevelTarget( l_pTopLevel ); + + if( l_pTopLevel == NULL ) + { + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "Top level handle was NULL" ); + + /*@ + * @errortype + * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE + * @moduleid HWAS::MOD_HOST_GARD + * @reasoncode HWAS::RC_TOP_LEVEL_TARGET_NULL + * @devdesc Call to get top level targeting handle + * returned NULL + */ + errl = hwasError( ERRORLOG::ERRL_SEV_UNRECOVERABLE, + HWAS::MOD_HOST_GARD, + HWAS::RC_TOP_LEVEL_TARGET_NULL ); + } + else + { + if (l_pTopLevel->getAttr<ATTR_IS_MPIPL_HB>()) + { + TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, "MPIPL mode"); + + // we only want EX units to be processed + TARGETING::PredicateCTM l_exFilter(TARGETING::CLASS_UNIT, + TARGETING::TYPE_EX); + errl = collectGard(&l_exFilter); + } + else + { + TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, "Normal IPL mode"); + errl = collectGard(); + } + } TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "host_gard exit" ); return errl; |