diff options
author | Patrick Williams <iawillia@us.ibm.com> | 2012-08-22 13:07:27 -0500 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2012-08-27 17:12:39 -0500 |
commit | b56630bba4e7548733d63ef233038914c54ed2fc (patch) | |
tree | 5fc183a9164db7b817d1acb1504215b161063cc4 /src/usr/targeting/common | |
parent | 149c0e9fc8990bf219d9ba7cd8b91cb9a33006ca (diff) | |
download | talos-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.C | 85 |
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 }; /** |