Blame SOURCES/papi-thread_init.patch

4c4cb0
commit 617eeabe0bbfb5357c10b22ebd72b24a4a872e52
4c4cb0
Author: Anthony <adanalis@icl.utk.edu>
4c4cb0
Date:   Mon Jan 6 15:09:42 2020 -0500
4c4cb0
4c4cb0
    Updated the variables that are used in the debug messages in accordance to a previous commit that made these variables thread safe.
4c4cb0
4c4cb0
diff --git a/src/papi_internal.c b/src/papi_internal.c
4c4cb0
index f0e457bf7..69b2914d0 100644
4c4cb0
--- a/src/papi_internal.c
4c4cb0
+++ b/src/papi_internal.c
4c4cb0
@@ -114,7 +114,7 @@ _papi_hwi_free_papi_event_string() {
4c4cb0
 
4c4cb0
 void
4c4cb0
 _papi_hwi_set_papi_event_code (unsigned int event_code, int update_flag) {
4c4cb0
-	INTDBG("new event_code: %#x, update_flag: %d, previous event_code: %#x\n", event_code, update_flag, papi_event_code);
4c4cb0
+	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);
4c4cb0
 
4c4cb0
 	// if call is just to reset and start over, set both flags to show nothing saved yet
4c4cb0
 	if (update_flag < 0) {
4c4cb0
@@ -131,7 +131,7 @@ _papi_hwi_set_papi_event_code (unsigned int event_code, int update_flag) {
4c4cb0
 }
4c4cb0
 unsigned int
4c4cb0
 _papi_hwi_get_papi_event_code () {
4c4cb0
-	INTDBG("papi_event_code: %#x\n", papi_event_code);
4c4cb0
+	INTDBG("papi_event_code: %#x\n", _papi_hwi_my_thread->tls_papi_event_code);
4c4cb0
 	return _papi_hwi_my_thread->tls_papi_event_code;
4c4cb0
 }
4c4cb0
 /* Get the index into the ESI->NativeInfoArray for the current PAPI event code */
4c4cb0
From 3cc3b6679e1ace7516c3037105ad16410ce7d3db Mon Sep 17 00:00:00 2001
4c4cb0
From: William Cohen <wcohen@redhat.com>
4c4cb0
Date: Wed, 12 Aug 2020 10:12:59 -0400
4c4cb0
Subject: [PATCH] Initialize component globals before threads globals
4c4cb0
4c4cb0
An earlier commit (979e80136) swapped the order of initializing
4c4cb0
globals and threads.  This caused issues with the perf_event, appio,
4c4cb0
and stealtime components which could be observed with the
4c4cb0
all_native_events, appio_test_pthreads, and stealtime_basic tests
4c4cb0
respectively.  The component initialization needs to be performed
4c4cb0
before the thread initialization.
4c4cb0
4c4cb0
The order of initialization has been changed back to initializing the
4c4cb0
component then the threads.  One complication is that papi_internal.c
4c4cb0
had functions (_papi_hwi_set_papi_event_code and
4c4cb0
_papi_hwi_get_papi_event_code) that required thread local storage that
4c4cb0
was being setup in commit 979e80136 by the thread initialization.
4c4cb0
This was the original reason for swapping the order of initialization
4c4cb0
of component and thread.  Using __thread on the file scope
4c4cb0
declarations of the variables allow the original order of
4c4cb0
initialization.
4c4cb0
---
4c4cb0
 src/papi.c          | 10 +++++-----
4c4cb0
 src/papi_internal.c | 21 +++++++++++++--------
4c4cb0
 2 files changed, 18 insertions(+), 13 deletions(-)
4c4cb0
4c4cb0
diff --git a/src/papi.c b/src/papi.c
4c4cb0
index 33cc29935..107a15044 100644
4c4cb0
--- a/src/papi.c
4c4cb0
+++ b/src/papi.c
4c4cb0
@@ -1151,19 +1151,19 @@ PAPI_library_init( int version )
4c4cb0
 	   papi_return( init_retval );
4c4cb0
 	}
4c4cb0
 
4c4cb0
-	/* Initialize thread globals, including the main threads  */
4c4cb0
+	/* Initialize component globals */
4c4cb0
 
4c4cb0
-	tmp = _papi_hwi_init_global_threads(  );
4c4cb0
+	tmp = _papi_hwi_init_global(  );
4c4cb0
 	if ( tmp ) {
4c4cb0
 		init_retval = tmp;
4c4cb0
 		_papi_hwi_shutdown_global_internal(  );
4c4cb0
-   	_in_papi_library_init_cnt--;
4c4cb0
+		_in_papi_library_init_cnt--;
4c4cb0
 		papi_return( init_retval );
4c4cb0
 	}
4c4cb0
 
4c4cb0
-	/* Initialize component globals */
4c4cb0
+	/* Initialize thread globals, including the main threads  */
4c4cb0
 
4c4cb0
-	tmp = _papi_hwi_init_global(  );
4c4cb0
+	tmp = _papi_hwi_init_global_threads(  );
4c4cb0
 	if ( tmp ) {
4c4cb0
 		init_retval = tmp;
4c4cb0
 		_papi_hwi_shutdown_global_internal(  );
4c4cb0
diff --git a/src/papi_internal.c b/src/papi_internal.c
4c4cb0
index 5a1ccd433..bdf30f875 100644
4c4cb0
--- a/src/papi_internal.c
4c4cb0
+++ b/src/papi_internal.c
4c4cb0
@@ -115,27 +115,32 @@ _papi_hwi_free_papi_event_string() {
4c4cb0
 	return;
4c4cb0
 }
4c4cb0
 
4c4cb0
+// A place to keep the current papi event code so some component functions can fetch its value
4c4cb0
+// The current event code can be stored here prior to component calls and cleared after the component returns
4c4cb0
+static THREAD_LOCAL_STORAGE_KEYWORD unsigned int papi_event_code = -1;
4c4cb0
+static THREAD_LOCAL_STORAGE_KEYWORD int papi_event_code_changed = -1;
4c4cb0
+
4c4cb0
 void
4c4cb0
 _papi_hwi_set_papi_event_code (unsigned int event_code, int update_flag) {
4c4cb0
-	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);
4c4cb0
+	INTDBG("new event_code: %#x, update_flag: %d, previous event_code: %#x\n", event_code, update_flag, papi_event_code);
4c4cb0
 
4c4cb0
 	// if call is just to reset and start over, set both flags to show nothing saved yet
4c4cb0
 	if (update_flag < 0) {
4c4cb0
-		_papi_hwi_my_thread->tls_papi_event_code_changed = -1;
4c4cb0
-		_papi_hwi_my_thread->tls_papi_event_code = -1;
4c4cb0
+		papi_event_code_changed = -1;
4c4cb0
+		papi_event_code = -1;
4c4cb0
 		return;
4c4cb0
 	}
4c4cb0
 
4c4cb0
 	// if 0, it is being set prior to calling a component, if >0 it is being changed by the component
4c4cb0
-	_papi_hwi_my_thread->tls_papi_event_code_changed = update_flag;
4c4cb0
+	papi_event_code_changed = update_flag;
4c4cb0
 	// save the event code passed in
4c4cb0
-	_papi_hwi_my_thread->tls_papi_event_code = event_code;
4c4cb0
+	papi_event_code = event_code;
4c4cb0
 	return;
4c4cb0
 }
4c4cb0
 unsigned int
4c4cb0
 _papi_hwi_get_papi_event_code () {
4c4cb0
-	INTDBG("papi_event_code: %#x\n", _papi_hwi_my_thread->tls_papi_event_code);
4c4cb0
-	return _papi_hwi_my_thread->tls_papi_event_code;
4c4cb0
+	INTDBG("papi_event_code: %#x\n", papi_event_code);
4c4cb0
+	return papi_event_code;
4c4cb0
 }
4c4cb0
 /* Get the index into the ESI->NativeInfoArray for the current PAPI event code */
4c4cb0
 int
4c4cb0
@@ -560,7 +565,7 @@ _papi_hwi_native_to_eventcode(int cidx, int event_code, int ntv_idx, const char
4c4cb0
 
4c4cb0
   int result;
4c4cb0
 
4c4cb0
-  if (_papi_hwi_my_thread->tls_papi_event_code_changed > 0) {
4c4cb0
+  if (papi_event_code_changed > 0) {
4c4cb0
 	  result = _papi_hwi_get_papi_event_code();
4c4cb0
 	  INTDBG("EXIT: papi_event_code: %#x set by the component\n", result);
4c4cb0
 	  return result;
4c4cb0
-- 
4c4cb0
2.26.2
4c4cb0