From 60da07ee04eb94e3b41157a70cc97c24304ebd51 Mon Sep 17 00:00:00 2001 From: William Cohen Date: Nov 19 2021 15:12:55 +0000 Subject: Fix rhbz2007882, rhbz2007883, and rhbz2007877 --- diff --git a/papi-thread_init.patch b/papi-thread_init.patch new file mode 100644 index 0000000..8205d95 --- /dev/null +++ b/papi-thread_init.patch @@ -0,0 +1,139 @@ +commit 617eeabe0bbfb5357c10b22ebd72b24a4a872e52 +Author: Anthony +Date: Mon Jan 6 15:09:42 2020 -0500 + + Updated the variables that are used in the debug messages in accordance to a previous commit that made these variables thread safe. + +diff --git a/src/papi_internal.c b/src/papi_internal.c +index f0e457bf7..69b2914d0 100644 +--- a/src/papi_internal.c ++++ b/src/papi_internal.c +@@ -114,7 +114,7 @@ _papi_hwi_free_papi_event_string() { + + void + _papi_hwi_set_papi_event_code (unsigned int event_code, int update_flag) { +- INTDBG("new event_code: %#x, update_flag: %d, previous event_code: %#x\n", event_code, update_flag, papi_event_code); ++ INTDBG("new event_code: %#x, update_flag: %d, previous event_code: %#x\n", event_code, update_flag, _papi_hwi_my_thread->tls_papi_event_code); + + // if call is just to reset and start over, set both flags to show nothing saved yet + if (update_flag < 0) { +@@ -131,7 +131,7 @@ _papi_hwi_set_papi_event_code (unsigned int event_code, int update_flag) { + } + unsigned int + _papi_hwi_get_papi_event_code () { +- INTDBG("papi_event_code: %#x\n", papi_event_code); ++ INTDBG("papi_event_code: %#x\n", _papi_hwi_my_thread->tls_papi_event_code); + return _papi_hwi_my_thread->tls_papi_event_code; + } + /* Get the index into the ESI->NativeInfoArray for the current PAPI event code */ +From 3cc3b6679e1ace7516c3037105ad16410ce7d3db Mon Sep 17 00:00:00 2001 +From: William Cohen +Date: Wed, 12 Aug 2020 10:12:59 -0400 +Subject: [PATCH] Initialize component globals before threads globals + +An earlier commit (979e80136) swapped the order of initializing +globals and threads. This caused issues with the perf_event, appio, +and stealtime components which could be observed with the +all_native_events, appio_test_pthreads, and stealtime_basic tests +respectively. The component initialization needs to be performed +before the thread initialization. + +The order of initialization has been changed back to initializing the +component then the threads. One complication is that papi_internal.c +had functions (_papi_hwi_set_papi_event_code and +_papi_hwi_get_papi_event_code) that required thread local storage that +was being setup in commit 979e80136 by the thread initialization. +This was the original reason for swapping the order of initialization +of component and thread. Using __thread on the file scope +declarations of the variables allow the original order of +initialization. +--- + src/papi.c | 10 +++++----- + src/papi_internal.c | 21 +++++++++++++-------- + 2 files changed, 18 insertions(+), 13 deletions(-) + +diff --git a/src/papi.c b/src/papi.c +index 33cc29935..107a15044 100644 +--- a/src/papi.c ++++ b/src/papi.c +@@ -1151,19 +1151,19 @@ PAPI_library_init( int version ) + papi_return( init_retval ); + } + +- /* Initialize thread globals, including the main threads */ ++ /* Initialize component globals */ + +- tmp = _papi_hwi_init_global_threads( ); ++ tmp = _papi_hwi_init_global( ); + if ( tmp ) { + init_retval = tmp; + _papi_hwi_shutdown_global_internal( ); +- _in_papi_library_init_cnt--; ++ _in_papi_library_init_cnt--; + papi_return( init_retval ); + } + +- /* Initialize component globals */ ++ /* Initialize thread globals, including the main threads */ + +- tmp = _papi_hwi_init_global( ); ++ tmp = _papi_hwi_init_global_threads( ); + if ( tmp ) { + init_retval = tmp; + _papi_hwi_shutdown_global_internal( ); +diff --git a/src/papi_internal.c b/src/papi_internal.c +index 5a1ccd433..bdf30f875 100644 +--- a/src/papi_internal.c ++++ b/src/papi_internal.c +@@ -115,27 +115,32 @@ _papi_hwi_free_papi_event_string() { + return; + } + ++// A place to keep the current papi event code so some component functions can fetch its value ++// The current event code can be stored here prior to component calls and cleared after the component returns ++static THREAD_LOCAL_STORAGE_KEYWORD unsigned int papi_event_code = -1; ++static THREAD_LOCAL_STORAGE_KEYWORD int papi_event_code_changed = -1; ++ + void + _papi_hwi_set_papi_event_code (unsigned int event_code, int update_flag) { +- INTDBG("new event_code: %#x, update_flag: %d, previous event_code: %#x\n", event_code, update_flag, _papi_hwi_my_thread->tls_papi_event_code); ++ INTDBG("new event_code: %#x, update_flag: %d, previous event_code: %#x\n", event_code, update_flag, papi_event_code); + + // if call is just to reset and start over, set both flags to show nothing saved yet + if (update_flag < 0) { +- _papi_hwi_my_thread->tls_papi_event_code_changed = -1; +- _papi_hwi_my_thread->tls_papi_event_code = -1; ++ papi_event_code_changed = -1; ++ papi_event_code = -1; + return; + } + + // if 0, it is being set prior to calling a component, if >0 it is being changed by the component +- _papi_hwi_my_thread->tls_papi_event_code_changed = update_flag; ++ papi_event_code_changed = update_flag; + // save the event code passed in +- _papi_hwi_my_thread->tls_papi_event_code = event_code; ++ papi_event_code = event_code; + return; + } + unsigned int + _papi_hwi_get_papi_event_code () { +- INTDBG("papi_event_code: %#x\n", _papi_hwi_my_thread->tls_papi_event_code); +- return _papi_hwi_my_thread->tls_papi_event_code; ++ INTDBG("papi_event_code: %#x\n", papi_event_code); ++ return papi_event_code; + } + /* Get the index into the ESI->NativeInfoArray for the current PAPI event code */ + int +@@ -560,7 +565,7 @@ _papi_hwi_native_to_eventcode(int cidx, int event_code, int ntv_idx, const char + + int result; + +- if (_papi_hwi_my_thread->tls_papi_event_code_changed > 0) { ++ if (papi_event_code_changed > 0) { + result = _papi_hwi_get_papi_event_code(); + INTDBG("EXIT: papi_event_code: %#x set by the component\n", result); + return result; +-- +2.26.2 + diff --git a/papi.spec b/papi.spec index 56f66e2..21a5ca7 100644 --- a/papi.spec +++ b/papi.spec @@ -11,7 +11,7 @@ Summary: Performance Application Programming Interface Name: papi Version: 6.0.0 -Release: 9%{?dist} +Release: 10%{?dist} License: BSD Requires: papi-libs = %{version}-%{release} URL: http://icl.cs.utk.edu/papi/ @@ -21,6 +21,7 @@ Patch2: papi-a64fx.patch Patch3: papi-no-iozone.patch Patch4: papi-config.patch Patch5: papi-nostatic.patch +Patch6: papi-init_thread.patch BuildRequires: make BuildRequires: autoconf BuildRequires: doxygen @@ -93,6 +94,7 @@ the PAPI user-space libraries and interfaces. %patch3 -p1 %patch4 -p1 %patch5 -p1 +%patch6 -p1 -b .thread %build # This package fails to build with LTO due to undefined symbols. LTO @@ -191,6 +193,9 @@ find %{buildroot} -type f -executable ! -iname "*.py" ! -iname "*.sh" | xargs ch %endif %changelog +* Fri Nov 19 2021 William Cohen - 6.0.0-10 +- Correct initialization for stealtime component. + * Thu Jul 22 2021 Fedora Release Engineering - 6.0.0-9 - Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild