summaryrefslogtreecommitdiffstats
path: root/src/usr/hwpf/hwp/pstates
diff options
context:
space:
mode:
authorThi Tran <thi@us.ibm.com>2014-04-09 10:08:16 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2014-04-10 16:01:56 -0500
commitd5d9ca45d67171573f79a80b3f677765b5cc9419 (patch)
treea5a1c671ee08ec7cd87db407470ec2ba567d6afd /src/usr/hwpf/hwp/pstates
parent4cd38870be3c000a96db7861fa54c5cce2221310 (diff)
downloadtalos-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-xsrc/usr/hwpf/hwp/pstates/pstates/p8_build_pstate_datablock.C32
-rwxr-xr-xsrc/usr/hwpf/hwp/pstates/pstates/p8_build_pstate_datablock_errors.xml31
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>
OpenPOWER on IntegriCloud