summaryrefslogtreecommitdiffstats
path: root/src/usr/targeting/common
diff options
context:
space:
mode:
authorPatrick Williams <iawillia@us.ibm.com>2012-08-22 13:07:27 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2012-08-27 17:12:39 -0500
commitb56630bba4e7548733d63ef233038914c54ed2fc (patch)
tree5fc183a9164db7b817d1acb1504215b161063cc4 /src/usr/targeting/common
parent149c0e9fc8990bf219d9ba7cd8b91cb9a33006ca (diff)
downloadtalos-hostboot-b56630bba4e7548733d63ef233038914c54ed2fc.tar.gz
talos-hostboot-b56630bba4e7548733d63ef233038914c54ed2fc.zip
Cache VPO state on for performance.
RTC: 43789 Change-Id: I80da1db355ac4ad838c36575ad183a0002569cd4 Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/1574 Tested-by: Jenkins Server Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr/targeting/common')
-rw-r--r--src/usr/targeting/common/util.C85
1 files changed, 51 insertions, 34 deletions
diff --git a/src/usr/targeting/common/util.C b/src/usr/targeting/common/util.C
index ce85567aa..d3ca08e28 100644
--- a/src/usr/targeting/common/util.C
+++ b/src/usr/targeting/common/util.C
@@ -1,26 +1,26 @@
-// IBM_PROLOG_BEGIN_TAG
-// This is an automatically generated prolog.
-//
-// $Source: src/usr/targeting/util.C $
-//
-// IBM CONFIDENTIAL
-//
-// COPYRIGHT International Business Machines Corp. 2012
-//
-// p1
-//
-// Object Code Only (OCO) source materials
-// Licensed Internal Code Source Materials
-// IBM HostBoot Licensed Internal Code
-//
-// The source code for this program is not published or other-
-// wise divested of its trade secrets, irrespective of what has
-// been deposited with the U.S. Copyright Office.
-//
-// Origin: 30
-//
-// IBM_PROLOG_END
-
+/* IBM_PROLOG_BEGIN_TAG
+ * This is an automatically generated prolog.
+ *
+ * $Source: src/usr/targeting/common/util.C $
+ *
+ * IBM CONFIDENTIAL
+ *
+ * COPYRIGHT International Business Machines Corp. 2012
+ *
+ * p1
+ *
+ * Object Code Only (OCO) source materials
+ * Licensed Internal Code Source Materials
+ * IBM HostBoot Licensed Internal Code
+ *
+ * The source code for this program is not published or other-
+ * wise divested of its trade secrets, irrespective of what has
+ * been deposited with the U.S. Copyright Office.
+ *
+ * Origin: 30
+ *
+ * IBM_PROLOG_END_TAG
+ */
/**
* @file targeting/common/util.C
*
@@ -43,18 +43,35 @@ namespace TARGETING
*/
bool is_vpo( void )
{
- Target * sys = NULL;
- targetService().getTopLevelTarget( sys );
- uint8_t vpo_mode = 0;
- if( unlikely( //compiler hint to optimize the false path
- sys
- && sys->tryGetAttr<ATTR_IS_SIMULATION>(vpo_mode)
- && (vpo_mode == 1)
- ) )
+ struct IsVpoFunctor
{
- return true;
- }
- return false;
+ static bool operate()
+ {
+ bool rc = false;
+
+ Target* sys = NULL;
+ targetService().getTopLevelTarget(sys);
+
+ uint8_t vpo_mode = 0;
+ if (unlikely(sys &&
+ sys->tryGetAttr<ATTR_IS_SIMULATION>(vpo_mode) &&
+ (1 == vpo_mode)))
+ {
+ rc = true;
+ }
+ return rc;
+ }
+ };
+
+#ifdef __HOSTBOOT_MODULE
+ // In Hostboot this value cannot change, so cache it as a static.
+ static bool is_vpo_mode = IsVpoFunctor::operate();
+ return is_vpo_mode;
+#else
+ // On FSP, assumption is that the user could change this, so we cannot
+ // cache it as a static. Read from the attribute directly.
+ return IsVpoFunctor::operate();
+#endif
};
/**
OpenPOWER on IntegriCloud