aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChung-Lin Tang <cltang@codesourcery.com>2016-05-17 08:07:52 +0000
committerChung-Lin Tang <cltang@gcc.gnu.org>2016-05-17 08:07:52 +0000
commite37288a608ed33f7789feff4f4ee7fa772e5a962 (patch)
treee3b174fc73b1ba4b2a489962bed55e58b39ca16c
parentd35c169874df4bfb773c511b188754f6e22e4f55 (diff)
downloadgcc-e37288a608ed33f7789feff4f4ee7fa772e5a962.zip
gcc-e37288a608ed33f7789feff4f4ee7fa772e5a962.tar.gz
gcc-e37288a608ed33f7789feff4f4ee7fa772e5a962.tar.bz2
oacc-init.c (acc_init): Remove !cached_base_dev condition on call to gomp_init_targets_once.
2016-05-17 Chung-Lin Tang <cltang@codesourcery.com> libgomp/ * oacc-init.c (acc_init): Remove !cached_base_dev condition on call to gomp_init_targets_once. (acc_set_device_type): Remove !cached_base_dev condition on call to gomp_init_targets_once, move call to before acc_device_lock acquire, to avoid deadlock. (acc_get_device_num): Remove !cached_base_dev condition on call to gomp_init_targets_once. (acc_set_device_num): Likewise. From-SVN: r236310
-rw-r--r--libgomp/ChangeLog11
-rw-r--r--libgomp/oacc-init.c14
2 files changed, 16 insertions, 9 deletions
diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog
index f509114..3f2fe5a 100644
--- a/libgomp/ChangeLog
+++ b/libgomp/ChangeLog
@@ -1,3 +1,14 @@
+2016-05-17 Chung-Lin Tang <cltang@codesourcery.com>
+
+ * oacc-init.c (acc_init): Remove !cached_base_dev condition on call
+ to gomp_init_targets_once.
+ (acc_set_device_type): Remove !cached_base_dev condition on call to
+ gomp_init_targets_once, move call to before acc_device_lock acquire,
+ to avoid deadlock.
+ (acc_get_device_num): Remove !cached_base_dev condition on call to
+ gomp_init_targets_once.
+ (acc_set_device_num): Likewise.
+
2016-05-16 Martin Jambor <mjambor@suse.cz>
* testsuite/libgomp.hsa.c/complex-align-2.c: New test.
diff --git a/libgomp/oacc-init.c b/libgomp/oacc-init.c
index 42d005d..f6176ec 100644
--- a/libgomp/oacc-init.c
+++ b/libgomp/oacc-init.c
@@ -433,8 +433,7 @@ goacc_attach_host_thread_to_device (int ord)
void
acc_init (acc_device_t d)
{
- if (!cached_base_dev)
- gomp_init_targets_once ();
+ gomp_init_targets_once ();
gomp_mutex_lock (&acc_device_lock);
@@ -498,10 +497,9 @@ acc_set_device_type (acc_device_t d)
struct gomp_device_descr *base_dev, *acc_dev;
struct goacc_thread *thr = goacc_thread ();
- gomp_mutex_lock (&acc_device_lock);
+ gomp_init_targets_once ();
- if (!cached_base_dev)
- gomp_init_targets_once ();
+ gomp_mutex_lock (&acc_device_lock);
cached_base_dev = base_dev = resolve_device (d, true);
acc_dev = &base_dev[goacc_device_num];
@@ -563,8 +561,7 @@ acc_get_device_num (acc_device_t d)
if (d >= _ACC_device_hwm)
gomp_fatal ("unknown device type %u", (unsigned) d);
- if (!cached_base_dev)
- gomp_init_targets_once ();
+ gomp_init_targets_once ();
gomp_mutex_lock (&acc_device_lock);
dev = resolve_device (d, true);
@@ -584,8 +581,7 @@ acc_set_device_num (int ord, acc_device_t d)
struct gomp_device_descr *base_dev, *acc_dev;
int num_devices;
- if (!cached_base_dev)
- gomp_init_targets_once ();
+ gomp_init_targets_once ();
if (ord < 0)
ord = goacc_device_num;