diff options
author | Zane Shelley <zshelle@us.ibm.com> | 2015-11-20 15:16:30 -0600 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2015-12-11 13:01:34 -0600 |
commit | d52716d1be73b27c3d3f5c3ffb84fef546cb6e45 (patch) | |
tree | c40bbee95ffdf1cf62b1dd93075eaaa8e7591960 | |
parent | 622cb577234c37c6c349f51f569260d9d1205d86 (diff) | |
download | talos-hostboot-d52716d1be73b27c3d3f5c3ffb84fef546cb6e45.tar.gz talos-hostboot-d52716d1be73b27c3d3f5c3ffb84fef546cb6e45.zip |
PRD: common interface to add extended MemoryMru FFDC to error log
Change-Id: I8de67b0a41307519809147eb90445ea896df0933
Backport: release-fips840
CQ: SW329405
Depends-on: I8b33dd89e2fb431580b720f06b97b116bc871ce1
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/22441
Tested-by: Jenkins Server
Reviewed-by: Caleb N. Palmer <cnpalmer@us.ibm.com>
Reviewed-by: BENJAMIN J. WEISENBECK <bweisenb@us.ibm.com>
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Reviewed-by: Zane Shelley <zshelle@us.ibm.com>
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/22616
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/22684
Tested-by: Jenkins OP Build CI
9 files changed, 193 insertions, 131 deletions
diff --git a/src/usr/diag/prdf/common/framework/service/prdfRasServices_common.C b/src/usr/diag/prdf/common/framework/service/prdfRasServices_common.C index 77f76587c..84045f93a 100644 --- a/src/usr/diag/prdf/common/framework/service/prdfRasServices_common.C +++ b/src/usr/diag/prdf/common/framework/service/prdfRasServices_common.C @@ -37,7 +37,7 @@ #include <prdfCallouts.H> #include <prdfMemoryMru.H> #include <prdfPlatServices.H> -#include <prdfCenLogParse.H> +#include <prdfCenMbaCaptureData.H> // For compression routines #define PRDF_COMPRESSBUFFER_COMPRESS_FUNCTIONS @@ -72,8 +72,6 @@ using namespace TARGETING; - - namespace PRDF { @@ -606,89 +604,6 @@ errlHndl_t ErrDataService::GenerateSrcPfa( ATTENTION_TYPE i_attnType, errlSev, l_diagUpdate ); } - - // If we have a valid symbol in the memory MRU object, then we - // should have one DIMM called out that we want the DQ map for. - // If the symbol is not valid, then we will do nothing. If the - // symbol is valid, but we have multiple callouts, then there is - // probably something wrong. - CenSymbol l_cenSymbol = memMru.getSymbol(); - if (l_cenSymbol.isValid()) - { - if (1 == partList.size()) - { - // Will make extra check that we have a DIMM - TARGETING::TYPE l_type; - l_type = getTargetType( partList[0] ); - - if (TARGETING::TYPE_DIMM == l_type) - { - // Will be storing the CEN/IS DIMM indicator, cardtype, - // and the 32 bit memmru prior to the 80 byte mapping - memMruDqInfo l_memData; - memset(&l_memData, 0, sizeof(memMruDqInfo)); - - // Call routine to read the FAPI attribute for DQ map - errlHndl_t l_fapiElog; - l_fapiElog = getFapiDimmDqAttr(partList[0], - &(l_memData.dqMapping[0])); - - if (NULL == l_fapiElog) - { - bool l_bufDimm; - CEN_SYMBOL::WiringType l_cardWireType; - int32_t l_chkRc; - // Get MBA target from DIMM - TargetHandle_t l_mba; - l_mba = getConnectedParent(partList[0], TYPE_MBA); - // Track if centaur or IS DIMM - l_chkRc = isMembufOnDimm(l_mba, l_bufDimm); - l_chkRc |= getMemBufRawCardType(l_mba, - l_cardWireType); - - if (SUCCESS == l_chkRc) - { // Put data into structure - l_memData.bufferedDimm = l_bufDimm; - l_memData.cardType = l_cardWireType; - } - else - { // unable to determine anything - l_memData.cardType = CEN_SYMBOL::WIRING_INVALID; - } - - // Get the 32 bit representation of MemMru - l_memData.memMru32bits = memMru.toUint32(); - - // Get the DRAM width. - l_memData.isX4 = isDramWidthX4( l_mba ) ? 1 : 0; - - // Add mapping to ELOG and parser will print it - PRDF_ADD_FFDC( iv_errl, (const char*)(&l_memData), - sizeof(memMruDqInfo), - ErrlVer1, ErrlMruData_2 ); - } // end if success reading attribute - else - { - PRDF_ERR( PRDF_FUNC "Fail on Read DQ mapping"); - PRDF_COMMIT_ERRL(l_fapiElog, ERRL_ACTION_REPORT); - } // end else error reading attribute - - } // end if DIMM target - else - { - PRDF_ERR( PRDF_FUNC "Not DIMM Target (%08X)", - l_type ); - } // end else NOT DIMM - - } // end if just one part called out - else - { // more than one part called out - PRDF_ERR( PRDF_FUNC "Valid Symbol with multiple parts (%d)", - partList.size() ); - } // end else multiple parts called out with valid symbol - - } // if valid centaur symbol - } else if ( PRDcalloutData::TYPE_SYMFRU == thiscallout.getType() ) { @@ -789,6 +704,25 @@ errlHndl_t ErrDataService::GenerateSrcPfa( ATTENTION_TYPE i_attnType, AddCapData( io_sdc.getTraceArrayData(), iv_errl ); } + //************************************************************************** + // Add extended MemoryMru error log sections (if needed). + //************************************************************************** + + for ( SDC_MRU_LIST::const_iterator it = mruList.begin(); + it < mruList.end(); ++it ) + { + // Operate only on MemoryMru callouts. + if ( PRDcalloutData::TYPE_MEMMRU != it->callout.getType() ) continue; + + // Only add single DIMM callouts. Otherwise, the parsed data is + // redundant. + MemoryMru memMru ( it->callout.flatten() ); + if ( !memMru.getSymbol().isValid() ) continue; + + // Add the MemoryMru to the capture data. + CenMbaCaptureData::addExtMemMruData( memMru, iv_errl ); + } + // Note moved the code from here, that was associated with checking for the last // functional core to be before the PFA data is placed in error log. diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaCaptureData.C b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaCaptureData.C index b8c08049f..e87730332 100644 --- a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaCaptureData.C +++ b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaCaptureData.C @@ -33,6 +33,7 @@ // Framwork includes #include <iipServiceDataCollector.h> #include <prdfDramRepairUsrData.H> +#include <prdfErrlUtil.H> #include <prdfExtensibleChip.H> #include <prdfRasServices.H> #include <utilmem.H> @@ -359,6 +360,88 @@ void captureDramRepairsVpd( TargetHandle_t i_mbaTrgt, CaptureData & io_cd ) #undef PRDF_FUNC } +//------------------------------------------------------------------------------ + +void addExtMemMruData( const MemoryMru & i_memMru, errlHndl_t io_errl ) +{ + #define PRDF_FUNC "[addExtMemMruData] " + + MemoryMruData::ExtendedData extMemMru ( i_memMru.toUint32() ); + + do + { + int32_t l_rc = SUCCESS; + + TargetHandle_t mbaTrgt = i_memMru.getMbaTrgt(); + + // Get the DRAM width. + extMemMru.isX4Dram = isDramWidthX4( mbaTrgt ) ? 1 : 0; + + // Get the DIMM type. + bool isBufDimm = false; + l_rc = isMembufOnDimm( mbaTrgt, isBufDimm ); + if ( SUCCESS != l_rc ) + { + PRDF_ERR( PRDF_FUNC "isMembufOnDimm() failed. MBA:0x%08x", + getHuid(mbaTrgt) ); + break; + } + extMemMru.isBufDimm = isBufDimm ? 1 : 0; + + if ( isBufDimm ) + { + // Get the raw card type (CDIMMS only). + CEN_SYMBOL::WiringType cardType = CEN_SYMBOL::WIRING_INVALID; + l_rc = getMemBufRawCardType( mbaTrgt, cardType ); + if ( SUCCESS != l_rc ) + { + PRDF_ERR( PRDF_FUNC "getMemBufRawCardType() failed. MBA:0x%08x", + getHuid(mbaTrgt) ); + break; + } + extMemMru.cardType = cardType; + } + else + { + // Get the 80-byte DQ map (ISDIMMS only). This is only needed if + // the MemoryMru contains a single DIMM callout with a valid symbol. + if ( i_memMru.getSymbol().isValid() ) + { + TargetHandleList partList = i_memMru.getCalloutList(); + if ( 1 != partList.size() || + TYPE_DIMM != getTargetType(partList[0]) ) + { + PRDF_ERR( PRDF_FUNC "Symbol is valid but callout is not a " + "single DIMM." ); + break; + } + + errlHndl_t l_errl = getFapiDimmDqAttr( partList[0], + &(extMemMru.dqMapping[0]) ); + if ( NULL != l_errl ) + { + PRDF_ERR( PRDF_FUNC "getFapiDimmDqAttr() failed. " + "DIMM:0x%08x", getHuid(partList[0]) ); + PRDF_COMMIT_ERRL( l_errl, ERRL_ACTION_REPORT ); + break; + } + } + } + + // If we reach this point, nothing failed and the data is valid. + extMemMru.isValid = 1; + + } while (0); + + // Add the extended MemoryMru to the error log. + PRDF_ADD_FFDC( io_errl, (const char*)(&extMemMru), sizeof(extMemMru), + ErrlVer1, ErrlMruData_2 ); + + #undef PRDF_FUNC +} + +//------------------------------------------------------------------------------ + } //end namespace MbaCaptureData } // end namespace PRDF diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaCaptureData.H b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaCaptureData.H index de570d6a6..4fa52c783 100644 --- a/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaCaptureData.H +++ b/src/usr/diag/prdf/common/plat/pegasus/prdfCenMbaCaptureData.H @@ -34,6 +34,7 @@ #include <targeting/common/targetservice.H> #include <iipCaptureData.h> #include <errlentry.H> +#include <prdfMemoryMru.H> namespace PRDF { @@ -100,6 +101,14 @@ void captureDramRepairsData( TARGETING::TargetHandle_t i_mbaTrgt, void captureDramRepairsVpd( TARGETING::TargetHandle_t i_mbaTrgt, CaptureData & io_cd ); +/** + * @brief Adds a new user data section to the error log containing a MemoryMru + * plus extended data for extra FFDC. + * @param i_mbaTrgt An MBA target + * @param io_errl Target error log. + */ +void addExtMemMruData( const MemoryMru & i_memMru, errlHndl_t io_errl ); + } // end namespace MbaCaptureData } // end namespace PRDF diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfMemoryMru.H b/src/usr/diag/prdf/common/plat/pegasus/prdfMemoryMru.H index bc8090272..38f70bf6c 100755 --- a/src/usr/diag/prdf/common/plat/pegasus/prdfMemoryMru.H +++ b/src/usr/diag/prdf/common/plat/pegasus/prdfMemoryMru.H @@ -82,11 +82,14 @@ class MemoryMru /** @return A list of targets that are represented by this MemoryMru. */ TARGETING::TargetHandleList getCalloutList() const; - /** - * @brief Allows reading the symbol information - * @return 'centaur symbol object' - */ - CenSymbol getSymbol() { return iv_symbol; } + /** @return The MBA target associated with this MemoryMru. */ + TARGETING::TargetHandle_t getMbaTrgt() const { return iv_mbaTarget; } + + /** @return The rank associated with this MemoryMru. */ + CenRank getRank() const { return iv_rank; } + + /** @return The symbol associated with this MemoryMru. */ + CenSymbol getSymbol() const { return iv_symbol; } private: // instance variables diff --git a/src/usr/diag/prdf/common/plugins/prdfCenLogParse.C b/src/usr/diag/prdf/common/plugins/prdfCenLogParse.C index 734c21262..9e5ceb386 100644 --- a/src/usr/diag/prdf/common/plugins/prdfCenLogParse.C +++ b/src/usr/diag/prdf/common/plugins/prdfCenLogParse.C @@ -2796,14 +2796,14 @@ void getBadDqBitmapEntry( uint8_t * i_buffer, char * o_str ) //------------------------------------------------------------------------------ // Helper function for parseMemMruData() -int32_t getMemMruDramSite( memMruDqInfo &i_memDqStruct, +int32_t getMemMruDramSite( MemoryMruData::ExtendedData & i_extMemMru, char * o_data ) { char l_dqMapBuffer[10]; memset (l_dqMapBuffer, 0, 10); int32_t o_rc = SUCCESS; - MemoryMruData::MemMruMeld mm; mm.u = i_memDqStruct.memMru32bits; + MemoryMruData::MemMruMeld mm = i_extMemMru.mmMeld; do { @@ -2811,7 +2811,7 @@ int32_t getMemMruDramSite( memMruDqInfo &i_memDqStruct, uint8_t symbol = transEccSpare( mm.s.symbol, mm.s.eccSpared ); - uint8_t type = i_memDqStruct.cardType; + uint8_t type = i_extMemMru.cardType; uint8_t mbaPos = mm.s.mbaPos; uint8_t ps = symbol2PortSlct( symbol ); uint8_t mrank = mm.s.mrank; @@ -2822,7 +2822,7 @@ int32_t getMemMruDramSite( memMruDqInfo &i_memDqStruct, const char ** dqMap; // This routine will only succeed on CDIMMs - if (i_memDqStruct.bufferedDimm) + if ( i_extMemMru.isBufDimm ) { bool x4Dram = false; // Not used in this function. o_rc = getDramSiteInfo( type, mbaPos, ps, mrank, x4Dram, @@ -2835,7 +2835,7 @@ int32_t getMemMruDramSite( memMruDqInfo &i_memDqStruct, uint8_t dqIdx = transDramSpare( symbol2CenDq(symbol), mm.s.dramSpared ); - uint8_t dramIdx = dqSiteIdx2DramSiteIdx( dqIdx, i_memDqStruct.isX4 ); + uint8_t dramIdx = dqSiteIdx2DramSiteIdx( dqIdx, i_extMemMru.isX4Dram ); // Add the DRAM site data based on the pin info. strcpy( o_data, "" ); @@ -2843,33 +2843,33 @@ int32_t getMemMruDramSite( memMruDqInfo &i_memDqStruct, switch ( mm.s.pins ) { case EVEN_SYMBOL_DQ: - if (i_memDqStruct.bufferedDimm) + if ( i_extMemMru.isBufDimm ) { strcat( o_data, dqMap[dqIdx] ); } else { snprintf( l_dqMapBuffer, 4, "%d", - i_memDqStruct.dqMapping[dqIdx] ); + i_extMemMru.dqMapping[dqIdx] ); strcat( o_data, l_dqMapBuffer ); } break; case ODD_SYMBOL_DQ: - if (i_memDqStruct.bufferedDimm) + if ( i_extMemMru.isBufDimm ) { strcat( o_data, dqMap[dqIdx+1] ); } else { snprintf( l_dqMapBuffer, 4, "%d", - i_memDqStruct.dqMapping[dqIdx+1] ); + i_extMemMru.dqMapping[dqIdx+1] ); strcat( o_data, l_dqMapBuffer ); } break; case BOTH_SYMBOL_DQS: - if (i_memDqStruct.bufferedDimm) + if ( i_extMemMru.isBufDimm ) { strcat( o_data, dqMap[dqIdx] ); strcat( o_data, ", " ); @@ -2878,23 +2878,23 @@ int32_t getMemMruDramSite( memMruDqInfo &i_memDqStruct, else { snprintf( l_dqMapBuffer, 10, "%d, %d", - i_memDqStruct.dqMapping[dqIdx], - i_memDqStruct.dqMapping[dqIdx+1] ); + i_extMemMru.dqMapping[dqIdx], + i_extMemMru.dqMapping[dqIdx+1] ); strcat( o_data, l_dqMapBuffer ); } break; case NO_SYMBOL_DQS: // blaming relevant dram since we aren't sure of DQ - if (i_memDqStruct.bufferedDimm) + if ( i_extMemMru.isBufDimm ) { strcat( o_data, dramMap[dramIdx] ); } else { snprintf( l_dqMapBuffer, 10, "%d, %d", - i_memDqStruct.dqMapping[dqIdx], - i_memDqStruct.dqMapping[dqIdx+1] ); + i_extMemMru.dqMapping[dqIdx], + i_extMemMru.dqMapping[dqIdx+1] ); strcat( o_data, l_dqMapBuffer ); } break; @@ -2908,12 +2908,15 @@ int32_t getMemMruDramSite( memMruDqInfo &i_memDqStruct, return o_rc; } + //------------------------------------------------------------------------------ -bool parseMemMruData( ErrlUsrParser & i_parser, memMruDqInfo &i_memDqStruct ) + +bool parseMemMruData( ErrlUsrParser & i_parser, + MemoryMruData::ExtendedData & i_extMemMru ) { bool o_rc = true; - MemoryMruData::MemMruMeld mm; mm.u = i_memDqStruct.memMru32bits; + MemoryMruData::MemMruMeld mm = i_extMemMru.mmMeld; uint8_t nodePos = mm.s.nodePos; uint8_t cenPos = (mm.s.procPos << 3) | mm.s.cenPos; @@ -2947,10 +2950,10 @@ bool parseMemMruData( ErrlUsrParser & i_parser, memMruDqInfo &i_memDqStruct ) { char dramSite_str[DATA_SIZE] = { '\0' }; - getMemMruDramSite( i_memDqStruct, dramSite_str ); + getMemMruDramSite( i_extMemMru, dramSite_str ); char l_sitePinString[5]; - if (i_memDqStruct.bufferedDimm) + if ( i_extMemMru.isBufDimm ) { strcpy(l_sitePinString, "Site"); } diff --git a/src/usr/diag/prdf/common/plugins/prdfCenLogParse.H b/src/usr/diag/prdf/common/plugins/prdfCenLogParse.H index 8a2e3f368..68a268484 100644 --- a/src/usr/diag/prdf/common/plugins/prdfCenLogParse.H +++ b/src/usr/diag/prdf/common/plugins/prdfCenLogParse.H @@ -50,10 +50,11 @@ namespace FSP * simply parses the data. It does not print header information (i.e. * "MemoryMru") or print out the uint32_t value of the MemoryMru. It is * up to the caller to add that data. - * @param i_parser The error log parser. - * @param i_memMru The MemoryMru data. + * @param i_parser The error log parser. + * @param i_extMemMru A MemoryMru with extended data for extra FFDC. */ -bool parseMemMruData( ErrlUsrParser & i_parser, memMruDqInfo &i_memDqStruct ); +bool parseMemMruData( ErrlUsrParser & i_parser, + MemoryMruData::ExtendedData & i_extMemMru ); /** * @brief Parses Memory UE table. diff --git a/src/usr/diag/prdf/common/plugins/prdfLogParse_common.C b/src/usr/diag/prdf/common/plugins/prdfLogParse_common.C index e138072e8..e58692ccd 100644 --- a/src/usr/diag/prdf/common/plugins/prdfLogParse_common.C +++ b/src/usr/diag/prdf/common/plugins/prdfLogParse_common.C @@ -707,7 +707,7 @@ bool parseMemMru( void * i_buffer, uint32_t i_buflen, ErrlUsrParser & i_parser ) bool parseDqMap( void * i_buffer, uint32_t i_buflen, ErrlUsrParser & i_parser ) { bool o_rc = true; - size_t l_size = sizeof(memMruDqInfo); + size_t l_size = sizeof(MemoryMruData::ExtendedData); i_parser.PrintBlank(); @@ -720,15 +720,15 @@ bool parseDqMap( void * i_buffer, uint32_t i_buflen, ErrlUsrParser & i_parser ) else { // Data on input::has DQ mapping and a few other fields in a structure - memMruDqInfo l_memData; + MemoryMruData::ExtendedData extMemMru; UtilMem membuf( i_buffer, i_buflen ); - membuf >> l_memData; + membuf >> extMemMru; char header[72]; - snprintf( header, 72, "MemoryMru (0x%08x)", l_memData.memMru32bits); + snprintf( header, 72, "MemoryMru (0x%08x)", extMemMru.mmMeld.u); i_parser.PrintHeading( header ); - o_rc = parseMemMruData( i_parser, l_memData ); + o_rc = parseMemMruData( i_parser, extMemMru ); } diff --git a/src/usr/diag/prdf/common/plugins/prdfMemoryMruData.H b/src/usr/diag/prdf/common/plugins/prdfMemoryMruData.H index 64f3b174b..075abbe17 100644 --- a/src/usr/diag/prdf/common/plugins/prdfMemoryMruData.H +++ b/src/usr/diag/prdf/common/plugins/prdfMemoryMruData.H @@ -34,19 +34,12 @@ #include <stdint.h> #include <endian.h> +#include <string.h> + +#include <prdfParserEnums.H> namespace PRDF { -// Structure to contain memory DQ mapping and related info -struct memMruDqInfo -{ - uint32_t memMru32bits; // 32 bit MemoryMru format - uint32_t cardType :8; // cardType for Centaur DIMMs - uint32_t bufferedDimm :1; // 1=Centaur DIMM, 0=IS DIMM - uint32_t isX4 :1; // 1=x4 DRAM DIMM, 0=x8 DRAM DIMM - uint32_t reserved :22; // Future use / nice boundary - uint8_t dqMapping[80]; // CenDQ to DimmDQ mapping -}; #ifdef PRDF_HOSTBOOT_ERRL_PLUGIN namespace HOSTBOOT @@ -141,6 +134,40 @@ union MemMruMeld } s; ///< A struct defining the 32-bit version of the MemoryMru }; +/** Contains a MemoryMru and extended data for extra FFDC. */ +struct ExtendedData +{ + MemMruMeld mmMeld; ///< See MemMruMeld union + uint32_t cardType : 8; ///< Raw card type (Centaur DIMMs only) + uint32_t isBufDimm : 1; ///< 1=Centaur DIMM, 0=IS DIMM + uint32_t isX4Dram : 1; ///< 1=x4 DRAM DIMM, 0=x8 DRAM DIMM + uint32_t isValid : 1; ///< 1=struct contains valid data, + ///< 0=otherwise. Needed just in case there + ///< was a failure to gather extended data. + uint32_t reserved :21; ///< Future use / nice boundary + uint8_t dqMapping[80]; ///< Centaur DQ to DIMM DQ mapping (only used + ///< when the MemoryMru contains a single + ///< IS DIMM callout). + + /** Default contructor */ + ExtendedData() : + cardType(CEN_SYMBOL::WIRING_INVALID), isBufDimm(0), isX4Dram(0), + isValid(0), reserved(0) + { + mmMeld.u = 0; + memset( &dqMapping[0], 0x00, sizeof(dqMapping) ); + } + + /** Contructor from flattened MemoryMru */ + explicit ExtendedData( uint32_t i_memMru ) : + cardType(CEN_SYMBOL::WIRING_INVALID), isBufDimm(0), isX4Dram(0), + isValid(0), reserved(0) + { + mmMeld.u = i_memMru; + memset( &dqMapping[0], 0x00, sizeof(dqMapping) ); + } +}; + } // end namespace MemoryMruData #ifdef PRDF_HOSTBOOT_ERRL_PLUGIN } // end namespace HOSTBOOT diff --git a/src/usr/diag/prdf/plat/pegasus/prdfPlatCalloutUtil.C b/src/usr/diag/prdf/plat/pegasus/prdfPlatCalloutUtil.C index 14a073b4c..9d07558b0 100644 --- a/src/usr/diag/prdf/plat/pegasus/prdfPlatCalloutUtil.C +++ b/src/usr/diag/prdf/plat/pegasus/prdfPlatCalloutUtil.C @@ -5,7 +5,9 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* COPYRIGHT International Business Machines Corp. 2013,2014 */ +/* Contributors Listed Below - COPYRIGHT 2013,2015 */ +/* [+] International Business Machines Corp. */ +/* */ /* */ /* Licensed under the Apache License, Version 2.0 (the "License"); */ /* you may not use this file except in compliance with the License. */ @@ -32,6 +34,7 @@ // Pegasus includes #include <prdfMemoryMru.H> +#include <prdfCenMbaCaptureData.H> using namespace TARGETING; @@ -57,8 +60,7 @@ void calloutMemoryMru( errlHndl_t io_errl, const MemoryMru & i_memmru, } // Add the MemoryMru to the capture data. - uint32_t tmpMru = i_memmru.toUint32(); - PRDF_ADD_FFDC( io_errl, &tmpMru, sizeof(tmpMru), ErrlVer1, ErrlMruData_1 ); + CenMbaCaptureData::addExtMemMruData( i_memmru, io_errl ); } } // end namespace CalloutUtil |