140 lines
5.6 KiB
Diff
140 lines
5.6 KiB
Diff
commit 617eeabe0bbfb5357c10b22ebd72b24a4a872e52
|
|
Author: Anthony <adanalis@icl.utk.edu>
|
|
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 <wcohen@redhat.com>
|
|
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
|
|
|