diff options
author | Matt Derksen <mderkse1@us.ibm.com> | 2019-02-14 14:54:18 -0600 |
---|---|---|
committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2019-02-15 13:38:25 -0600 |
commit | 6c2654db4623093da3917aa90cf46df71d88b8a5 (patch) | |
tree | 405317ec839499ab1cd3d65a2388f95278237a00 /src/usr/hwas/common/deconfigGard.C | |
parent | 9825db50591c9579511fabb677a742a5bbe5a074 (diff) | |
download | talos-hostboot-6c2654db4623093da3917aa90cf46df71d88b8a5.tar.gz talos-hostboot-6c2654db4623093da3917aa90cf46df71d88b8a5.zip |
Manually garded targets incorrectly being resource recovered
Garded targets were not always setting GARD_APPLIED bit in
ATTR_HWAS_STATE_CHANGED which was causing ATTR_BLOCK_SPEC_DECONFIG
to always be set after a resource recovery.
To recreate failure:
1) gard a critical target (gard --md 0x50000)
2) IPL
3) verify resource recoverd (gard --gc fabric)
4) verify ATTR_BLOCK_SPEC_DECONFIG set to 1 (hwsvCmd -y)
5) power down
6) clear previous gard (gard --clr all)
7) gard all XBUSes (gard --md 0xE0000 .. gard --md 0xE0005)
8) IPL
9) verify XBUSes were incorrectly resource recovered (gard --gc fabric)
This SPEC_DECONFIG code was added in fips920. We don't believe the fix
needs to go back because it requires a double failure and manual garding.
The first failure must be a gard of a critical resource, which forces a
reconfig.
In the field, the failed parts would be replaced and rely on a different
bit (RESRC_RECOV) and code path. Also, if this isn't fixed the targets
will just be garded again later. This also only applies to Predictive
garded parts.
Change-Id: I183b74ef200a5034e5dba20c0f64ad8f75763167
CQ:SW454599
Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/71929
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Reviewed-by: Roland Veloz <rveloz@us.ibm.com>
Reviewed-by: Christian R. Geddes <crgeddes@us.ibm.com>
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/usr/hwas/common/deconfigGard.C')
-rw-r--r-- | src/usr/hwas/common/deconfigGard.C | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/usr/hwas/common/deconfigGard.C b/src/usr/hwas/common/deconfigGard.C index 8fab07013..bdbda740d 100644 --- a/src/usr/hwas/common/deconfigGard.C +++ b/src/usr/hwas/common/deconfigGard.C @@ -148,7 +148,7 @@ errlHndl_t DeconfigGard::applyGardRecord(Target *i_pTarget, GardRecord &i_gardRecord, const DeconfigureFlags i_deconfigRule) { - HWAS_INF("Apply gard record for a target"); + HWAS_INF("Apply gard record for target %.8X", get_huid(i_pTarget)); errlHndl_t l_pErr = NULL; do { @@ -183,12 +183,16 @@ errlHndl_t DeconfigGard::applyGardRecord(Target *i_pTarget, HWAS_MUTEX_UNLOCK(iv_mutex); + // Need to set GARD_APPLIED bit for all garded targets + update_hwas_changed_mask(i_pTarget, HWAS_CHANGED_BIT_GARD_APPLIED); + if(i_deconfigRule == SPEC_DECONFIG) { + HWAS_INF( + "Skip platLogEvent(GARD_APPLIED) for spec_deconfig target %.8X", + get_huid(i_pTarget)); break; } - - update_hwas_changed_mask(i_pTarget, HWAS_CHANGED_BIT_GARD_APPLIED); l_pErr = platLogEvent(i_pTarget, GARD_APPLIED); if (l_pErr) { |