summaryrefslogtreecommitdiffstats
path: root/src/usr
diff options
context:
space:
mode:
Diffstat (limited to 'src/usr')
-rw-r--r--src/usr/hwas/common/deconfigGard.C33
-rw-r--r--src/usr/hwas/test/hwasGardTest.H8
2 files changed, 29 insertions, 12 deletions
diff --git a/src/usr/hwas/common/deconfigGard.C b/src/usr/hwas/common/deconfigGard.C
index 7aeb4b177..485cb3d31 100644
--- a/src/usr/hwas/common/deconfigGard.C
+++ b/src/usr/hwas/common/deconfigGard.C
@@ -489,6 +489,7 @@ errlHndl_t DeconfigGard::getGardRecords(
errlHndl_t DeconfigGard::deconfigureTarget(
Target & i_target,
const uint32_t i_errlEid,
+ bool *o_targetDeconfigured,
const DeconfigureRuntime i_runTimeDeconfigRule)
{
HWAS_DBG("Deconfigure Target");
@@ -562,7 +563,8 @@ errlHndl_t DeconfigGard::deconfigureTarget(
HWAS_MUTEX_LOCK(iv_mutex);
// Deconfigure the Target
- _deconfigureTarget(i_target, i_errlEid, i_runTimeDeconfigRule);
+ _deconfigureTarget(i_target, i_errlEid, o_targetDeconfigured,
+ i_runTimeDeconfigRule);
// Deconfigure other Targets by association
_deconfigureByAssoc(i_target, i_errlEid, i_runTimeDeconfigRule);
@@ -986,7 +988,8 @@ void DeconfigGard::_deconfigureByAssoc(
TargetHandle_t pChild = *pChild_it;
HWAS_INF("_deconfigureByAssoc CHILD: %.8X", get_huid(pChild));
- _deconfigureTarget(*pChild, i_errlEid, i_runTimeDeconfigRule);
+ _deconfigureTarget(*pChild, i_errlEid, NULL,
+ i_runTimeDeconfigRule);
// Deconfigure other Targets by association
_deconfigureByAssoc(*pChild, i_errlEid, i_runTimeDeconfigRule);
} // for CHILD
@@ -1012,7 +1015,8 @@ void DeconfigGard::_deconfigureByAssoc(
HWAS_INF("_deconfigureByAssoc CHILD_BY_AFFINITY: %.8X",
get_huid(pChild));
- _deconfigureTarget(*pChild, i_errlEid, i_runTimeDeconfigRule);
+ _deconfigureTarget(*pChild, i_errlEid, NULL,
+ i_runTimeDeconfigRule);
// Deconfigure other Targets by association
_deconfigureByAssoc(*pChild, i_errlEid, i_runTimeDeconfigRule);
} // for CHILD_BY_AFFINITY
@@ -1039,7 +1043,7 @@ void DeconfigGard::_deconfigureByAssoc(
HWAS_INF("_deconfigureByAssoc MEMBUF parent MCS: %.8X",
get_huid(l_parentMcs));
_deconfigureTarget(const_cast<Target &> (*l_parentMcs),
- i_errlEid, i_runTimeDeconfigRule);
+ i_errlEid, NULL, i_runTimeDeconfigRule);
_deconfigureByAssoc(const_cast<Target &> (*l_parentMcs),
i_errlEid, i_runTimeDeconfigRule);
}
@@ -1065,7 +1069,7 @@ void DeconfigGard::_deconfigureByAssoc(
HWAS_INF("_deconfigureByAssoc MCS (& MEMBUF) paired: %.8X",
get_huid(l_partnerMcs));
_deconfigureTarget(const_cast<Target &> (*l_partnerMcs),
- i_errlEid,i_runTimeDeconfigRule);
+ i_errlEid, NULL,i_runTimeDeconfigRule);
_deconfigureByAssoc(const_cast<Target &> (*l_partnerMcs),
i_errlEid,i_runTimeDeconfigRule);
}
@@ -1091,7 +1095,7 @@ void DeconfigGard::_deconfigureByAssoc(
HWAS_INF("_deconfigureByAssoc MEMBUF parent with no memory: %.8X",
get_huid(l_parentMembuf));
_deconfigureTarget(const_cast<Target &> (*l_parentMembuf),
- i_errlEid, i_runTimeDeconfigRule);
+ i_errlEid, NULL, i_runTimeDeconfigRule);
_deconfigureByAssoc(const_cast<Target &> (*l_parentMembuf),
i_errlEid, i_runTimeDeconfigRule);
@@ -1196,7 +1200,7 @@ void DeconfigGard::_deconfigureByAssoc(
HWAS_INF("_deconfigureByAssoc MBA matched: %.8X",
get_huid(pMba));
_deconfigureTarget(*pMba, i_errlEid,
- i_runTimeDeconfigRule);
+ NULL, i_runTimeDeconfigRule);
l_deconfigList.push_back(pMba);
break; // only need to do 1 MBA - we're done.
}
@@ -1226,7 +1230,7 @@ void DeconfigGard::_deconfigureByAssoc(
HWAS_INF("_deconfigureByAssoc MBA matched: %.8X",
get_huid(pMba));
_deconfigureTarget(*pMba, i_errlEid,
- i_runTimeDeconfigRule);
+ NULL, i_runTimeDeconfigRule);
l_deconfigList.push_back(pMba);
break; // only need to do 1 MBA - we're done.
}
@@ -1267,7 +1271,7 @@ void DeconfigGard::_deconfigureByAssoc(
HWAS_INF("_deconfigureByAssoc DIMM parent MBA: %.8X",
get_huid(l_parentMba));
_deconfigureTarget(const_cast<Target &> (*l_parentMba),
- i_errlEid, i_runTimeDeconfigRule);
+ i_errlEid, NULL, i_runTimeDeconfigRule);
_deconfigureByAssoc(const_cast<Target &> (*l_parentMba),
i_errlEid, i_runTimeDeconfigRule);
}
@@ -1288,7 +1292,8 @@ void DeconfigGard::_deconfigureByAssoc(
HWAS_INF("_deconfigureByAssoc BUS Peer: %.8X",
get_huid(l_pDstTarget));
_deconfigureTarget(const_cast<Target &> (*l_pDstTarget),
- i_errlEid, i_runTimeDeconfigRule);
+ i_errlEid, NULL,
+ i_runTimeDeconfigRule);
}
break;
} // TYPE_XBUS, TYPE_ABUS
@@ -1300,7 +1305,8 @@ void DeconfigGard::_deconfigureByAssoc(
HWAS_INF("deconfigByAssoc parent proc: %.8X",
get_huid(l_pParentProc));
_deconfigureTarget(const_cast<Target &> (*l_pParentProc),
- i_errlEid, i_runTimeDeconfigRule);
+ i_errlEid, NULL,
+ i_runTimeDeconfigRule);
_deconfigureByAssoc(const_cast<Target &> (*l_pParentProc),
i_errlEid, i_runTimeDeconfigRule);
break;
@@ -1318,6 +1324,7 @@ void DeconfigGard::_deconfigureByAssoc(
void DeconfigGard::_deconfigureTarget(
Target & i_target,
const uint32_t i_errlEid,
+ bool *o_targetDeconfigured,
const DeconfigureRuntime i_runTimeDeconfigRule)
{
HWAS_INF("Deconfiguring Target %.8X, errlEid 0x%X",
@@ -1353,6 +1360,10 @@ void DeconfigGard::_deconfigureTarget(
l_state.deconfiguredByEid = i_errlEid;
i_target.setAttr<ATTR_HWAS_STATE>(l_state);
+ if (o_targetDeconfigured)
+ {
+ *o_targetDeconfigured = true;
+ }
// if this is a real error, deconfigure
if (i_errlEid & DECONFIGURED_BY_PLID_MASK)
diff --git a/src/usr/hwas/test/hwasGardTest.H b/src/usr/hwas/test/hwasGardTest.H
index 2446c92c7..3abb7a005 100644
--- a/src/usr/hwas/test/hwasGardTest.H
+++ b/src/usr/hwas/test/hwasGardTest.H
@@ -190,13 +190,19 @@ public:
HwasState l_origState = l_pTarget->getAttr<ATTR_HWAS_STATE>();
// Deconfigure the target.
+ bool l_targetDeconfigured = false;
l_pErr = theDeconfigGard().
- deconfigureTarget(*l_pTarget, 0x12);
+ deconfigureTarget(*l_pTarget, 0x12, &l_targetDeconfigured);
if (l_pErr)
{
TS_FAIL("testDeconfigure3: Error from deconfigureTarget");
break;
}
+ if (l_targetDeconfigured == false)
+ {
+ TS_FAIL("testDeconfigure3: deconfigureTarget didn't set targetDeconfigured correctly");
+ break;
+ }
// Get the new HWAS_STATE of the target
HwasState l_state = l_pTarget->getAttr<ATTR_HWAS_STATE>();
OpenPOWER on IntegriCloud