diff options
author | Sakethan R Kotta <sakkotta@in.ibm.com> | 2017-08-11 06:31:50 -0500 |
---|---|---|
committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2017-08-18 14:24:08 -0400 |
commit | a9512e1702f68f4f3b13fe13663094eedd24c22a (patch) | |
tree | 2f340d55d9c2942d8a5545652725f14b35fe59c8 /src | |
parent | 25a46875b4bd8e7da5d5b2e342467ee2183e228b (diff) | |
download | talos-hostboot-a9512e1702f68f4f3b13fe13663094eedd24c22a.tar.gz talos-hostboot-a9512e1702f68f4f3b13fe13663094eedd24c22a.zip |
Added HWAS support for Cumulus and Centaur targets
Change-Id: I764527b57f07ce5d2c95283ba08fd7dd96d1222c
RTC:178217
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/44516
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>
Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com>
Reviewed-by: Prachi Gupta <pragupta@us.ibm.com>
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/include/usr/hwas/common/deconfigGard.H | 20 | ||||
-rw-r--r-- | src/usr/hwas/common/deconfigGard.C | 290 | ||||
-rw-r--r-- | src/usr/hwas/common/hwas.C | 321 | ||||
-rw-r--r-- | src/usr/hwas/test/hwasGardTest.H | 423 |
4 files changed, 643 insertions, 411 deletions
diff --git a/src/include/usr/hwas/common/deconfigGard.H b/src/include/usr/hwas/common/deconfigGard.H index 2cdc5fd26..282ffa3c3 100644 --- a/src/include/usr/hwas/common/deconfigGard.H +++ b/src/include/usr/hwas/common/deconfigGard.H @@ -131,11 +131,13 @@ public: // set by call_mss_getecid() in dmi_training.c DECONFIGURED_BY_MEMORY_CONFIG, // BASE | 0x03 - // set by presentByAssoc() when a MCS has no MEMBUFs or MCAs - DECONFIGURED_BY_NO_CHILD_MEMBUF_OR_MCA, // BASE | 0x04 + // set by presentByAssoc() when a MCS has no MCAs + DECONFIGURED_BY_NO_CHILD_MCA, // BASE | 0x04 // TODO RTC 149367 Remove deprecated enumeration once hwsv is not using DECONFIGURED_BY_NO_CHILD_MEMBUF = //Deprecated - DECONFIGURED_BY_NO_CHILD_MEMBUF_OR_MCA, + DECONFIGURED_BY_NO_CHILD_MCA, + DECONFIGURED_BY_NO_CHILD_MEMBUF_OR_MCA = //Deprecated, but needed by FSP + DECONFIGURED_BY_NO_CHILD_MCA, // set by deconfigureAssocProc() in hwas/common/deconfigGard.C DECONFIGURED_BY_BUS_DECONFIG, // BASE | 0x05 @@ -154,10 +156,11 @@ public: // set by presentByAssoc() when a MBA has no DIMMs DECONFIGURED_BY_NO_CHILD_DIMM, // BASE | 0x0A - + // set by presentByAssoc() when a MEMBUF has no MCS - DECONFIGURED_BY_NO_PARENT_MCS, // BASE | 0x0B - + DECONFIGURED_BY_NO_PARENT_DMI, // BASE | 0x0B + DECONFIGURED_BY_NO_PARENT_MCS = + DECONFIGURED_BY_NO_PARENT_DMI, // set by presentByAssoc() when a MEMBUF has no MBAs DECONFIGURED_BY_NO_CHILD_MBA, // BASE | 0x0C @@ -177,6 +180,11 @@ public: DECONFIGURED_BY_NO_CHILD_MCS, // BASE | 0x14 DECONFIGURED_BY_NO_PARENT_MCBIST, // BASE | 0x15 DECONFIGURED_BY_DISABLED_PORT, // BASE | 0x16 + + DECONFIGURED_BY_NO_CHILD_MI, // BASE | 0x17 + DECONFIGURED_BY_NO_CHILD_DMI, // BASE | 0x18 + DECONFIGURED_BY_NO_PARENT_MC, // BASE | 0x19 + DECONFIGURED_BY_NO_PARENT_MI, // BASE | 0x1A // mask - these bits mean it's a PLID and not an enum DECONFIGURED_BY_PLID_MASK = 0xFFFF0000, diff --git a/src/usr/hwas/common/deconfigGard.C b/src/usr/hwas/common/deconfigGard.C index d6b2f93e0..0a4367cae 100644 --- a/src/usr/hwas/common/deconfigGard.C +++ b/src/usr/hwas/common/deconfigGard.C @@ -1549,54 +1549,25 @@ void DeconfigGard::_deconfigureByAssoc( case TYPE_MEMBUF: { - // get parent MCS - TargetHandleList pParentMcsList; - getParentAffinityTargetsByState(pParentMcsList, &i_target, - CLASS_UNIT, TYPE_MCS, UTIL_FILTER_PRESENT); - HWAS_ASSERT((pParentMcsList.size() == 1), - "HWAS _deconfigureByAssoc: pParentMcsList > 1"); - const Target *l_parentMcs = pParentMcsList[0]; + // get parent DMI + TargetHandleList pParentDmiList; + getParentAffinityTargetsByState(pParentDmiList, &i_target, + CLASS_UNIT, TYPE_DMI, UTIL_FILTER_PRESENT); + HWAS_ASSERT((pParentDmiList.size() == 1), + "HWAS _deconfigureByAssoc: pParentDmiList > 1"); + const Target *l_parentDmi = pParentDmiList[0]; // If parent is functional, deconfigure it - if (isFunctional(l_parentMcs)) + if (isFunctional(l_parentDmi)) { // deconfigure the parent - HWAS_INF("_deconfigureByAssoc MEMBUF parent MCS: %.8X", - get_huid(l_parentMcs)); - _deconfigureTarget(const_cast<Target &> (*l_parentMcs), + HWAS_INF("_deconfigureByAssoc MEMBUF parent DMI: %.8X", + get_huid(l_parentDmi)); + _deconfigureTarget(const_cast<Target &> (*l_parentDmi), i_errlEid, NULL, i_deconfigRule); - _deconfigureByAssoc(const_cast<Target &> (*l_parentMcs), + _deconfigureByAssoc(const_cast<Target &> (*l_parentDmi), i_errlEid, i_deconfigRule); } - - Target *pSys; - targetService().getTopLevelTarget(pSys); - HWAS_ASSERT(pSys, "HWAS _deconfigureByAssoc: no TopLevelTarget"); - -#if 0 //@TODO RTC 178216 Re-Add this after proc_setup_bars_memory_attributes.xml - // is imported from ekb - // done if not in interleaved mode - if (!pSys->getAttr<ATTR_ALL_MCS_IN_INTERLEAVING_GROUP>()) - { - break; - } -#endif - // if paired mode (interleaved) - // deconfigure paired MCS and MEMBUF (Centaur) - // find paired MCS / MEMBUF (Centaur) - const Target *l_partnerMcs = findPartnerForMcs(l_parentMcs); - - // If partner MCS is functional or not spec deconfigured - if (l_partnerMcs && isFunctional(l_partnerMcs)) - { - // deconfigure the paired MCS - HWAS_INF("_deconfigureByAssoc MCS (& MEMBUF) paired: %.8X", - get_huid(l_partnerMcs)); - _deconfigureTarget(const_cast<Target &> (*l_partnerMcs), - i_errlEid, NULL,i_deconfigRule); - _deconfigureByAssoc(const_cast<Target &> (*l_partnerMcs), - i_errlEid,i_deconfigRule); - } break; } // TYPE_MEMBUF @@ -1665,6 +1636,74 @@ void DeconfigGard::_deconfigureByAssoc( // and we're done, so break; break; } + + case TYPE_MI: + { + // get parent MC + TargetHandleList pParentMctList; + getParentAffinityTargetsByState(pParentMctList, &i_target, + CLASS_UNIT, TYPE_MC, UTIL_FILTER_PRESENT); + + HWAS_ASSERT((pParentMctList.size() <= 1), + "HWAS _deconfigureByAssoc: MI has multiple MC parents, this is impossible"); + + Target *l_parentMc = pParentMctList[0]; + + // if parent MC hasn't already been deconfigured + if (!pParentMctList.empty() && + isFunctional(l_parentMc) && + !anyChildFunctional(*l_parentMc)) + { + // deconfigure parent MC + HWAS_INF("_deconfigureByAssoc MC parent with no functional children: %.8X", + get_huid(l_parentMc)); + _deconfigureTarget(*l_parentMc, + i_errlEid, NULL, i_deconfigRule); + _deconfigureByAssoc(*l_parentMc, + i_errlEid,i_deconfigRule); + } + else + { + HWAS_ASSERT((pParentMctList.size() <= 1), + "HWAS _deconfigureByAssoc: No MC parents for for MI w/ HUID: %lx", get_huid(&i_target)); + } + // and we're done, so break; + break; + } + + case TYPE_DMI: + { + // get parent MI + TargetHandleList pParentMitList; + getParentAffinityTargetsByState(pParentMitList, &i_target, + CLASS_UNIT, TYPE_MC, UTIL_FILTER_PRESENT); + + HWAS_ASSERT((pParentMitList.size() <= 1), + "HWAS _deconfigureByAssoc: DMI has multiple MI parents, this is impossible"); + + Target *l_parentMi = pParentMitList[0]; + + // if parent MI hasn't already been deconfigured + if (!pParentMitList.empty() && + isFunctional(l_parentMi) && + !anyChildFunctional(*l_parentMi)) + { + // deconfigure parent MI + HWAS_INF("_deconfigureByAssoc MI parent with no functional children: %.8X", + get_huid(l_parentMi)); + _deconfigureTarget(*l_parentMi, + i_errlEid, NULL, i_deconfigRule); + _deconfigureByAssoc(*l_parentMi, + i_errlEid,i_deconfigRule); + } + else + { + HWAS_ASSERT((pParentMitList.size() <= 1), + "HWAS _deconfigureByAssoc: No MI parents for for DMI w/ HUID: %lx", get_huid(&i_target)); + } + // and we're done, so break; + break; + } case TYPE_MBA: { @@ -1692,174 +1731,9 @@ void DeconfigGard::_deconfigureByAssoc( i_errlEid, NULL, i_deconfigRule); _deconfigureByAssoc(const_cast<Target &> (*l_parentMembuf), i_errlEid, i_deconfigRule); - - // and we're done, so break; - break; } - - // parent MEMBUF still has functional memory - Target *pSys; - targetService().getTopLevelTarget(pSys); - HWAS_ASSERT(pSys, "HWAS _deconfigureByAssoc: no TopLevelTarget"); - -#if 0 //@TODO RTC 178216 Re-Add this after proc_setup_bars_memory_attributes.xml - // is imported from ekb - // done if not in interleaved mode - if (!pSys->getAttr<ATTR_ALL_MCS_IN_INTERLEAVING_GROUP>()) - { - break; - } -#endif - // we need to make sure that MBA memory is balanced. - - // find parent MCS - TargetHandleList pParentMcsList; - PredicateCTM predMcs(CLASS_UNIT, TYPE_MCS); - PredicatePostfixExpr funcMcs; - funcMcs.push(&predMcs).push(&isFunctional).And(); - targetService().getAssociated(pParentMcsList, - l_parentMembuf, - TargetService::PARENT_BY_AFFINITY, - TargetService::ALL, - &funcMcs); - - HWAS_ASSERT((pParentMcsList.size() <= 1), - "HWAS _deconfigureByAssoc: pParentMcsList > 1"); - - if (pParentMcsList.empty()) - { - // MCS is already deconfigured, we're done - break; - } - - // MEMBUF only has 1 parent - const Target *l_parentMcs = pParentMcsList[0]; - - // find paired MCS / MEMBUF (Centaur) - const Target *l_partnerMcs = findPartnerForMcs(l_parentMcs); - - // If partner MCS is non-functional - // (findPartnerForMcs returned NULL) or speculated deconfig - if (!(l_partnerMcs && isFunctional(l_partnerMcs))) - { - // We're done. - break; - } - - // Obtain MBA targets related to paired MCS - TargetHandleList pMbaList; - PredicateCTM predMba(CLASS_UNIT, TYPE_MBA); - PredicatePostfixExpr funcMba; - funcMba.push(&predMba).push(&isFunctional).And(); - targetService().getAssociated(pMbaList, - l_partnerMcs, - TargetService::CHILD_BY_AFFINITY, - TargetService::ALL, - &funcMba); - - - // Declare list to hold any MBA targets we need to deconfigure - // as we look for matches. This list will be used to run - // the subsequent _deconfigureByAssoc - TargetHandleList l_deconfigList; - - // Now we will check the memory size of each MBA target - // of the paired MCS. If an MBAs memory size matches that - // of the original MBA (i_target), then we will deconfigure it - // If ATTR_EFF_DIMM_SIZE has not been set yet (returns 0), then - // we will deconfigure the MBA whose position matches that of - // the original. - - // how much memory does this MBA have - ATTR_EFF_DIMM_SIZE_type l_dimmSize; - i_target.tryGetAttr<ATTR_EFF_DIMM_SIZE>(l_dimmSize); - const uint64_t l_mbaDimmSize = - l_dimmSize[0][0] + l_dimmSize[0][1] + - l_dimmSize[1][0] + l_dimmSize[1][1]; - - if (l_mbaDimmSize == 0) - { - // before this attribute has been set - HWAS_INF("ATTR_EFF_DIMMSIZE not set (returned 0)." - " Deconfiguring same-position MBA of paried MCS."); - - // Get this MBAs position - const ATTR_CHIP_UNIT_type l_mbaPos = - i_target.getAttr<ATTR_CHIP_UNIT>(); - - // Assumes 2 MBA per MEMBUF. if this changes, then instead - // of '1', count the number of MBAs under this MEMBUF and - // use that as the comparison. - if (pMbaList.size() != 1) // this != myMbaCount - { - // Iterate through MBAs looking for position match - for (TargetHandleList::iterator - pMba_it = pMbaList.begin(); - pMba_it != pMbaList.end(); - ++pMba_it) - { - // Capture current MBA - TargetHandle_t pMba = *pMba_it; - - // If position matches - if (l_mbaPos == pMba->getAttr<ATTR_CHIP_UNIT>()) - { - // Deconfigure it - HWAS_INF("_deconfigureByAssoc MBA matched: %.8X", - get_huid(pMba)); - _deconfigureTarget(*pMba, i_errlEid, - NULL, i_deconfigRule); - l_deconfigList.push_back(pMba); - break; // only need to do 1 MBA - we're done. - } - }// 2 functional MBAs - }// size != 1 - }// ATTR_EFF_DIMM_SIZE not set - else - { - // ATTR_EFF_DIMM_SIZE was set - if (pMbaList.size() != 1) // this != myMbaCount - { - // unbalanced, so lets find one to deconfigure - for (TargetHandleList::iterator - pMba_it = pMbaList.begin(); - pMba_it != pMbaList.end(); - ++pMba_it) - { - TargetHandle_t pMba = *pMba_it; - pMba->tryGetAttr<ATTR_EFF_DIMM_SIZE>(l_dimmSize); - const uint64_t l_thisDimmSize = - l_dimmSize[0][0] + l_dimmSize[0][1] + - l_dimmSize[1][0] + l_dimmSize[1][1]; - - // if this MBA matches, deconfigure it. - if (l_mbaDimmSize == l_thisDimmSize) - { - HWAS_INF("_deconfigureByAssoc MBA matched: %.8X", - get_huid(pMba)); - _deconfigureTarget(*pMba, i_errlEid, - NULL, i_deconfigRule); - l_deconfigList.push_back(pMba); - break; // only need to do 1 MBA - we're done. - } - } // for MBA - } // if 2 functional MBA - }// else - - // now loop thru and do the ByAssoc deconfig for each of the - // MBA targets. this should get the CHILD associations, but - // won't cause any pair deconfigs, since we coverered that - // already. - for (TargetHandleList::iterator - pMba_it = l_deconfigList.begin(); - pMba_it != l_deconfigList.end(); - ++pMba_it) - { - TargetHandle_t pMba = *pMba_it; - HWAS_INF("_deconfigureByAssoc MBA matched (bA): %.8X", - get_huid(pMba)); - _deconfigureByAssoc(*pMba, i_errlEid,i_deconfigRule); - } // for + + // and we're done, so break; break; } // TYPE_MBA diff --git a/src/usr/hwas/common/hwas.C b/src/usr/hwas/common/hwas.C index f9ce03e3f..539a9e185 100644 --- a/src/usr/hwas/common/hwas.C +++ b/src/usr/hwas/common/hwas.C @@ -2053,23 +2053,23 @@ void invokePresentByAssoc() // make one list TargetHandleList l_funcTargetList; - // get the functional MCBISTs + // get the functional MCBISTs (for Nimbus based systems) TargetHandleList l_funcMCBISTTargetList; getAllChiplets(l_funcMCBISTTargetList, TYPE_MCBIST, true ); l_funcTargetList.insert(l_funcTargetList.begin(), l_funcMCBISTTargetList.begin(), l_funcMCBISTTargetList.end()); - // If VPO, dump targets (MCBIST) for verification & debug purposes - #ifdef CONFIG_VPO_COMPILE +// If VPO, dump targets (MCBIST) for verification & debug purposes +#ifdef CONFIG_VPO_COMPILE HWAS_INF("invokePresentByAssoc(): MCBIST targets:"); for (auto l_MCBIST : l_funcMCBISTTargetList) { HWAS_INF(" MCBIST: HUID %.8x", TARGETING::get_huid(l_MCBIST)); } - #endif +#endif - // get the functional MCSs + // get the functional MCSs (for Nimbus based systems) TargetHandleList l_funcMCSTargetList; getAllChiplets(l_funcMCSTargetList, TYPE_MCS, true ); l_funcTargetList.insert(l_funcTargetList.begin(), @@ -2085,8 +2085,56 @@ void invokePresentByAssoc() } #endif + // get the functional MCs (for Cumulus based systems) + TargetHandleList l_funcMCTargetList; + getAllChiplets(l_funcMCTargetList, TYPE_MC, true ); + l_funcTargetList.insert(l_funcTargetList.begin(), + l_funcMCTargetList.begin(), + l_funcMCTargetList.end()); + +// If VPO, dump targets (MC) for verification & debug purposes +#ifdef CONFIG_VPO_COMPILE + HWAS_INF("invokePresentByAssoc(): MC targets:"); + for (auto l_MC : l_funcMCTargetList) + { + HWAS_INF(" MC: HUID %.8x", TARGETING::get_huid(l_MC)); + } +#endif + + // get the functional MIs (for Cumulus based systems) + TargetHandleList l_funcMITargetList; + getAllChiplets(l_funcMITargetList, TYPE_MI, true ); + l_funcTargetList.insert(l_funcTargetList.begin(), + l_funcMITargetList.begin(), + l_funcMITargetList.end()); + +// If VPO, dump targets (MI) for verification & debug purposes +#ifdef CONFIG_VPO_COMPILE + HWAS_INF("invokePresentByAssoc(): MI targets:"); + for (auto l_MI : l_funcMITargetList) + { + HWAS_INF(" MI: HUID %.8x", TARGETING::get_huid(l_MI)); + } +#endif + + // get the functional DMIs (for Cumulus based systems) + TargetHandleList l_funcDMITargetList; + getAllChiplets(l_funcDMITargetList, TYPE_DMI, true ); + l_funcTargetList.insert(l_funcTargetList.begin(), + l_funcDMITargetList.begin(), + l_funcDMITargetList.end()); + +// If VPO, dump targets (DMI) for verification & debug purposes +#ifdef CONFIG_VPO_COMPILE + HWAS_INF("invokePresentByAssoc(): MI targets:"); + for (auto l_DMI : l_funcDMITargetList) + { + HWAS_INF(" DMI: HUID %.8x", TARGETING::get_huid(l_DMI)); + } +#endif + // get the functional membufs - // note: do not expect membufs for NIMBUS direct memory attach + // note: do not expect membufs for NIMBUS TargetHandleList l_funcMembufTargetList; getAllChips(l_funcMembufTargetList, TYPE_MEMBUF, true ); l_funcTargetList.insert(l_funcTargetList.begin(), @@ -2103,7 +2151,7 @@ void invokePresentByAssoc() #endif // get the functional mbas - // note: do not expect mbas for NIMBUS direct memory attach + // note: do not expect mbas for NIMBUS TargetHandleList l_funcMBATargetList; getAllChiplets(l_funcMBATargetList, TYPE_MBA, true ); l_funcTargetList.insert(l_funcTargetList.begin(), @@ -2191,27 +2239,33 @@ void presentByAssoc(TargetInfoVector& io_funcTargets, // Sort entire vector by affinity path. This provides the algorithm with // an ordered vector of targets, making it easy to check if: - // for direct attach memory - + // for NIMBUS direct attach memory - // MCS has child MCA // MCA has child DIMM and parent MCS // DIMM has parent MCA. - // for non direct attach memory - - // MCS has child MEMBUF - // MEMBUF has parent MCS and child MBA - // MBA has child DIMM and parnent MEMBUF + // for CUMULUS non direct attach memory - + // MC has child MI + // MI has parent MC and child DMI + // DMI has parent MI and child MEMBUF + // MEMBUF has parent DMI and child MBA + // MBA has parent MEMBUF and child DIMM // DIMM has parent MBA. std::sort(io_funcTargets.begin(), io_funcTargets.end(), compareAffinity); - // Keep track of the most recently seen MCS MEMBUF and MBA. This allows the + // Keep track of the most recently seen MCBIST, MCS & MCA for NIMBUS + // MC, MI, DMI, MEMBUF and MBA for CUMULUS. This allows the // algorithm to quickly check if targets share a MCS or MEMBUF and used // for backtracking after deleting a target from the vector size_t l_MCBISTIndex = __INT_MAX__; size_t l_MCSIndex = __INT_MAX__; - size_t l_MEMBUFIndex = __INT_MAX__; - size_t l_MBAIndex = __INT_MAX__; size_t l_MCAIndex = __INT_MAX__; + size_t l_MCIndex = __INT_MAX__; + size_t l_MIIndex = __INT_MAX__; + size_t l_DMIIndex = __INT_MAX__; + size_t l_MEMBUFIndex = __INT_MAX__; + size_t l_MBAIndex = __INT_MAX__; size_t i = 0; // Perform presentByAssoc algorithm @@ -2237,7 +2291,7 @@ void presentByAssoc(TargetInfoVector& io_funcTargets, switch (l_curTargetInfo.type) { - case TYPE_MCBIST: + case TYPE_MCBIST: //NIMBUS { // No Child MCSs // If next is not a MCS sharing the same MCAs, deconfig MCBIST @@ -2268,18 +2322,18 @@ void presentByAssoc(TargetInfoVector& io_funcTargets, } break; }// MCBIST - case TYPE_MCS: + + case TYPE_MCS: //NIMBUS { - // No Child MEMBUFs or MCAs - // If next is not a MEMBUF or MCA sharing the same MCS, deconfig MCS + // No Child MCAs + // If next is not an MCA sharing the same MCS, deconfig MCS if ( (l_nextTargetInfo == NULL) || - ( (l_nextTargetInfo->type != TYPE_MEMBUF) && - (l_nextTargetInfo->type != TYPE_MCA) ) || + (l_nextTargetInfo->type != TYPE_MCA) || !isSameSubPath(l_curTargetInfo, *l_nextTargetInfo) ) { - // Disable MCS - NO_CHILD_MEMBUF_OR_MCA + // Disable MCS - NO_CHILD_MCA l_curTargetInfo.reason = - DeconfigGard::DECONFIGURED_BY_NO_CHILD_MEMBUF_OR_MCA; + DeconfigGard::DECONFIGURED_BY_NO_CHILD_MCA; } // No Parent MCBIST @@ -2319,7 +2373,143 @@ void presentByAssoc(TargetInfoVector& io_funcTargets, break; } // MCS - case TYPE_MEMBUF: + case TYPE_MC: //CUMULUS + { + // No Child MIs + // If next is not a MI sharing the same MC, deconfig MC + if ( (l_nextTargetInfo == NULL) || + (l_nextTargetInfo->type != TYPE_MI) || + !isSameSubPath(l_curTargetInfo, *l_nextTargetInfo) ) + { + // Disable MC - NO_CHILD_MI + l_curTargetInfo.reason = + DeconfigGard::DECONFIGURED_BY_NO_CHILD_MI; + // Add target to Deconfig vector to be deconfigured later + o_targToDeconfig.push_back(l_curTargetInfo); + // Remove target from funcTargets + io_funcTargets.erase(it); + + //Just erased current MC, so MI/DMI index invalid + l_MIIndex = __INT_MAX__; + l_DMIIndex = __INT_MAX__; + } + // Update MC Index + else + { + l_MCIndex = i; + l_MIIndex = __INT_MAX__; //New MC,so MI index invalid + l_DMIIndex = __INT_MAX__; //New MC,so DMI index invalid + i++; + continue; + } + break; + }// MC + + case TYPE_MI: //CUMULUS + { + // No Child DMIs + // If next is not a DMI sharing the same MI, deconfig MI + if ( (l_nextTargetInfo == NULL) || + ( l_nextTargetInfo->type != TYPE_DMI) || + !isSameSubPath(l_curTargetInfo, *l_nextTargetInfo) ) + { + // Disable MI - NO_CHILD_DMI + l_curTargetInfo.reason = + DeconfigGard::DECONFIGURED_BY_NO_CHILD_DMI; + + } + // No Parent MC + // If MI doesn't share the same MC as MIIndex, deconfig MI + else if ( (l_MCIndex == __INT_MAX__) || + !isSameSubPath(l_curTargetInfo, io_funcTargets[l_MCIndex])) + { + // Disable MI - NO_PARENT_MC + l_curTargetInfo.reason = + DeconfigGard::DECONFIGURED_BY_NO_PARENT_MC; + } + // Update MI Index + else + { + l_MIIndex = i; + l_DMIIndex = __INT_MAX__; //New MI, so DMI index invalid + i++; + continue; + } + // Add target to Deconfig vector to be deconfigured later + o_targToDeconfig.push_back(l_curTargetInfo); + // Remove target from funcTargets + io_funcTargets.erase(it); + + // Backtrack to last MC + if ( l_MCIndex != __INT_MAX__ ) + { + i = l_MCIndex; + l_MIIndex = __INT_MAX__; //New MC, MI index invalid + l_DMIIndex = __INT_MAX__; //New MC, DMI index invalid + } + // Backtrack to beginning if no MC has been seen yet + else + { + i = 0; + } + break; + } // MI + + case TYPE_DMI: //CUMULUS + { + // No Child MEMBUFs + // If next is not a MEMBUF sharing the same DMI, deconfig DMI + if ( (l_nextTargetInfo == NULL) || + ( l_nextTargetInfo->type != TYPE_MEMBUF) || + !isSameSubPath(l_curTargetInfo, *l_nextTargetInfo) ) + { + // Disable DMI - NO_CHILD_MEMBUF + l_curTargetInfo.reason = + DeconfigGard::DECONFIGURED_BY_NO_CHILD_MEMBUF; + + } + // No Parent MI + // If DMI doesn't share the same MI as DMIIndex, deconfig DMI + else if ( (l_MIIndex == __INT_MAX__) || + !isSameSubPath(l_curTargetInfo, io_funcTargets[l_MIIndex])) + { + // Disable DMI - NO_PARENT_MI + l_curTargetInfo.reason = + DeconfigGard::DECONFIGURED_BY_NO_PARENT_MI; + } + // Update DMI Index + else + { + l_DMIIndex = i; + i++; + continue; + } + // Add target to Deconfig vector to be deconfigured later + o_targToDeconfig.push_back(l_curTargetInfo); + // Remove target from funcTargets + io_funcTargets.erase(it); + + // Backtrack to last MI + if ( l_MIIndex != __INT_MAX__ ) + { + i = l_MIIndex; + l_DMIIndex = __INT_MAX__; //New MI, DMI index invalid + } + //Backtrack to last MC, if no MI has been seen yet + else if ( l_MCIndex != __INT_MAX__ ) + { + i = l_MCIndex; + l_DMIIndex = __INT_MAX__; //New MC, DMI index invalid + } + // Backtrack to beginning if no MI has been seen yet + else + { + i = 0; + } + break; + } // DMI + + case TYPE_MEMBUF: // CUMULUS { // No Child MBAs // If next is not a MBA sharing the same MEMBUF, deconfig MEMBUF @@ -2331,14 +2521,15 @@ void presentByAssoc(TargetInfoVector& io_funcTargets, l_curTargetInfo.reason = DeconfigGard::DECONFIGURED_BY_NO_CHILD_MBA; } - // No Parent MCS - // If MEMBUF doesn't share the same MCS as MCSIndex, deconfig MEMBUF - else if ( (l_MCSIndex == __INT_MAX__) || - !isSameSubPath(l_curTargetInfo, io_funcTargets[l_MCSIndex])) + // No Parent DMI (CUMULUS) + // If MEMBUF doesn't share the same same DMI as DMIIndex (for CUMULUS), + // deconfig MEMBUF + else if ((l_DMIIndex == __INT_MAX__) || + !isSameSubPath(l_curTargetInfo, io_funcTargets[l_DMIIndex])) { - // Disable MEMBUF - NO_PARENT_MCS + // Disable MEMBUF - NO_PARENT_MCS_OR_DMI l_curTargetInfo.reason = - DeconfigGard::DECONFIGURED_BY_NO_PARENT_MCS; + DeconfigGard::DECONFIGURED_BY_NO_PARENT_DMI; } // Update MEMBUF Index else @@ -2353,12 +2544,23 @@ void presentByAssoc(TargetInfoVector& io_funcTargets, // Remove target from funcTargets io_funcTargets.erase(it); - // Backtrack to last MCS - if ( l_MCSIndex != __INT_MAX__ ) + //Backtrack to last DMI (CUMULUS), if no MEMBUF has been seen yet + if ( l_DMIIndex != __INT_MAX__ ) { - i = l_MCSIndex; + i = l_DMIIndex; } - // Backtrack to beginning if no MCS has been seen yet + //Backtrack to last MI (CUMULUS), if no DMI has been seen yet + else if ( l_MIIndex != __INT_MAX__ ) + { + i = l_MIIndex; + } + //Backtrack to last MC (CUMULUS), if no MI has been seen yet + else if ( l_MCIndex != __INT_MAX__ ) + { + i = l_MCIndex; + } + // Backtrack to beginning if no MCS (NIMBUS) or DMI (CUMULUS) + // has been seen yet else { i = 0; @@ -2366,7 +2568,7 @@ void presentByAssoc(TargetInfoVector& io_funcTargets, break; } // MEMBUF - case TYPE_MBA: + case TYPE_MBA: //CUMULUS { // No Child DIMMs // If next is not a DIMM sharing the same MBA, deconfig MBA @@ -2405,12 +2607,22 @@ void presentByAssoc(TargetInfoVector& io_funcTargets, { i = l_MEMBUFIndex; } - // Backtrack to last MCS if no MEMBUF has been seen yet - else if ( l_MCSIndex != __INT_MAX__) + //Backtrack to last DMI (CUMULUS), if no MEMBUF has been seen yet + else if ( l_DMIIndex != __INT_MAX__ ) { - i = l_MCSIndex; + i = l_DMIIndex; } - // Backtrack to beginning if no MCS has been seen yet + //Backtrack to last MI (CUMULUS), if no DMI has been seen yet + else if ( l_MIIndex != __INT_MAX__ ) + { + i = l_MIIndex; + } + //Backtrack to last MC (CUMULUS), if no MI has been seen yet + else if ( l_MCIndex != __INT_MAX__ ) + { + i = l_MCIndex; + } + // Backtrack to beginning else { i = 0; @@ -2495,26 +2707,41 @@ void presentByAssoc(TargetInfoVector& io_funcTargets, { i = l_MBAIndex; } - // Backtrack to last MCA + // Backtrack to last MCA (NIMBUS) else if ( l_MCAIndex != __INT_MAX__) { i = l_MCAIndex; } - // Backtrack to last MEMBUF if no MBA has been seen yet - else if ( l_MEMBUFIndex != __INT_MAX__) - { - i = l_MEMBUFIndex; - } - // Backtrack to last MCS if no MEMBUF has been seen yet + // Backtrack to last MCS (NIMBUS) if no MCA has been seen yet else if ( l_MCSIndex != __INT_MAX__) { i = l_MCSIndex; } - // Backtrack to last MCS if no MEMBUF has been seen yet + // Backtrack to last MCBIST (NIMBUS) if no MCS has been seen yet else if ( l_MCBISTIndex != __INT_MAX__) { i = l_MCBISTIndex; } + // Backtrack to last MEMBUF (CUMULUS) if no MBA has been seen yet + else if ( l_MEMBUFIndex != __INT_MAX__) + { + i = l_MEMBUFIndex; + } + //Backtrack to last DMI (CUMULUS),if no MEMBUF has been seen yet + else if ( l_DMIIndex != __INT_MAX__ ) + { + i = l_DMIIndex; + } + //Backtrack to last MI (CUMULUS), if no DMI has been seen yet + else if ( l_MIIndex != __INT_MAX__ ) + { + i = l_MIIndex; + } + //Backtrack to last MC (CUMULUS), if no MI has been seen yet + else if ( l_MCIndex != __INT_MAX__ ) + { + i = l_MCIndex; + } // Backtrack to beginning if no MCS has been seen yet else { diff --git a/src/usr/hwas/test/hwasGardTest.H b/src/usr/hwas/test/hwasGardTest.H index cdbb48d2d..5a5486c27 100644 --- a/src/usr/hwas/test/hwasGardTest.H +++ b/src/usr/hwas/test/hwasGardTest.H @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2011,2016 */ +/* Contributors Listed Below - COPYRIGHT 2011,2017 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -4383,7 +4383,7 @@ public: void testdeconfigPresentByAssoc1() { TS_TRACE(INFO_MRK "testDeconfigureAssocProc1: Started"); - // This tests the scenario where there is 1 mcs, membuff, mba and dimm + // This tests the scenario where there is 1 mc, mi, dmi, membuff, mba and dimm // This is done to ensure that the algorithm works on each edge case TargetInfoVector l_targets; @@ -4391,42 +4391,69 @@ public: TargetInfo l_TargetInfo; l_TargetInfo.pThisTarget = NULL; - EntityPath l_ep[4]; + EntityPath l_ep[6]; - // MCS only - l_ep[0].addLast(TYPE_MCS, 0); + // MC only + l_ep[0].addLast(TYPE_MC, 0); l_TargetInfo.affinityPath = l_ep[0]; // SHOULD GET DECONFIGURED - l_TargetInfo.type = TYPE_MCS; + l_TargetInfo.type = TYPE_MC; + + l_targets.push_back(l_TargetInfo); + + presentByAssoc(l_targets, l_targToDeconfig); + + // MI only + l_ep[1].addLast(TYPE_MC, 0); + l_ep[1].addLast(TYPE_MI, 0); + l_TargetInfo.affinityPath = l_ep[1]; // SHOULD GET DECONFIGURED + l_TargetInfo.type = TYPE_MI; + + l_targets.push_back(l_TargetInfo); + + presentByAssoc(l_targets, l_targToDeconfig); + + // DMI only + l_ep[2].addLast(TYPE_MC, 0); + l_ep[2].addLast(TYPE_MI, 0); + l_ep[2].addLast(TYPE_DMI, 0); + l_TargetInfo.affinityPath = l_ep[2]; // SHOULD GET DECONFIGURED + l_TargetInfo.type = TYPE_DMI; l_targets.push_back(l_TargetInfo); presentByAssoc(l_targets, l_targToDeconfig); // MEMBUF only - l_ep[1].addLast(TYPE_MCS, 0); - l_ep[1].addLast(TYPE_MEMBUF, 0); - l_TargetInfo.affinityPath = l_ep[1]; // SHOULD GET DECONFIGURED + l_ep[3].addLast(TYPE_MC, 0); + l_ep[3].addLast(TYPE_MI, 0); + l_ep[3].addLast(TYPE_DMI, 0); + l_ep[3].addLast(TYPE_MEMBUF, 0); + l_TargetInfo.affinityPath = l_ep[3]; // SHOULD GET DECONFIGURED l_TargetInfo.type = TYPE_MEMBUF; l_targets.push_back(l_TargetInfo); presentByAssoc(l_targets, l_targToDeconfig); // MBA only - l_ep[2].addLast(TYPE_MCS, 0); - l_ep[2].addLast(TYPE_MEMBUF, 0); - l_ep[2].addLast(TYPE_MBA, 0); - l_TargetInfo.affinityPath = l_ep[2]; // SHOULD GET DECONFIGURED + l_ep[4].addLast(TYPE_MC, 0); + l_ep[4].addLast(TYPE_MI, 0); + l_ep[4].addLast(TYPE_DMI, 0); + l_ep[4].addLast(TYPE_MEMBUF, 0); + l_ep[4].addLast(TYPE_MBA, 0); + l_TargetInfo.affinityPath = l_ep[4]; // SHOULD GET DECONFIGURED l_TargetInfo.type = TYPE_MBA; l_targets.push_back(l_TargetInfo); presentByAssoc(l_targets, l_targToDeconfig); // DIMM only - l_ep[3].addLast(TYPE_MCS, 0); - l_ep[3].addLast(TYPE_MEMBUF, 0); - l_ep[3].addLast(TYPE_MBA, 0); - l_ep[3].addLast(TYPE_DIMM, 0); - l_TargetInfo.affinityPath = l_ep[3]; // SHOULD GET DECONFIGURED + l_ep[5].addLast(TYPE_MC, 0); + l_ep[5].addLast(TYPE_MI, 0); + l_ep[5].addLast(TYPE_DMI, 0); + l_ep[5].addLast(TYPE_MEMBUF, 0); + l_ep[5].addLast(TYPE_MBA, 0); + l_ep[5].addLast(TYPE_DIMM, 0); + l_TargetInfo.affinityPath = l_ep[5]; // SHOULD GET DECONFIGURED l_TargetInfo.type = TYPE_DIMM; l_targets.push_back(l_TargetInfo); @@ -4435,11 +4462,13 @@ public: // Check result std::sort(l_targToDeconfig.begin(), l_targToDeconfig.end(), compareAffinityCXX); - if ((l_targToDeconfig.size() == 4) && + if ((l_targToDeconfig.size() == 6) && (l_targToDeconfig[0].affinityPath == l_ep[0]) && (l_targToDeconfig[1].affinityPath == l_ep[1]) && (l_targToDeconfig[2].affinityPath == l_ep[2]) && - (l_targToDeconfig[3].affinityPath == l_ep[3]) ) + (l_targToDeconfig[3].affinityPath == l_ep[3]) && + (l_targToDeconfig[4].affinityPath == l_ep[4]) && + (l_targToDeconfig[5].affinityPath == l_ep[5]) ) { TS_TRACE(INFO_MRK "testdeconfigPresentByAssoc1: Success"); } @@ -4461,11 +4490,11 @@ public: void testdeconfigPresentByAssoc2() { TS_TRACE(INFO_MRK "testdeconfigPresentByAssoc2: Started"); - // This test the scenario where MCS Group 0 does not have a membuf - // MCS Group 1 is fully populated + // This test the scenario where MC Group 0 does not have a membuf + // MC Group 1 is fully populated // User-defined number of targets - size_t NUM_TARGS = 6; + size_t NUM_TARGS = 7; // Input target vector TargetInfoVector l_targets; @@ -4477,25 +4506,26 @@ public: // Output target vector TargetInfoVector l_targToDeconfig; - // Add MCS Group 0 + // Add MC Group 0 //l_targets[0].pThisTarget = NULL; - l_targets[0].affinityPath.addLast(TYPE_MCBIST, 0); - l_targets[0].affinityPath.addLast(TYPE_MCS, 0); + l_targets[0].affinityPath.addLast(TYPE_MC, 0); l_ep[0] = l_targets[0].affinityPath; // SHOULD GET DECONFIGURED - l_targets[0].type = TYPE_MCS; + l_targets[0].type = TYPE_MC; // Add MEMBUF Group 1 //l_targets[1].pThisTarget = NULL; - l_targets[1].affinityPath.addLast(TYPE_MCBIST,0); - l_targets[1].affinityPath.addLast(TYPE_MCS, 1); + l_targets[1].affinityPath.addLast(TYPE_MC,1); + l_targets[1].affinityPath.addLast(TYPE_MI, 0); + l_targets[1].affinityPath.addLast(TYPE_DMI, 0); l_targets[1].affinityPath.addLast(TYPE_MEMBUF, 0); l_ep[1] = l_targets[1].affinityPath; l_targets[1].type = TYPE_MEMBUF; // Add MBA Group 1 //l_targets[2].pThisTarget = NULL; - l_targets[2].affinityPath.addLast(TYPE_MCBIST,0); - l_targets[2].affinityPath.addLast(TYPE_MCS, 1); + l_targets[2].affinityPath.addLast(TYPE_MC,1); + l_targets[2].affinityPath.addLast(TYPE_MI, 0); + l_targets[2].affinityPath.addLast(TYPE_DMI, 0); l_targets[2].affinityPath.addLast(TYPE_MEMBUF, 0); l_targets[2].affinityPath.addLast(TYPE_MBA, 0); l_ep[2] = l_targets[2].affinityPath; @@ -4503,25 +4533,35 @@ public: // Add DIMM Group 1 //l_targets[3].pThisTarget = NULL; - l_targets[3].affinityPath.addLast(TYPE_MCBIST,0); - l_targets[3].affinityPath.addLast(TYPE_MCS, 1); + l_targets[3].affinityPath.addLast(TYPE_MC,1); + l_targets[3].affinityPath.addLast(TYPE_MI, 0); + l_targets[3].affinityPath.addLast(TYPE_DMI, 0); l_targets[3].affinityPath.addLast(TYPE_MEMBUF, 0); l_targets[3].affinityPath.addLast(TYPE_MBA, 0); l_targets[3].affinityPath.addLast(TYPE_DIMM, 0); l_ep[3] = l_targets[3].affinityPath; l_targets[3].type = TYPE_DIMM; - // Add MCS Group 1 + // Add MI Group 1 //l_targets[4].pThisTarget = NULL; - l_targets[4].affinityPath.addLast(TYPE_MCBIST,0); - l_targets[4].affinityPath.addLast(TYPE_MCS, 1); + l_targets[4].affinityPath.addLast(TYPE_MC,1); + l_targets[4].affinityPath.addLast(TYPE_MI, 0); l_ep[4] = l_targets[4].affinityPath; - l_targets[4].type = TYPE_MCS; - - // Add MCBIST Top Target - l_targets[5].affinityPath.addLast(TYPE_MCBIST,0); + l_targets[4].type = TYPE_MI; + + // Add DMI Group 1 + //l_targets[5].pThisTarget = NULL; + l_targets[5].affinityPath.addLast(TYPE_MC,1); + l_targets[5].affinityPath.addLast(TYPE_MI, 0); + l_targets[5].affinityPath.addLast(TYPE_DMI, 0); l_ep[5] = l_targets[5].affinityPath; - l_targets[5].type = TYPE_MCBIST; + l_targets[5].type = TYPE_DMI; + + + // Add MC Group 1 + l_targets[6].affinityPath.addLast(TYPE_MC,1); + l_ep[6] = l_targets[6].affinityPath; + l_targets[6].type = TYPE_MC; presentByAssoc(l_targets, l_targToDeconfig); @@ -4551,12 +4591,12 @@ public: void testdeconfigPresentByAssoc3() { TS_TRACE(INFO_MRK "testdeconfigPresentByAssoc3: Started"); - // This test the scenario where MEMBUF Group 1 has no MCS and then + // This test the scenario where MEMBUF Group 1 has no DMI and then // DIMM Group 1 has no MEMBUF because MEMBUF 1 will be marked for // deconfigure // User-defined number of targets - size_t NUM_TARGS = 8; + size_t NUM_TARGS = 9; // Input target vector TargetInfoVector l_targets; @@ -4567,25 +4607,28 @@ public: // Output target vector TargetInfoVector l_targToDeconfig; - // Add MCS Group 0 + // Add DMI Group 0 l_targets[0].pThisTarget = NULL; - l_targets[0].affinityPath.addLast(TYPE_MCBIST, 0); - l_targets[0].affinityPath.addLast(TYPE_MCS, 0); + l_targets[0].affinityPath.addLast(TYPE_MC, 0); + l_targets[0].affinityPath.addLast(TYPE_MI, 0); + l_targets[0].affinityPath.addLast(TYPE_DMI, 0); l_ep[0] = l_targets[0].affinityPath; - l_targets[0].type = TYPE_MCS; + l_targets[0].type = TYPE_DMI; // Add MEMBUF Group 0 l_targets[1].pThisTarget = NULL; - l_targets[1].affinityPath.addLast(TYPE_MCBIST, 0); - l_targets[1].affinityPath.addLast(TYPE_MCS, 0); + l_targets[1].affinityPath.addLast(TYPE_MC, 0); + l_targets[1].affinityPath.addLast(TYPE_MI, 0); + l_targets[1].affinityPath.addLast(TYPE_DMI, 0); l_targets[1].affinityPath.addLast(TYPE_MEMBUF, 0); l_ep[1] = l_targets[1].affinityPath; l_targets[1].type = TYPE_MEMBUF; // Add MBA Group 0 l_targets[2].pThisTarget = NULL; - l_targets[2].affinityPath.addLast(TYPE_MCBIST, 0); - l_targets[2].affinityPath.addLast(TYPE_MCS, 0); + l_targets[2].affinityPath.addLast(TYPE_MC, 0); + l_targets[2].affinityPath.addLast(TYPE_MI, 0); + l_targets[2].affinityPath.addLast(TYPE_DMI, 0); l_targets[2].affinityPath.addLast(TYPE_MEMBUF, 0); l_targets[2].affinityPath.addLast(TYPE_MBA, 0); l_ep[2] = l_targets[2].affinityPath; @@ -4593,8 +4636,9 @@ public: // Add MBA Group 1 l_targets[3].pThisTarget = NULL; - l_targets[3].affinityPath.addLast(TYPE_MCBIST, 0); - l_targets[3].affinityPath.addLast(TYPE_MCS, 1); + l_targets[3].affinityPath.addLast(TYPE_MC, 0); + l_targets[3].affinityPath.addLast(TYPE_MI, 0); + l_targets[3].affinityPath.addLast(TYPE_DMI, 1); l_targets[3].affinityPath.addLast(TYPE_MEMBUF, 0); l_targets[3].affinityPath.addLast(TYPE_MBA, 0); l_ep[3] = l_targets[3].affinityPath; // SHOULD GET DECONFIGURED @@ -4602,16 +4646,18 @@ public: // Add MEMBUF Group 1 l_targets[4].pThisTarget = NULL; - l_targets[4].affinityPath.addLast(TYPE_MCBIST, 0); - l_targets[4].affinityPath.addLast(TYPE_MCS, 1); + l_targets[4].affinityPath.addLast(TYPE_MC, 0); + l_targets[4].affinityPath.addLast(TYPE_MI, 0); + l_targets[4].affinityPath.addLast(TYPE_DMI, 1); l_targets[4].affinityPath.addLast(TYPE_MEMBUF, 0); l_ep[4] = l_targets[4].affinityPath; // SHOULD GET DECONFIGURED l_targets[4].type = TYPE_MEMBUF; // Add DIMM Group 0 l_targets[5].pThisTarget = NULL; - l_targets[5].affinityPath.addLast(TYPE_MCBIST, 0); - l_targets[5].affinityPath.addLast(TYPE_MCS, 0); + l_targets[5].affinityPath.addLast(TYPE_MC, 0); + l_targets[5].affinityPath.addLast(TYPE_MI, 0); + l_targets[5].affinityPath.addLast(TYPE_DMI, 0); l_targets[5].affinityPath.addLast(TYPE_MEMBUF, 0); l_targets[5].affinityPath.addLast(TYPE_MBA, 0); l_targets[5].affinityPath.addLast(TYPE_DIMM, 0); @@ -4620,19 +4666,27 @@ public: // Add DIMM Group 1 l_targets[6].pThisTarget = NULL; - l_targets[6].affinityPath.addLast(TYPE_MCBIST, 0); - l_targets[6].affinityPath.addLast(TYPE_MCS, 1); + l_targets[6].affinityPath.addLast(TYPE_MC, 0); + l_targets[6].affinityPath.addLast(TYPE_MI, 0); + l_targets[6].affinityPath.addLast(TYPE_DMI, 1); l_targets[6].affinityPath.addLast(TYPE_MEMBUF, 0); l_targets[6].affinityPath.addLast(TYPE_MBA, 0); l_targets[6].affinityPath.addLast(TYPE_DIMM, 0); l_ep[6] = l_targets[6].affinityPath; // SHOULD GET DECONFIGURED l_targets[6].type = TYPE_DIMM; - // Add MCBIST + // Add MC l_targets[7].pThisTarget = NULL; - l_targets[7].affinityPath.addLast(TYPE_MCBIST, 0); - l_ep[7] = l_targets[0].affinityPath; - l_targets[7].type = TYPE_MCBIST; + l_targets[7].affinityPath.addLast(TYPE_MC, 0); + l_ep[7] = l_targets[7].affinityPath; + l_targets[7].type = TYPE_MC; + + // Add MI + l_targets[8].pThisTarget = NULL; + l_targets[8].affinityPath.addLast(TYPE_MC, 0); + l_targets[8].affinityPath.addLast(TYPE_MI, 0); + l_ep[8] = l_targets[8].affinityPath; + l_targets[8].type = TYPE_MI; presentByAssoc(l_targets, l_targToDeconfig); @@ -4640,9 +4694,9 @@ public: std::sort(l_targToDeconfig.begin(), l_targToDeconfig.end(), compareAffinityCXX); if ((l_targToDeconfig.size() == 3) && - (l_targToDeconfig[0].affinityPath == l_ep[4]) && // 10 MEMBUF - (l_targToDeconfig[1].affinityPath == l_ep[3]) && // 100 MBA - (l_targToDeconfig[2].affinityPath == l_ep[6]) ) // 1000 DIMM + (l_targToDeconfig[0].affinityPath == l_ep[4]) && // 0010 MEMBUF + (l_targToDeconfig[1].affinityPath == l_ep[3]) && // 00100 MBA + (l_targToDeconfig[2].affinityPath == l_ep[6]) ) // 001000 DIMM { TS_TRACE(INFO_MRK "testdeconfigPresentByAssoc3: Success"); } @@ -4665,10 +4719,10 @@ public: { TS_TRACE(INFO_MRK "testdeconfigPresentByAssoc4: Started"); // This test the scenario where MEMBUF Group 0 has no MBAs causing - // MCS Group 0 to also be deconfigured. + // MC Group 0 to also be deconfigured. // User-defined number of targets - size_t NUM_TARGS = 2; + size_t NUM_TARGS = 4; // Input target vector TargetInfoVector l_targets; @@ -4679,27 +4733,46 @@ public: // Output target vector TargetInfoVector l_targToDeconfig; - // Add MCS Group 0 + // Add MC Group 0 l_targets[0].pThisTarget = NULL; - l_targets[0].affinityPath.addLast(TYPE_MCS, 0); + l_targets[0].affinityPath.addLast(TYPE_MC, 0); l_ep[0] = l_targets[0].affinityPath; // SHOULD BE DECONFIGURED - l_targets[0].type = TYPE_MCS; - - // Add MEMBUF Group 0 + l_targets[0].type = TYPE_MC; + + // Add MI Group 0 l_targets[1].pThisTarget = NULL; - l_targets[1].affinityPath.addLast(TYPE_MCS, 0); - l_targets[1].affinityPath.addLast(TYPE_MEMBUF, 0); + l_targets[1].affinityPath.addLast(TYPE_MC, 0); + l_targets[1].affinityPath.addLast(TYPE_MI, 0); l_ep[1] = l_targets[1].affinityPath; // SHOULD BE DECONFIGURED - l_targets[1].type = TYPE_MEMBUF; + l_targets[1].type = TYPE_MI; + + // Add DMI Group 0 + l_targets[2].pThisTarget = NULL; + l_targets[2].affinityPath.addLast(TYPE_MC, 0); + l_targets[2].affinityPath.addLast(TYPE_MI, 0); + l_targets[2].affinityPath.addLast(TYPE_DMI, 0); + l_ep[2] = l_targets[2].affinityPath; // SHOULD BE DECONFIGURED + l_targets[2].type = TYPE_DMI; + + // Add MEMBUF Group 0 + l_targets[3].pThisTarget = NULL; + l_targets[3].affinityPath.addLast(TYPE_MC, 0); + l_targets[3].affinityPath.addLast(TYPE_MI, 0); + l_targets[3].affinityPath.addLast(TYPE_DMI, 0); + l_targets[3].affinityPath.addLast(TYPE_MEMBUF, 0); + l_ep[3] = l_targets[3].affinityPath; // SHOULD BE DECONFIGURED + l_targets[3].type = TYPE_MEMBUF; presentByAssoc(l_targets, l_targToDeconfig); // Check result std::sort(l_targToDeconfig.begin(), l_targToDeconfig.end(), compareAffinityCXX); - if ((l_targToDeconfig.size() == 2) && - (l_targToDeconfig[0].affinityPath == l_ep[0]) && // 0 MCS - (l_targToDeconfig[1].affinityPath == l_ep[1]) ) // 00 MEMBUF + if ((l_targToDeconfig.size() == 4) && + (l_targToDeconfig[0].affinityPath == l_ep[0]) && // 0 MC + (l_targToDeconfig[1].affinityPath == l_ep[1]) && // 00 MI + (l_targToDeconfig[2].affinityPath == l_ep[2]) && // 000 DMI + (l_targToDeconfig[3].affinityPath == l_ep[3]) ) // 0000 MEMBUF { TS_TRACE(INFO_MRK "testdeconfigPresentByAssoc4: Success"); } @@ -4722,7 +4795,7 @@ public: { TS_TRACE(INFO_MRK "testdeconfigPresentByAssoc5: Started"); // This test the scenario where MEMBUF Group 0 and MBA Group 0 having - // no MCS. This tests the MCSINDEX edge case because one never existed + // no DMI. This tests the DMIINDEX edge case because one never existed // User-defined number of targets size_t NUM_TARGS = 2; @@ -4738,14 +4811,18 @@ public: // Add MEMBUF Group 0 l_targets[0].pThisTarget = NULL; - l_targets[0].affinityPath.addLast(TYPE_MCS, 0); + l_targets[0].affinityPath.addLast(TYPE_MC, 0); + l_targets[0].affinityPath.addLast(TYPE_MI, 0); + l_targets[0].affinityPath.addLast(TYPE_DMI, 0); l_targets[0].affinityPath.addLast(TYPE_MEMBUF, 0); l_ep[0] = l_targets[0].affinityPath; // SHOULD BE DECONFIGURED l_targets[0].type = TYPE_MEMBUF; // Add MBA Group 0 l_targets[1].pThisTarget = NULL; - l_targets[1].affinityPath.addLast(TYPE_MCS, 0); + l_targets[1].affinityPath.addLast(TYPE_MC, 0); + l_targets[1].affinityPath.addLast(TYPE_MI, 0); + l_targets[1].affinityPath.addLast(TYPE_DMI, 0); l_targets[1].affinityPath.addLast(TYPE_MEMBUF, 0); l_targets[1].affinityPath.addLast(TYPE_MBA, 0); l_ep[1] = l_targets[1].affinityPath; // SHOULD BE DECONFIGURED @@ -4757,8 +4834,8 @@ public: std::sort(l_targToDeconfig.begin(), l_targToDeconfig.end(), compareAffinityCXX); if ((l_targToDeconfig.size() == 2) && - (l_targToDeconfig[0].affinityPath == l_ep[0]) && // 00 MEMBUF - (l_targToDeconfig[1].affinityPath == l_ep[1]) ) // 000 MBA + (l_targToDeconfig[0].affinityPath == l_ep[0]) && // 0000 MEMBUF + (l_targToDeconfig[1].affinityPath == l_ep[1]) ) // 00000 MBA { TS_TRACE(INFO_MRK "testdeconfigPresentByAssoc5: Success"); } @@ -4797,7 +4874,9 @@ public: // Add MBA Group 0 l_targets[0].pThisTarget = NULL; - l_targets[0].affinityPath.addLast(TYPE_MCS, 0); + l_targets[0].affinityPath.addLast(TYPE_MC, 0); + l_targets[0].affinityPath.addLast(TYPE_MI, 0); + l_targets[0].affinityPath.addLast(TYPE_DMI, 0); l_targets[0].affinityPath.addLast(TYPE_MEMBUF, 0); l_targets[0].affinityPath.addLast(TYPE_MBA, 0); l_ep[0] = l_targets[0].affinityPath; // SHOULD BE DECONFIGURED @@ -4805,7 +4884,9 @@ public: // Add DIMM Group 0 l_targets[1].pThisTarget = NULL; - l_targets[1].affinityPath.addLast(TYPE_MCS, 0); + l_targets[1].affinityPath.addLast(TYPE_MC, 0); + l_targets[1].affinityPath.addLast(TYPE_MI, 0); + l_targets[1].affinityPath.addLast(TYPE_DMI, 0); l_targets[1].affinityPath.addLast(TYPE_MEMBUF, 0); l_targets[1].affinityPath.addLast(TYPE_MBA, 0); l_targets[1].affinityPath.addLast(TYPE_DIMM, 0); @@ -4818,8 +4899,8 @@ public: std::sort(l_targToDeconfig.begin(), l_targToDeconfig.end(), compareAffinityCXX); if ((l_targToDeconfig.size() == 2) && - (l_targToDeconfig[0].affinityPath == l_ep[0]) && // 000 MBA - (l_targToDeconfig[1].affinityPath == l_ep[1]) ) // 0000 DIMM + (l_targToDeconfig[0].affinityPath == l_ep[0]) && // 00000 MBA + (l_targToDeconfig[1].affinityPath == l_ep[1]) ) // 000000 DIMM { TS_TRACE(INFO_MRK "testdeconfigPresentByAssoc6: Success"); } @@ -4844,7 +4925,7 @@ public: // This test the scenario where MBA Group 1 has no DIMMS // User-defined number of targets - size_t NUM_TARGS = 6; + size_t NUM_TARGS = 7; // Input target vector TargetInfoVector l_targets; @@ -4855,25 +4936,28 @@ public: // Output target vector TargetInfoVector l_targToDeconfig; - // Add MCS Group 0 + // Add DMI Group 0 l_targets[0].pThisTarget = NULL; - l_targets[0].affinityPath.addLast(TYPE_MCBIST, 0); - l_targets[0].affinityPath.addLast(TYPE_MCS, 0); + l_targets[0].affinityPath.addLast(TYPE_MC, 0); + l_targets[0].affinityPath.addLast(TYPE_MI, 0); + l_targets[0].affinityPath.addLast(TYPE_DMI, 0); l_ep[0] = l_targets[0].affinityPath; - l_targets[0].type = TYPE_MCS; + l_targets[0].type = TYPE_DMI; // Add MEMBUF Group 0 l_targets[1].pThisTarget = NULL; - l_targets[1].affinityPath.addLast(TYPE_MCBIST, 0); - l_targets[1].affinityPath.addLast(TYPE_MCS, 0); + l_targets[1].affinityPath.addLast(TYPE_MC, 0); + l_targets[1].affinityPath.addLast(TYPE_MI, 0); + l_targets[1].affinityPath.addLast(TYPE_DMI, 0); l_targets[1].affinityPath.addLast(TYPE_MEMBUF, 0); l_ep[1] = l_targets[1].affinityPath; l_targets[1].type = TYPE_MEMBUF; // Add MBA Group 0 l_targets[2].pThisTarget = NULL; - l_targets[2].affinityPath.addLast(TYPE_MCBIST, 0); - l_targets[2].affinityPath.addLast(TYPE_MCS, 0); + l_targets[2].affinityPath.addLast(TYPE_MC, 0); + l_targets[2].affinityPath.addLast(TYPE_MI, 0); + l_targets[2].affinityPath.addLast(TYPE_DMI, 0); l_targets[2].affinityPath.addLast(TYPE_MEMBUF, 0); l_targets[2].affinityPath.addLast(TYPE_MBA, 0); l_ep[2] = l_targets[2].affinityPath; @@ -4881,8 +4965,9 @@ public: // Add DIMM Group 0 l_targets[3].pThisTarget = NULL; - l_targets[3].affinityPath.addLast(TYPE_MCBIST, 0); - l_targets[3].affinityPath.addLast(TYPE_MCS, 0); + l_targets[3].affinityPath.addLast(TYPE_MC, 0); + l_targets[3].affinityPath.addLast(TYPE_MI, 0); + l_targets[3].affinityPath.addLast(TYPE_DMI, 0); l_targets[3].affinityPath.addLast(TYPE_MEMBUF, 0); l_targets[3].affinityPath.addLast(TYPE_MBA, 0); l_targets[3].affinityPath.addLast(TYPE_DIMM, 0); @@ -4891,18 +4976,26 @@ public: // Add MBA Group 1 l_targets[4].pThisTarget = NULL; - l_targets[4].affinityPath.addLast(TYPE_MCBIST, 0); - l_targets[4].affinityPath.addLast(TYPE_MCS, 0); + l_targets[4].affinityPath.addLast(TYPE_MC, 0); + l_targets[4].affinityPath.addLast(TYPE_MI, 0); + l_targets[4].affinityPath.addLast(TYPE_DMI, 0); l_targets[4].affinityPath.addLast(TYPE_MEMBUF, 0); l_targets[4].affinityPath.addLast(TYPE_MBA, 1); l_ep[4] = l_targets[4].affinityPath; // SHOULD BE DECONFIGURED l_targets[4].type = TYPE_MBA; - // Add MCBIST + // Add MI Group 0 l_targets[5].pThisTarget = NULL; - l_targets[5].affinityPath.addLast(TYPE_MCBIST, 0); - l_ep[5] = l_targets[0].affinityPath; - l_targets[5].type = TYPE_MCBIST; + l_targets[5].affinityPath.addLast(TYPE_MC, 0); + l_targets[5].affinityPath.addLast(TYPE_MI, 0); + l_ep[5] = l_targets[5].affinityPath; + l_targets[5].type = TYPE_MI; + + // Add MC Group 0 + l_targets[6].pThisTarget = NULL; + l_targets[6].affinityPath.addLast(TYPE_MC, 0); + l_ep[6] = l_targets[6].affinityPath; + l_targets[6].type = TYPE_MC; presentByAssoc(l_targets, l_targToDeconfig); @@ -4936,7 +5029,7 @@ public: // and the cascade // User-defined number of targets - size_t NUM_TARGS = 12; + size_t NUM_TARGS = 13; // Input target vector TargetInfoVector l_targets; @@ -4947,66 +5040,74 @@ public: // Output target vector TargetInfoVector l_targToDeconfig; - // Add MCS Group 0 + // Add DMI Group 0 l_targets[0].pThisTarget = NULL; - l_targets[0].affinityPath.addLast(TYPE_MCBIST, 0); - l_targets[0].affinityPath.addLast(TYPE_MCS, 0); + l_targets[0].affinityPath.addLast(TYPE_MC, 0); + l_targets[0].affinityPath.addLast(TYPE_MI, 0); + l_targets[0].affinityPath.addLast(TYPE_DMI, 0); l_ep[0] = l_targets[0].affinityPath; - l_targets[0].type = TYPE_MCS; // SHOULD BE DECONFIGURED + l_targets[0].type = TYPE_DMI; // SHOULD BE DECONFIGURED // Add MEMBUF Group 0 l_targets[1].pThisTarget = NULL; - l_targets[1].affinityPath.addLast(TYPE_MCBIST, 0); - l_targets[1].affinityPath.addLast(TYPE_MCS, 0); + l_targets[1].affinityPath.addLast(TYPE_MC, 0); + l_targets[1].affinityPath.addLast(TYPE_MI, 0); + l_targets[1].affinityPath.addLast(TYPE_DMI, 0); l_targets[1].affinityPath.addLast(TYPE_MEMBUF, 0); l_ep[1] = l_targets[1].affinityPath; l_targets[1].type = TYPE_MEMBUF; // SHOULD BE DECONFIGURED // Add MBA Group 0 l_targets[2].pThisTarget = NULL; - l_targets[2].affinityPath.addLast(TYPE_MCBIST, 0); - l_targets[2].affinityPath.addLast(TYPE_MCS, 0); + l_targets[2].affinityPath.addLast(TYPE_MC, 0); + l_targets[2].affinityPath.addLast(TYPE_MI, 0); + l_targets[2].affinityPath.addLast(TYPE_DMI, 0); l_targets[2].affinityPath.addLast(TYPE_MEMBUF, 0); l_targets[2].affinityPath.addLast(TYPE_MBA, 0); l_ep[2] = l_targets[2].affinityPath; l_targets[2].type = TYPE_MBA; // SHOULD BE DECONFIGURED - // Add MCS Group 1 + // Add DMI Group 1 l_targets[3].pThisTarget = NULL; - l_targets[3].affinityPath.addLast(TYPE_MCBIST, 0); - l_targets[3].affinityPath.addLast(TYPE_MCS, 1); + l_targets[3].affinityPath.addLast(TYPE_MC, 0); + l_targets[3].affinityPath.addLast(TYPE_MI, 0); + l_targets[3].affinityPath.addLast(TYPE_DMI, 1); l_ep[3] = l_targets[3].affinityPath; - l_targets[3].type = TYPE_MCS; // SHOULD BE DECONFIGURED + l_targets[3].type = TYPE_DMI; // SHOULD BE DECONFIGURED // Add MCS Group 2 l_targets[4].pThisTarget = NULL; - l_targets[4].affinityPath.addLast(TYPE_MCBIST, 1); - l_targets[4].affinityPath.addLast(TYPE_MCS, 2); + l_targets[4].affinityPath.addLast(TYPE_MC, 0); + l_targets[4].affinityPath.addLast(TYPE_MI, 1); + l_targets[4].affinityPath.addLast(TYPE_DMI, 0); l_ep[4] = l_targets[4].affinityPath; - l_targets[4].type = TYPE_MCS; + l_targets[4].type = TYPE_DMI; // Add MEMBUF Group 0 l_targets[5].pThisTarget = NULL; - l_targets[5].affinityPath.addLast(TYPE_MCBIST, 1); - l_targets[5].affinityPath.addLast(TYPE_MCS, 2); + l_targets[5].affinityPath.addLast(TYPE_MC, 0); + l_targets[5].affinityPath.addLast(TYPE_MI, 1); + l_targets[5].affinityPath.addLast(TYPE_DMI, 0); l_targets[5].affinityPath.addLast(TYPE_MEMBUF, 0); l_ep[5] = l_targets[5].affinityPath; l_targets[5].type = TYPE_MEMBUF; // SHOULD BE DECONFIGURED // Add MEMBUF Group 1 l_targets[6].pThisTarget = NULL; - l_targets[6].affinityPath.addLast(TYPE_MCBIST, 1); - l_targets[6].affinityPath.addLast(TYPE_MCS, 2); + l_targets[6].affinityPath.addLast(TYPE_MC, 0); + l_targets[6].affinityPath.addLast(TYPE_MI, 1); + l_targets[6].affinityPath.addLast(TYPE_DMI, 0); l_targets[6].affinityPath.addLast(TYPE_MEMBUF, 1); l_ep[6] = l_targets[6].affinityPath; l_targets[6].type = TYPE_MEMBUF; // Add MBA Group 0 l_targets[7].pThisTarget = NULL; - l_targets[7].affinityPath.addLast(TYPE_MCBIST, 1); - l_targets[7].affinityPath.addLast(TYPE_MCS, 2); + l_targets[7].affinityPath.addLast(TYPE_MC, 0); + l_targets[7].affinityPath.addLast(TYPE_MI, 1); + l_targets[7].affinityPath.addLast(TYPE_DMI, 0); l_targets[7].affinityPath.addLast(TYPE_MEMBUF, 1); l_targets[7].affinityPath.addLast(TYPE_MBA, 0); l_ep[7] = l_targets[7].affinityPath; @@ -5014,8 +5115,9 @@ public: // Add MBA Group 1 l_targets[8].pThisTarget = NULL; - l_targets[8].affinityPath.addLast(TYPE_MCBIST, 1); - l_targets[8].affinityPath.addLast(TYPE_MCS, 2); + l_targets[8].affinityPath.addLast(TYPE_MC, 0); + l_targets[8].affinityPath.addLast(TYPE_MI, 1); + l_targets[8].affinityPath.addLast(TYPE_DMI, 0); l_targets[8].affinityPath.addLast(TYPE_MEMBUF, 1); l_targets[8].affinityPath.addLast(TYPE_MBA, 1); l_ep[8] = l_targets[8].affinityPath; @@ -5023,25 +5125,34 @@ public: // Add DIMM Group 1 l_targets[9].pThisTarget = NULL; - l_targets[9].affinityPath.addLast(TYPE_MCBIST, 1); - l_targets[9].affinityPath.addLast(TYPE_MCS, 2); + l_targets[9].affinityPath.addLast(TYPE_MC, 0); + l_targets[9].affinityPath.addLast(TYPE_MI, 1); + l_targets[9].affinityPath.addLast(TYPE_DMI, 0); l_targets[9].affinityPath.addLast(TYPE_MEMBUF, 1); l_targets[9].affinityPath.addLast(TYPE_MBA, 1); l_targets[9].affinityPath.addLast(TYPE_DIMM, 0); l_ep[9] = l_targets[9].affinityPath; l_targets[9].type = TYPE_DIMM; - // Add MCBIST 0 + // Add MC 0 l_targets[10].pThisTarget = NULL; - l_targets[10].affinityPath.addLast(TYPE_MCBIST, 0); + l_targets[10].affinityPath.addLast(TYPE_MC, 0); l_ep[10] = l_targets[10].affinityPath; - l_targets[10].type = TYPE_MCBIST; + l_targets[10].type = TYPE_MC; - // Add MCBIST 1 + // Add MI 0 l_targets[11].pThisTarget = NULL; - l_targets[11].affinityPath.addLast(TYPE_MCBIST, 1); + l_targets[11].affinityPath.addLast(TYPE_MC, 0); + l_targets[11].affinityPath.addLast(TYPE_MI, 0); l_ep[11] = l_targets[11].affinityPath; - l_targets[11].type = TYPE_MCBIST; + l_targets[11].type = TYPE_MI; // SHOULD BE DECONFIGURED + + // Add MI 1 + l_targets[12].pThisTarget = NULL; + l_targets[12].affinityPath.addLast(TYPE_MC, 0); + l_targets[12].affinityPath.addLast(TYPE_MI, 1); + l_ep[12] = l_targets[12].affinityPath; + l_targets[12].type = TYPE_MI; presentByAssoc(l_targets, l_targToDeconfig); @@ -5049,13 +5160,13 @@ public: std::sort(l_targToDeconfig.begin(), l_targToDeconfig.end(), compareAffinityCXX); if ((l_targToDeconfig.size() == 7) && - (l_targToDeconfig[0].affinityPath == l_ep[10]) && // 0 MCBIST - (l_targToDeconfig[1].affinityPath == l_ep[0]) && // 0 MCS - (l_targToDeconfig[2].affinityPath == l_ep[1]) && // 00 MEMBUF - (l_targToDeconfig[3].affinityPath == l_ep[2]) && // 000 MBA - (l_targToDeconfig[4].affinityPath == l_ep[3]) && // 1 MCS - (l_targToDeconfig[5].affinityPath == l_ep[5]) && // 20 MEMBUF - (l_targToDeconfig[6].affinityPath == l_ep[7]) ) // 210 MBA + (l_targToDeconfig[0].affinityPath == l_ep[11]) && // 00 MI + (l_targToDeconfig[1].affinityPath == l_ep[0]) && // 000 DMI + (l_targToDeconfig[2].affinityPath == l_ep[1]) && // 0000 MEMBUF + (l_targToDeconfig[3].affinityPath == l_ep[2]) && // 00000 MBA + (l_targToDeconfig[4].affinityPath == l_ep[3]) && // 001 DMI + (l_targToDeconfig[5].affinityPath == l_ep[5]) && // 0100 MEMBUF + (l_targToDeconfig[6].affinityPath == l_ep[7]) ) // 01010 MBA { TS_TRACE(INFO_MRK "testdeconfigPresentByAssoc8: Success"); } @@ -5094,14 +5205,18 @@ public: // Add MEMBUF Group 0 l_targets[0].pThisTarget = NULL; - l_targets[0].affinityPath.addLast(TYPE_MCS, 0); + l_targets[0].affinityPath.addLast(TYPE_MC, 0); + l_targets[0].affinityPath.addLast(TYPE_MI, 0); + l_targets[0].affinityPath.addLast(TYPE_DMI, 0); l_targets[0].affinityPath.addLast(TYPE_MEMBUF, 0); l_ep[0] = l_targets[0].affinityPath; l_targets[0].type = TYPE_MEMBUF; // SHOULD BE DECONFIGURED // Add MBA Group 0 l_targets[1].pThisTarget = NULL; - l_targets[1].affinityPath.addLast(TYPE_MCS, 0); + l_targets[1].affinityPath.addLast(TYPE_MC, 0); + l_targets[1].affinityPath.addLast(TYPE_MI, 0); + l_targets[1].affinityPath.addLast(TYPE_DMI, 0); l_targets[1].affinityPath.addLast(TYPE_MEMBUF, 0); l_targets[1].affinityPath.addLast(TYPE_MBA, 0); l_ep[1] = l_targets[1].affinityPath; @@ -5109,7 +5224,9 @@ public: // Add DIMM Group 0 l_targets[2].pThisTarget = NULL; - l_targets[2].affinityPath.addLast(TYPE_MCS, 0); + l_targets[2].affinityPath.addLast(TYPE_MC, 0); + l_targets[2].affinityPath.addLast(TYPE_MI, 0); + l_targets[2].affinityPath.addLast(TYPE_DMI, 0); l_targets[2].affinityPath.addLast(TYPE_MEMBUF, 0); l_targets[2].affinityPath.addLast(TYPE_MBA, 0); l_targets[2].affinityPath.addLast(TYPE_DIMM, 0); @@ -5118,7 +5235,9 @@ public: // Add MBA Group 1 l_targets[3].pThisTarget = NULL; - l_targets[3].affinityPath.addLast(TYPE_MCS, 1); + l_targets[3].affinityPath.addLast(TYPE_MC, 0); + l_targets[3].affinityPath.addLast(TYPE_MI, 0); + l_targets[3].affinityPath.addLast(TYPE_DMI, 1); l_targets[3].affinityPath.addLast(TYPE_MEMBUF, 0); l_targets[3].affinityPath.addLast(TYPE_MBA, 0); l_ep[3] = l_targets[3].affinityPath; @@ -5126,7 +5245,9 @@ public: // Add DIMM Group 1 l_targets[4].pThisTarget = NULL; - l_targets[4].affinityPath.addLast(TYPE_MCS, 1); + l_targets[4].affinityPath.addLast(TYPE_MC, 0); + l_targets[4].affinityPath.addLast(TYPE_MI, 0); + l_targets[4].affinityPath.addLast(TYPE_DMI, 1); l_targets[4].affinityPath.addLast(TYPE_MEMBUF, 0); l_targets[4].affinityPath.addLast(TYPE_MBA, 0); l_targets[4].affinityPath.addLast(TYPE_DIMM, 0); @@ -5135,7 +5256,9 @@ public: // Add DIMM Group 2 l_targets[5].pThisTarget = NULL; - l_targets[5].affinityPath.addLast(TYPE_MCS, 2); + l_targets[5].affinityPath.addLast(TYPE_MC, 0); + l_targets[5].affinityPath.addLast(TYPE_MI, 1); + l_targets[5].affinityPath.addLast(TYPE_DMI, 0); l_targets[5].affinityPath.addLast(TYPE_MEMBUF, 0); l_targets[5].affinityPath.addLast(TYPE_MBA, 0); l_targets[5].affinityPath.addLast(TYPE_DIMM, 0); |