diff options
author | whs <whs@us.ibm.com> | 2016-03-14 16:31:27 -0500 |
---|---|---|
committer | Stephen Cprek <smcprek@us.ibm.com> | 2016-04-21 13:51:47 -0500 |
commit | 9dee05c3d4c801d74972216a8c501e5c1c3fc2b6 (patch) | |
tree | 4acaf595a78857f595acdd9b17f03fd118411079 /src/usr/fsi | |
parent | 25bc87d9fc30db27f8c78019858f832c92d69097 (diff) | |
download | talos-hostboot-9dee05c3d4c801d74972216a8c501e5c1c3fc2b6.tar.gz talos-hostboot-9dee05c3d4c801d74972216a8c501e5c1c3fc2b6.zip |
VPD Caching broken on multiple socket, single CVPD systems (Barreleye)
Invalidate Centaur Pnor sections if the section is invalid for all targets
that share that section. Keep a section if any target sharing the section
finds the section valid.
Fixes: open-power/hostboot#29
Change-Id: I14302e38f1d39f3bb4e1857267e1547d1a06302b
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/22047
Tested-by: Jenkins Server
Reviewed-by: A. P. Williams III <iawillia@us.ibm.com>
Reviewed-by: Matthew A. Ploetz <maploetz@us.ibm.com>
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/22153
Tested-by: FSP CI Jenkins
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/usr/fsi')
-rw-r--r-- | src/usr/fsi/fsipres.C | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/src/usr/fsi/fsipres.C b/src/usr/fsi/fsipres.C index 038e952b3..5798bde02 100644 --- a/src/usr/fsi/fsipres.C +++ b/src/usr/fsi/fsipres.C @@ -299,13 +299,14 @@ errlHndl_t membPresenceDetect(DeviceFW::OperationType i_opType, } else { - // FSI is not present, invalidate MVPD in the PNOR - l_errl = VPD::invalidatePnorCache(i_target); - if (l_errl) - { - TRACFCOMP( g_trac_fsi, "Error invalidating MVPD in PNOR" ); - errlCommit( l_errl, FSI_COMP_ID ); - } + // Defer invalidating CVPD in the PNOR in case another target might be + // sharing this VPD_REC_NUM. Check all targets sharing this + // VPD_REC_NUM after target discovery in VPD::validateSharedPnorCache. + // Ensure the VPD_SWITCHES cache valid bit is invalid at this point. + TARGETING::ATTR_VPD_SWITCHES_type vpdSwitches = + i_target->getAttr<TARGETING::ATTR_VPD_SWITCHES>(); + vpdSwitches.pnorCacheValid = 0; + i_target->setAttr<TARGETING::ATTR_VPD_SWITCHES>( vpdSwitches ); } #endif |