From 8147343269628e7bdab1ab25487e0ada3ace95e6 Mon Sep 17 00:00:00 2001 From: Glenn Miles Date: Fri, 22 Feb 2019 15:57:25 -0600 Subject: Use thread_local for globals that require it Change-Id: I84294a60c53da2501b7bb1b53fe84d9f9709f8b1 RTC:147599 Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/72379 Tested-by: Jenkins Server Tested-by: Jenkins OP Build CI Reviewed-by: Christian R. Geddes Tested-by: Jenkins OP HW Tested-by: FSP CI Jenkins Reviewed-by: Nicholas E. Bofferding Reviewed-by: Daniel M. Crowell --- src/include/usr/fapi2/plat_hw_access.H | 6 +++++- src/include/usr/fapi2/plat_hwp_invoker.H | 26 ++++++++++++-------------- 2 files changed, 17 insertions(+), 15 deletions(-) (limited to 'src/include/usr/fapi2') diff --git a/src/include/usr/fapi2/plat_hw_access.H b/src/include/usr/fapi2/plat_hw_access.H index 0d4e56a2b..1ce681f61 100644 --- a/src/include/usr/fapi2/plat_hw_access.H +++ b/src/include/usr/fapi2/plat_hw_access.H @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2015,2018 */ +/* Contributors Listed Below - COPYRIGHT 2015,2019 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -278,7 +278,11 @@ void platSetOpMode(const OpModes i_mode); /// @return the operational mode OpModes platGetOpMode(void); +#ifndef PLAT_NO_THREAD_LOCAL_STORAGE +extern thread_local OpModes opMode; +#else extern OpModes opMode; +#endif //-------------------------------------------------------------------------- // PIB Error Mask Functions diff --git a/src/include/usr/fapi2/plat_hwp_invoker.H b/src/include/usr/fapi2/plat_hwp_invoker.H index 894cc1927..0eace34bc 100644 --- a/src/include/usr/fapi2/plat_hwp_invoker.H +++ b/src/include/usr/fapi2/plat_hwp_invoker.H @@ -45,12 +45,10 @@ #include namespace fapi2 { -//@fixme-RTC:147599-Remove when thread-local storage works right -/// -/// @brief Lock or unlock the HWP futex -/// @param[i] i_lock true:lock the mutex, false:unlock -/// -void hwpLock( bool i_lock ); +/* + * @brief Resets all HWP thread_local vars + */ +void hwpResetGlobals(void); } /** @@ -68,7 +66,7 @@ void hwpLock( bool i_lock ); #define FAPI_INVOKE_HWP(ERRHNDL, FUNC, _args_...) \ {\ - fapi2::hwpLock(true); \ + fapi2::hwpResetGlobals(); \ fapi2::ReturnCode invoke_rc; \ FAPI_EXEC_HWP(invoke_rc, FUNC, ##_args_); \ ERRHNDL = fapi2::rcToErrl(invoke_rc);\ @@ -76,7 +74,7 @@ void hwpLock( bool i_lock ); ERRHNDL->collectTrace(FAPI_IMP_TRACE_NAME,256);\ ERRHNDL->collectTrace(FAPI_TRACE_NAME,384);\ }\ - fapi2::hwpLock(false); \ + fapi2::hwpResetGlobals(); \ } /** @@ -95,14 +93,14 @@ void hwpLock( bool i_lock ); #define FAPI_INVOKE_HWP_RC(ERRHNDL, _RC, FUNC, _args_...) \ {\ - fapi2::hwpLock(true); \ + fapi2::hwpResetGlobals(); \ FAPI_EXEC_HWP(_RC, FUNC, ##_args_); \ ERRHNDL = fapi2::rcToErrl(_RC);\ if( ERRHNDL ) {\ ERRHNDL->collectTrace(FAPI_IMP_TRACE_NAME,256);\ ERRHNDL->collectTrace(FAPI_TRACE_NAME,384);\ }\ - fapi2::hwpLock(false); \ + fapi2::hwpResetGlobals(); \ } /** @@ -117,9 +115,9 @@ void hwpLock( bool i_lock ); */ #define FAPI_CALL_HWP( RETURN, FUNC, _args_...) \ {\ - fapi2::hwpLock(true); \ + fapi2::hwpResetGlobals(); \ RETURN = FUNC(_args_); \ - fapi2::hwpLock(false); \ + fapi2::hwpResetGlobals(); \ } /** @@ -133,9 +131,9 @@ void hwpLock( bool i_lock ); */ #define FAPI_CALL_HWP_NORETURN( FUNC, _args_...) \ {\ - fapi2::hwpLock(true); \ + fapi2::hwpResetGlobals(); \ FUNC(_args_); \ - fapi2::hwpLock(false); \ + fapi2::hwpResetGlobals(); \ } -- cgit v1.2.3