Really fix og9 "Fix hang when running oacc exec with CUDA 9.0 nvprof"

In my yesterday's commit 9ae129017c 'Fix og9 "Fix
hang when running oacc exec with CUDA 9.0 nvprof"', I wrongly blamed the og9
"Fix hang when running oacc exec with CUDA 9.0 nvprof" to be responsible for
the hang being back, when in fact it's only the later og9 "OpenACC Profiling
Interface (incomplete)" backport from trunk that introduced the problem.

The confusing thing was that the og9 "Fix hang when running oacc exec with CUDA
9.0 nvprof" commit appears *before* the og9 "OpenACC Profiling Interface
(incomplete)" backport that it relates to.

And, in addition to that, I pushed the wrong (incomplete) version of my fix.

	libgomp/
	* oacc-init.c (acc_init_1): Move other 'acc_init_state' logic to
	where it belongs.
This commit is contained in:
Thomas Schwinge 2020-03-26 17:34:01 +01:00
parent 9ae129017c
commit 775f1686a3
2 changed files with 13 additions and 4 deletions

View File

@ -1,3 +1,8 @@
2020-03-26 Thomas Schwinge <thomas@codesourcery.com>
* oacc-init.c (acc_init_1): Move other 'acc_init_state' logic to
where it belongs.
2020-03-25 Thomas Schwinge <thomas@codesourcery.com>
* oacc-init.c (acc_init_1): Move 'acc_init_state' logic to where

View File

@ -317,10 +317,6 @@ acc_init_1 (acc_device_t d, acc_construct_t parent_construct, int implicit)
gomp_init_device (acc_dev);
gomp_mutex_unlock (&acc_dev->lock);
gomp_mutex_lock (&acc_init_state_lock);
acc_init_state = initialized;
gomp_mutex_unlock (&acc_init_state_lock);
if (profiling_p)
{
prof_info.event_type = acc_ev_device_init_end;
@ -329,6 +325,14 @@ acc_init_1 (acc_device_t d, acc_construct_t parent_construct, int implicit)
&api_info);
}
/* We're setting 'initialized' *after* 'goacc_profiling_dispatch', so that a
nested 'acc_get_device_type' called from a profiling callback still sees
'initializing', so that we don't deadlock when it then again tries to lock
'goacc_prof_lock'. See also the discussion in 'acc_get_device_type'. */
gomp_mutex_lock (&acc_init_state_lock);
acc_init_state = initialized;
gomp_mutex_unlock (&acc_init_state_lock);
return base_dev;
}