Fix rhbz2007882, rhbz2007883, and rhbz2007877
This commit is contained in:
		
							parent
							
								
									ab0e12886d
								
							
						
					
					
						commit
						60da07ee04
					
				
							
								
								
									
										139
									
								
								papi-thread_init.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										139
									
								
								papi-thread_init.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,139 @@ | ||||
| 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 | ||||
| 
 | ||||
| @ -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 <wcohen@redhat.com> - 6.0.0-10 | ||||
| - Correct initialization for stealtime component. | ||||
| 
 | ||||
| * Thu Jul 22 2021 Fedora Release Engineering <releng@fedoraproject.org> - 6.0.0-9 | ||||
| - Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user