From ecfc6a3a5aa975d7c72b940f5a5c1d969dfb6712 Mon Sep 17 00:00:00 2001 From: Elliott Dahle Date: Wed, 12 Feb 2014 16:17:24 -0600 Subject: Tul63fp failing on istep hb_config_update of istep 0 Change-Id: Ie3b509b31d3067fe34be7930eb4e1beec4d8383b CQ:SW245920 Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/8806 Tested-by: Jenkins Server Reviewed-by: A. Patrick Williams III --- src/include/usr/hwas/common/deconfigGard.H | 4 + .../common/predicates/predicateisnonfunctional.H | 111 +++++++++++++++++++++ .../usr/targeting/common/predicates/predicates.H | 3 +- src/include/usr/targeting/common/utilFilter.H | 10 +- src/usr/hwas/common/hwas.C | 58 +++++++++++ src/usr/targeting/common/common.mk | 5 +- .../common/predicates/predicateisnonfunctional.C | 75 ++++++++++++++ src/usr/targeting/common/utilFilter.C | 48 ++++++++- 8 files changed, 306 insertions(+), 8 deletions(-) create mode 100644 src/include/usr/targeting/common/predicates/predicateisnonfunctional.H create mode 100644 src/usr/targeting/common/predicates/predicateisnonfunctional.C diff --git a/src/include/usr/hwas/common/deconfigGard.H b/src/include/usr/hwas/common/deconfigGard.H index 12e380813..b33c95dcc 100644 --- a/src/include/usr/hwas/common/deconfigGard.H +++ b/src/include/usr/hwas/common/deconfigGard.H @@ -119,6 +119,10 @@ public: // set for SPCN initiated deconfigure DECONFIGURED_BY_SPCN, // BASE | 0x08 + // set by discoverTargets() when functional children + // are found connected to a non-functional Centaur + DECONFIGURED_BY_NO_PARENT_MEMBUF, // BASE | 0x09 + // mask - these bits mean it's a PLID and not an enum DECONFIGURED_BY_PLID_MASK = 0xFFFF0000, }; diff --git a/src/include/usr/targeting/common/predicates/predicateisnonfunctional.H b/src/include/usr/targeting/common/predicates/predicateisnonfunctional.H new file mode 100644 index 000000000..86b754741 --- /dev/null +++ b/src/include/usr/targeting/common/predicates/predicateisnonfunctional.H @@ -0,0 +1,111 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/include/usr/targeting/common/predicates/predicateisnonfunctional.H $ */ +/* */ +/* IBM CONFIDENTIAL */ +/* */ +/* COPYRIGHT International Business Machines Corp. 2014 */ +/* */ +/* p1 */ +/* */ +/* Object Code Only (OCO) source materials */ +/* Licensed Internal Code Source Materials */ +/* IBM HostBoot Licensed Internal Code */ +/* */ +/* The source code for this program is not published or otherwise */ +/* divested of its trade secrets, irrespective of what has been */ +/* deposited with the U.S. Copyright Office. */ +/* */ +/* Origin: 30 */ +/* */ +/* IBM_PROLOG_END_TAG */ +#ifndef __TARGETING_COMMON_PREDICATEISNONFUNCTIONAL_H +#define __TARGETING_COMMON_PREDICATEISNONFUNCTIONAL_H +/** + * @file targeting/common/predicates/predicateisnonfunctional.H + * + * PredicateIsNonFunctional class, used to filter targets for HWP wrapper. + * From the example tutorial page at + * https://w3-connections.ibm.com/wikis/home?lang=en_US#/wiki/Host%20Boot/page/Target%20And%20Attribute%20Usage%20Guide + * : + * Create Custom Predicate + * Take the following predicate "template" and customize to your needs. + * Make sure to: + * 1) Rename the class in the appropriate places + * 2) Implement the operator() function which should return "true" if + * the given Target matches the predicate criteria, false otherwise + * 3) Add any input arguments to the constructor, and any necessary + * private variables to store state + * 4) Implement the destructor, if needed + * 5) Update documentation + * + * See example in src/include/usr/targeting/predicate/predicatectm.H + * (and usr/targeting/predicate/predicatectm.C) + * + */ + + +/******************************************************************************/ +// Includes +/******************************************************************************/ +#include + +// targeting support. +#include +#include +#include +#include +#include +#include + + +namespace TARGETING +{ + +class PredicateIsNonFunctional : public PredicateBase +{ + +public: + + /** + * @brief Create a predicate to select targets that + * are marked non-functional. + * + * @param[in] i_requirepresent + * Bool indicating whether to select targets which + * are present and non-functional (true)(default), or + * to select all non-functioal targets, regardless of + * present state (false) + */ + PredicateIsNonFunctional(bool i_requirePresent = true); + + + /** + * @brief Destroy the predicate + */ + virtual ~PredicateIsNonFunctional(); + + /** + * @brief returns true if target is marked non-functional + * + * @param[in] i_pTarget + * Handle to the target to perform the predicate check on + * + * @return bool indicating whether target is non-functional or not + */ + bool operator()(const TARGETING::Target* i_pTarget) const ; + +private: + + // Whether to return targets who are present and non-functional (true) + // or to return all non-functional targets, regardless of present state + // (false) + bool iv_requirePresent; + + TARG_DISABLE_COPY_AND_ASSIGNMENT_OPERATORS(PredicateIsNonFunctional); +}; + +}; // end namespace + +#endif // __TARGETING_COMMON_PREDICATEISNONFUNCTIONAL_H diff --git a/src/include/usr/targeting/common/predicates/predicates.H b/src/include/usr/targeting/common/predicates/predicates.H index 8c422b036..b62b9f843 100644 --- a/src/include/usr/targeting/common/predicates/predicates.H +++ b/src/include/usr/targeting/common/predicates/predicates.H @@ -5,7 +5,7 @@ /* */ /* IBM CONFIDENTIAL */ /* */ -/* COPYRIGHT International Business Machines Corp. 2012,2013 */ +/* COPYRIGHT International Business Machines Corp. 2012,2014 */ /* */ /* p1 */ /* */ @@ -36,6 +36,7 @@ #include #include #include +#include // please keep up to date... diff --git a/src/include/usr/targeting/common/utilFilter.H b/src/include/usr/targeting/common/utilFilter.H index 551f4cf85..d5a1afef4 100644 --- a/src/include/usr/targeting/common/utilFilter.H +++ b/src/include/usr/targeting/common/utilFilter.H @@ -5,7 +5,7 @@ /* */ /* IBM CONFIDENTIAL */ /* */ -/* COPYRIGHT International Business Machines Corp. 2012,2013 */ +/* COPYRIGHT International Business Machines Corp. 2012,2014 */ /* */ /* p1 */ /* */ @@ -43,9 +43,11 @@ namespace TARGETING */ enum ResourceState { - UTIL_FILTER_ALL, // All targets - UTIL_FILTER_PRESENT, // Present at minimum - UTIL_FILTER_FUNCTIONAL // Functional targets only + UTIL_FILTER_ALL, // All targets + UTIL_FILTER_PRESENT, // Present at minimum + UTIL_FILTER_FUNCTIONAL, // Functional targets only + UTIL_FILTER_PRESENT_NON_FUNCTIONAL, //All present and non-fucntional + UTIL_FILTER_NON_FUNCTIONAL //All non-fucntional }; diff --git a/src/usr/hwas/common/hwas.C b/src/usr/hwas/common/hwas.C index cb079c71c..3bf141e26 100644 --- a/src/usr/hwas/common/hwas.C +++ b/src/usr/hwas/common/hwas.C @@ -521,10 +521,68 @@ errlHndl_t discoverTargets() //non functional membuf or no membufs associated with this MCS enableHwasState(l_MCSTarget,true,false, HWAS::DeconfigGard::DECONFIGURED_BY_NO_CHILD_MEMBUF); + + + HWAS_INF("discoverTargets: MCS %.8X mark as present, not functional", l_MCSTarget->getAttr() ); } + // Get list of non-functional Centaurs + TargetHandleList l_nonFuncCentaurs; + getChipResources(l_nonFuncCentaurs, TYPE_MEMBUF, + UTIL_FILTER_NON_FUNCTIONAL); + + // Some common variables used below + TargetHandleList pChildList; + PredicateIsFunctional isFunctional; + + // Iterate through list of non-functional Centaurs, and + // set all children as non-functional + for (TargetHandleList::const_iterator + pCenTarget_it = l_nonFuncCentaurs.begin(); + pCenTarget_it != l_nonFuncCentaurs.end(); + ++pCenTarget_it) + { + // Cache current target + TargetHandle_t l_cenTarget = *pCenTarget_it; + + // find all CHILD matches for this target and deconfigure them + targetService().getAssociated(pChildList, l_cenTarget, + TargetService::CHILD, TargetService::ALL, &isFunctional); + for (TargetHandleList::iterator pChild_it = pChildList.begin(); + pChild_it != pChildList.end(); + ++pChild_it) + { + TargetHandle_t l_childTarget = *pChild_it; + //non functional membuf or no membufs associated with this MCS + enableHwasState(l_childTarget,true,false, + HWAS::DeconfigGard::DECONFIGURED_BY_NO_PARENT_MEMBUF); + HWAS_INF("discoverTargets: Target %.8X mark as present" + ", not functional due to non-functional parent" + " Centaur", + l_childTarget->getAttr() ); + } + + // find all CHILD_BY_AFFINITY matches for this target and + // deconfigure them + targetService().getAssociated(pChildList, l_cenTarget, + TargetService::CHILD_BY_AFFINITY, TargetService::ALL, + &isFunctional); + for (TargetHandleList::iterator pChild_it = pChildList.begin(); + pChild_it != pChildList.end(); + ++pChild_it) + { + TargetHandle_t l_affinityTarget = *pChild_it; + //non functional membuf or no membufs associated with this MCS + enableHwasState(l_affinityTarget,true,false, + HWAS::DeconfigGard::DECONFIGURED_BY_NO_PARENT_MEMBUF); + HWAS_INF("discoverTargets: Target %.8X mark as present" + ", not functional due to non-functional parent" + " Centaur", + l_affinityTarget->getAttr() ); + } + } } while (0); diff --git a/src/usr/targeting/common/common.mk b/src/usr/targeting/common/common.mk index 7a5cb8c27..520f0462d 100644 --- a/src/usr/targeting/common/common.mk +++ b/src/usr/targeting/common/common.mk @@ -5,7 +5,7 @@ # # IBM CONFIDENTIAL # -# COPYRIGHT International Business Machines Corp. 2011,2013 +# COPYRIGHT International Business Machines Corp. 2011,2014 # # p1 # @@ -37,7 +37,8 @@ PREDICATES_OBJS = \ predicatectm.o \ predicateisfunctional.o \ predicatehwas.o \ - predicatehwaschanged.o + predicatehwaschanged.o \ + predicateisnonfunctional.o ITERATORS_OBJS = \ targetiterator.o \ diff --git a/src/usr/targeting/common/predicates/predicateisnonfunctional.C b/src/usr/targeting/common/predicates/predicateisnonfunctional.C new file mode 100644 index 000000000..5d702f105 --- /dev/null +++ b/src/usr/targeting/common/predicates/predicateisnonfunctional.C @@ -0,0 +1,75 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/targeting/common/predicates/predicateisnonfunctional.C $ */ +/* */ +/* IBM CONFIDENTIAL */ +/* */ +/* COPYRIGHT International Business Machines Corp. 2014 */ +/* */ +/* p1 */ +/* */ +/* Object Code Only (OCO) source materials */ +/* Licensed Internal Code Source Materials */ +/* IBM HostBoot Licensed Internal Code */ +/* */ +/* The source code for this program is not published or otherwise */ +/* divested of its trade secrets, irrespective of what has been */ +/* deposited with the U.S. Copyright Office. */ +/* */ +/* Origin: 30 */ +/* */ +/* IBM_PROLOG_END_TAG */ +/** + * @file targeting/common/predicates/predicateisnonfunctional.C + * + * @brief Implement predicate defined in + * src/usr/include/targeting/predicate/predicateisnonfunctional.H + * + */ + +// targeting support. +#include + +namespace TARGETING +{ + +//****************************************************************************** +// PredicateIsNonFunctional::PredicateIsNonFunctional() +//****************************************************************************** +PredicateIsNonFunctional::PredicateIsNonFunctional(bool i_requirePresent) + :iv_requirePresent(i_requirePresent) +{ + +} + +//****************************************************************************** +// PredicateIsNonFunctional::~PredicateIsNonFunctional() +//****************************************************************************** +PredicateIsNonFunctional::~PredicateIsNonFunctional() +{ + +} + +//****************************************************************************** +// PredicateIsNonFunctional::operator() +//****************************************************************************** +bool PredicateIsNonFunctional::operator()( + const TARGETING::Target* i_pTarget) const +{ + bool l_rc = false; + + if (iv_requirePresent) + { + l_rc = ((!i_pTarget->getAttr().functional) && + (i_pTarget->getAttr().present)); + } + else + { + l_rc = !i_pTarget->getAttr().functional; + } + + return l_rc; +}; + +} // namespace diff --git a/src/usr/targeting/common/utilFilter.C b/src/usr/targeting/common/utilFilter.C index bb4846074..34207a75c 100644 --- a/src/usr/targeting/common/utilFilter.C +++ b/src/usr/targeting/common/utilFilter.C @@ -5,7 +5,7 @@ /* */ /* IBM CONFIDENTIAL */ /* */ -/* COPYRIGHT International Business Machines Corp. 2012,2013 */ +/* COPYRIGHT International Business Machines Corp. 2012,2014 */ /* */ /* p1 */ /* */ @@ -32,6 +32,7 @@ #include #include #include +#include /** * Miscellaneous Filter Utility Functions @@ -125,6 +126,51 @@ void _getChipOrChipletResources( TARGETING::TargetHandleList & o_vector, } break; } + case UTIL_FILTER_NON_FUNCTIONAL: + { + // Get all non-functional chips or chiplets + // Non-functional predicate + TARGETING::PredicateIsNonFunctional l_isNonFunctional(false); + // Type predicate + TARGETING::PredicateCTM l_CtmFilter(i_class, i_type); + // Set up compound predicate + TARGETING::PredicatePostfixExpr l_nonFunctional; + l_nonFunctional.push(&l_CtmFilter).push(&l_isNonFunctional).And(); + // Apply the filter through all targets + TARGETING::TargetRangeFilter l_nonFuncTargetList( + TARGETING::targetService().begin(), + TARGETING::targetService().end(), + &l_nonFunctional); + o_vector.clear(); + for ( ; l_nonFuncTargetList; ++l_nonFuncTargetList) + { + o_vector.push_back(*l_nonFuncTargetList); + } + break; + } + case UTIL_FILTER_PRESENT_NON_FUNCTIONAL: + { + // Get all present and non-functional chips or chiplets + // Present and non-functional predicate + TARGETING::PredicateIsNonFunctional l_isPresNonFunctional; + // Type predicate + TARGETING::PredicateCTM l_CtmFilter(i_class, i_type); + // Set up compound predicate + TARGETING::PredicatePostfixExpr l_presNonFunctional; + l_presNonFunctional.push(&l_CtmFilter). + push(&l_isPresNonFunctional).And(); + // Apply the filter through all targets + TARGETING::TargetRangeFilter l_presNonFuncTargetList( + TARGETING::targetService().begin(), + TARGETING::targetService().end(), + &l_presNonFunctional); + o_vector.clear(); + for ( ; l_presNonFuncTargetList; ++l_presNonFuncTargetList) + { + o_vector.push_back(*l_presNonFuncTargetList); + } + break; + } default: TARG_ASSERT(0, TARG_LOC "Invalid functional state used"); break; -- cgit v1.2.1