diff options
author | Thi Tran <thi@us.ibm.com> | 2014-04-09 10:08:16 -0500 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2014-04-10 16:01:56 -0500 |
commit | d5d9ca45d67171573f79a80b3f677765b5cc9419 (patch) | |
tree | a5a1c671ee08ec7cd87db407470ec2ba567d6afd /src/usr/hwpf/hwp/pstates | |
parent | 4cd38870be3c000a96db7861fa54c5cce2221310 (diff) | |
download | talos-hostboot-d5d9ca45d67171573f79a80b3f677765b5cc9419.tar.gz talos-hostboot-d5d9ca45d67171573f79a80b3f677765b5cc9419.zip |
SW255783: Infinite loop in p8_build_pstate_datablock.C procedure
Change-Id: I2edc2991f4be6e4deb3665e248715b79225e4771
CQ:SW255783
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/10289
Reviewed-by: Thi N. Tran <thi@us.ibm.com>
Tested-by: Thi N. Tran <thi@us.ibm.com>
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/10290
Tested-by: Jenkins Server
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr/hwpf/hwp/pstates')
-rwxr-xr-x | src/usr/hwpf/hwp/pstates/pstates/p8_build_pstate_datablock.C | 32 | ||||
-rwxr-xr-x | src/usr/hwpf/hwp/pstates/pstates/p8_build_pstate_datablock_errors.xml | 31 |
2 files changed, 58 insertions, 5 deletions
diff --git a/src/usr/hwpf/hwp/pstates/pstates/p8_build_pstate_datablock.C b/src/usr/hwpf/hwp/pstates/pstates/p8_build_pstate_datablock.C index 7817f2980..405e253fb 100755 --- a/src/usr/hwpf/hwp/pstates/pstates/p8_build_pstate_datablock.C +++ b/src/usr/hwpf/hwp/pstates/pstates/p8_build_pstate_datablock.C @@ -20,14 +20,16 @@ /* Origin: 30 */ /* */ /* IBM_PROLOG_END_TAG */ -// $Id: p8_build_pstate_datablock.C,v 1.33 2014/03/12 00:47:01 stillgs Exp $ +// $Id: p8_build_pstate_datablock.C,v 1.34 2014/04/07 02:17:52 stillgs Exp $ // $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/p8/working/procedures/ipl/fapi/p8_build_pstate_datablock.C,v $ //------------------------------------------------------------------------------ // *! (C) Copyright International Business Machines Corp. 2012 // *! All Rights Reserved -- Property of IBM // *! *** IBM Confidential *** //------------------------------------------------------------------------------ -// *! OWNER NAME: Jim Yacynych Email: jimyac@us.ibm.com +// *! OWNER NAME: Jim Yacynych Email: jimyac@us.ibm.com +// *! BACKUP NAME: Greg Still Email: stillgs@us.ibm.com +// *! BACKUP NAME: David Du Email: daviddu@us.ibm.com // *! /// \file p8_build_pstate_datablock.C @@ -1074,6 +1076,8 @@ ReturnCode proc_boost_gpst (PstateSuperStructure *pss, uint32_t pstate_diff; gpst_entry_t entry; uint8_t gpsi_max; + + const uint32_t MAXIMUM_BOOST_PERCENT_SUPPORTED = 20; do { @@ -1082,6 +1086,17 @@ ReturnCode proc_boost_gpst (PstateSuperStructure *pss, FAPI_INF("CPM Turbo Boost Attribute = 0 -- no boosting will be done"); break; } + + // check that percentage is rational. Note: attribute information is .1 percent units + if (attr_boost_percent > MAXIMUM_BOOST_PERCENT_SUPPORTED * 10) { + FAPI_ERR("Boost percentage is greater than maximum supported. Max: %u; Value: %u", + MAXIMUM_BOOST_PERCENT_SUPPORTED, attr_boost_percent); + const uint32_t& MAXBOOSTPERCENT = MAXIMUM_BOOST_PERCENT_SUPPORTED; + const uint32_t& ATTRBOOSTPERCENT = attr_boost_percent; + FAPI_SET_HWP_ERROR(l_rc, RC_PROCPM_PSTATE_DATABLOCK_INVALID_BOOST_PERCENTAGE_ERROR); + break; + } + // calculate percent to boost boosted_pct = 1.0 + (BOOST_PCT_UNIT * (double)attr_boost_percent); @@ -1108,7 +1123,18 @@ ReturnCode proc_boost_gpst (PstateSuperStructure *pss, FAPI_INF("CPM Turbo Boost Attribute resulted in no increase in pstates - boost_pct = %f turbo_freq_khz = %u boosted_freq_khz = %u", boosted_pct, pstate0_frequency_khz, boosted_freq_khz); break; - } + } + else if (pstate_diff > 255) { + FAPI_ERR("Percentage boost calculation overrun produced invalid Pstate Difference: %u", pstate_diff); + const uint32_t& PSTATEDIFF = pstate_diff; + const uint32_t& BOOSTEDFREQKHZ = boosted_freq_khz; + const uint32_t& PSTATE0FREQKHZ = pstate0_frequency_khz; + const uint32_t& FREQSTEPKHZ = frequency_step_khz; + const uint32_t& ATTRBOOSTPERCENT = attr_boost_percent; + const double& BOOSTEDPCT = boosted_pct; + FAPI_SET_HWP_ERROR(l_rc, RC_PROCPM_PSTATE_DATABLOCK_PSTATE_DIFF_ERROR); + break; + } else { gpsi_max = pss->gpst.entries - 1; entry.value = revle64(pss->gpst.pstate[gpsi_max].value); diff --git a/src/usr/hwpf/hwp/pstates/pstates/p8_build_pstate_datablock_errors.xml b/src/usr/hwpf/hwp/pstates/pstates/p8_build_pstate_datablock_errors.xml index 3fec65a11..9fab07e27 100755 --- a/src/usr/hwpf/hwp/pstates/pstates/p8_build_pstate_datablock_errors.xml +++ b/src/usr/hwpf/hwp/pstates/pstates/p8_build_pstate_datablock_errors.xml @@ -20,7 +20,7 @@ <!-- Origin: 30 --> <!-- --> <!-- IBM_PROLOG_END_TAG --> -<!-- $Id: p8_build_pstate_datablock_errors.xml,v 1.11 2014/02/24 15:32:29 jimyac Exp $ --> +<!-- $Id: p8_build_pstate_datablock_errors.xml,v 1.12 2014/04/07 02:11:36 stillgs Exp $ --> <!-- Error definitions for p8_build_pstate_datablock procedure --> <hwpErrors> <!-- *********************************************************************** --> @@ -352,5 +352,32 @@ <procedure>CODE</procedure> <priority>HIGH</priority> </callout> - </hwpError> + </hwpError> + <!-- *********************************************************************** --> + <hwpError> + <rc>RC_PROCPM_PSTATE_DATABLOCK_PSTATE_DIFF_ERROR</rc> + <description>Percentage boost calculation overrun produced invalid Pstate Difference</description> + <ffdc>PSTATEDIFF</ffdc> + <ffdc>BOOSTEDFREQKHZ</ffdc> + <ffdc>PSTATE0FREQKHZ</ffdc> + <ffdc>FREQSTEPKHZ</ffdc> + <ffdc>ATTRBOOSTPERCENT</ffdc> + <ffdc>BOOSTEDPCT</ffdc> + <callout> + <procedure>CODE</procedure> + <priority>HIGH</priority> + </callout> + </hwpError> + <!-- *********************************************************************** --> + <hwpError> + <rc>RC_PROCPM_PSTATE_DATABLOCK_INVALID_BOOST_PERCENTAGE_ERROR</rc> + <description>Percentage boost request is greater than the maximum supported</description> + <ffdc>MAXBOOSTPERCENT</ffdc> + <ffdc>ATTRBOOSTPERCENT</ffdc> + <callout> + <procedure>CODE</procedure> + <priority>HIGH</priority> + </callout> + </hwpError> + <!-- *********************************************************************** --> </hwpErrors> |