diff options
author | Dan Crowell <dcrowell@us.ibm.com> | 2016-02-18 14:42:21 -0600 |
---|---|---|
committer | William G. Hoffa <wghoffa@us.ibm.com> | 2016-03-21 16:28:19 -0400 |
commit | 2c4c5c4490ca71ffcc8c81047b3990b5b8a4802d (patch) | |
tree | eddd387a63d12c3bb8e7ba4c2030a4f58d5aa328 /src/usr/util | |
parent | 9b188cdec934275ce65eab3ade91398fdec4ddb9 (diff) | |
download | talos-hostboot-2c4c5c4490ca71ffcc8c81047b3990b5b8a4802d.tar.gz talos-hostboot-2c4c5c4490ca71ffcc8c81047b3990b5b8a4802d.zip |
Release pages used by pnor vmm when lid manager is finished
Forces a release of the physical pages being used for the pnor
vmm cache once we are done reading the lid out of pnor.
Forwardport: yes
Change-Id: I35df6f2316fa9903d8283395297201bd4c87e108
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/20733
Tested-by: Jenkins Server
Reviewed-by: Prachi Gupta <pragupta@us.ibm.com>
Tested-by: Jenkins OP Build CI
Tested-by: Jenkins OP HW
Tested-by: FSP CI Jenkins
Reviewed-by: Stephen M. Cprek <smcprek@us.ibm.com>
Reviewed-by: Corey V. Swenson <cswenson@us.ibm.com>
Reviewed-by: William G. Hoffa <wghoffa@us.ibm.com>
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/22304
Diffstat (limited to 'src/usr/util')
-rw-r--r-- | src/usr/util/utillidmgr.C | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/src/usr/util/utillidmgr.C b/src/usr/util/utillidmgr.C index 037be7ec1..25253eb41 100644 --- a/src/usr/util/utillidmgr.C +++ b/src/usr/util/utillidmgr.C @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2013,2015 */ +/* Contributors Listed Below - COPYRIGHT 2013,2016 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -33,6 +33,7 @@ #include "utillidmgrdefs.H" #include "utilbase.H" #include <initservice/initserviceif.H> +#include <sys/mm.h> using namespace ERRORLOG; mutex_t UtilLidMgr::cv_mutex = MUTEX_INITIALIZER; @@ -648,6 +649,37 @@ errlHndl_t UtilLidMgr::cleanup() } } + //force evict any pages that the PNOR RP might have + // laying around + if(iv_isLidInPnor) + { + int rc = mm_remove_pages( RELEASE, + reinterpret_cast<void *>(iv_lidPnorInfo.vaddr), + iv_lidPnorInfo.size ); + if( rc ) + { + UTIL_FT( ERR_MRK"rc=%d from mm_remove_pages(%llX,%llX)", iv_lidPnorInfo.vaddr, iv_lidPnorInfo.size ); + /*@ + * @errortype + * @moduleid Util::UTIL_LIDMGR_CLEANUP + * @reasoncode Util::UTIL_LIDMGR_MM_FAIL + * @userdata1[00:31] LID ID + * @userdata1[32:63] rc from mm_remove_pages + * @userdata2 Virtual address being removed + * @devdesc Error returned from mm_remove_pages + * when evicting lid from memory. + * @custdesc Firmware error during boot. + */ + l_err = new ErrlEntry(ERRL_SEV_UNRECOVERABLE, + Util::UTIL_LIDMGR_CLEANUP, + Util::UTIL_LIDMGR_MM_FAIL, + TWO_UINT32_TO_UINT64(iv_lidId,rc), + iv_lidPnorInfo.vaddr, + true /*sw fail*/); + } + } + + return l_err; } |