summaryrefslogtreecommitdiffstats
path: root/src/usr
diff options
context:
space:
mode:
Diffstat (limited to 'src/usr')
-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