Skip to content

Commit

Permalink
Free mem and fix dimm trgt in bad dq accessors
Browse files Browse the repository at this point in the history
Change-Id: I8db862122b9bab7eae2e75a4188c863704e9fdcd
CQ: SW419983
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/54996
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Reviewed-by: Benjamin J. Weisenbeck <bweisenb@us.ibm.com>
Reviewed-by: Brian J. Stegmiller <bjs@us.ibm.com>
Reviewed-by: Zane C. Shelley <zshelle@us.ibm.com>
  • Loading branch information
cnpalmer authored and zane131 committed Mar 6, 2018
1 parent 18a73ba commit d2fd055
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 21 deletions.
33 changes: 24 additions & 9 deletions src/usr/fapi2/attribute_service.C
Original file line number Diff line number Diff line change
Expand Up @@ -695,11 +695,10 @@ errlHndl_t __dimmUpdateDqBitmapEccByte(
const uint8_t ECC_DQ_BYTE_NUMBER_INDEX = 8;
const uint8_t ENUM_ATTR_SPD_MODULE_MEMORY_BUS_WIDTH_WE8 = 0x08;
size_t MEM_BUS_WIDTH_SIZE = 0x01;
uint8_t *l_eccBits = static_cast<uint8_t*>(malloc(MEM_BUS_WIDTH_SIZE));

do
{
uint8_t *l_eccBits = static_cast<uint8_t*>(malloc(MEM_BUS_WIDTH_SIZE));

l_errl = deviceRead( i_dimm,
l_eccBits,
MEM_BUS_WIDTH_SIZE,
Expand Down Expand Up @@ -729,6 +728,12 @@ errlHndl_t __dimmUpdateDqBitmapEccByte(
}
}while(0);

if ( l_eccBits != nullptr )
{
free( l_eccBits );
l_eccBits = nullptr;
}

return l_errl;
}

Expand Down Expand Up @@ -1222,6 +1227,9 @@ ReturnCode fapiAttrGetBadDqBitmap(
errlHndl_t l_errl = nullptr;
TARGETING::TargetHandle_t l_dimmTarget = nullptr;

uint8_t * l_badDqData =
static_cast<uint8_t*>( malloc(DIMM_BAD_DQ_SIZE_BYTES) );

do
{
l_errl = getTargetingTarget( i_dimmFapiTarget, l_dimmTarget );
Expand All @@ -1245,9 +1253,6 @@ ReturnCode fapiAttrGetBadDqBitmap(
break;
}

uint8_t * l_badDqData =
static_cast<uint8_t*>( malloc(DIMM_BAD_DQ_SIZE_BYTES) );

l_errl = deviceRead(l_dimmTarget, l_badDqData,
DIMM_BAD_DQ_SIZE_BYTES,
DEVICE_SPD_ADDRESS(SPD::DIMM_BAD_DQ_DATA));
Expand Down Expand Up @@ -1363,6 +1368,12 @@ ReturnCode fapiAttrGetBadDqBitmap(

}while(0);

if ( l_badDqData != nullptr )
{
free( l_badDqData );
l_badDqData = nullptr;
}

return l_rc;
}

Expand All @@ -1376,7 +1387,8 @@ ReturnCode fapiAttrSetBadDqBitmap(
fapi2::ReturnCode l_rc;
errlHndl_t l_errl = nullptr;
TARGETING::TargetHandle_t l_dimmTarget = nullptr;

uint8_t * l_badDqData =
static_cast<uint8_t*>( malloc(DIMM_BAD_DQ_SIZE_BYTES) );
do
{
l_errl = getTargetingTarget(i_dimmFapiTarget, l_dimmTarget);
Expand Down Expand Up @@ -1507,9 +1519,6 @@ ReturnCode fapiAttrSetBadDqBitmap(

// We need to make sure the rest of the data in VPD beyond the bad dq
// bitmap is unchanged.
uint8_t * l_badDqData =
static_cast<uint8_t*>( malloc(DIMM_BAD_DQ_SIZE_BYTES) );

l_errl = deviceRead(l_dimmTarget, l_badDqData,
DIMM_BAD_DQ_SIZE_BYTES,
DEVICE_SPD_ADDRESS(SPD::DIMM_BAD_DQ_DATA));
Expand Down Expand Up @@ -1560,6 +1569,12 @@ ReturnCode fapiAttrSetBadDqBitmap(

}while(0);

if ( l_badDqData != nullptr )
{
free( l_badDqData );
l_badDqData = nullptr;
}

return l_rc;
}

Expand Down
27 changes: 15 additions & 12 deletions src/usr/fapi2/dimmBadDqBitmapFuncs.C
Original file line number Diff line number Diff line change
Expand Up @@ -78,14 +78,12 @@ fapi2::ReturnCode dimmBadDqCheckParamGetBitmap( const fapi2::Target
TARGETING::ATTR_MODEL_type l_procModel =
l_masterProc->getAttr<TARGETING::ATTR_MODEL>();

// Get the DIMM
// Get all functional DIMMs
TargetHandleList l_dimmList;
getChildAffinityTargets( l_dimmList, l_trgt, CLASS_NA, TYPE_DIMM );

if ( TARGETING::MODEL_CUMULUS == l_procModel )
{
// Get all functional DIMMs
getChildAffinityTargets( l_dimmList, l_trgt, CLASS_NA, TYPE_DIMM );

// Find the DIMM with the correct MBA port/dimm
uint8_t l_port = 0;
uint8_t l_dimm = 0;
Expand Down Expand Up @@ -113,14 +111,19 @@ fapi2::ReturnCode dimmBadDqCheckParamGetBitmap( const fapi2::Target
}
else if ( TARGETING::MODEL_NIMBUS == l_procModel )
{
// Get all connected DIMMs, even nonfunctioning ones.
getChildAffinityTargets( l_dimmList, l_trgt, CLASS_NA, TYPE_DIMM,
false );
o_dimmTrgt = l_dimmList[i_dimm];

// Get the Bad DQ bitmap by querying ATTR_BAD_DQ_BITMAP.
l_rc = FAPI_ATTR_GET( fapi2::ATTR_BAD_DQ_BITMAP, o_dimmTrgt,
o_dqBitmap );
for ( auto &dimmTrgt : l_dimmList )
{
uint32_t l_pos = dimmTrgt->getAttr<ATTR_FAPI_POS>() %
mss::MAX_DIMM_PER_PORT;
if ( l_pos == i_dimm )
{
o_dimmTrgt = dimmTrgt;
// Get the Bad DQ bitmap by querying ATTR_BAD_DQ_BITMAP.
l_rc = FAPI_ATTR_GET( fapi2::ATTR_BAD_DQ_BITMAP,
o_dimmTrgt, o_dqBitmap );
break;
}
}
}
else
{
Expand Down

0 comments on commit d2fd055

Please sign in to comment.