oacc-init.c (acc_init): Remove !cached_base_dev condition on call to gomp_init_target...
authorChung-Lin Tang <cltang@codesourcery.com>
Tue, 17 May 2016 08:07:52 +0000 (08:07 +0000)
committerChung-Lin Tang <cltang@gcc.gnu.org>
Tue, 17 May 2016 08:07:52 +0000 (08:07 +0000)
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

libgomp/ChangeLog
libgomp/oacc-init.c

index f509114a20cb592fb609e9bb787d219a5a3a8d20..3f2fe5a4df9b6629ce27837532753cbaabadefe4 100644 (file)
@@ -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.
index 42d005da5f2482cc1267a14a49adac7306dc7dee..f6176eccd3f658d8d5eea744c2645ac529994910 100644 (file)
@@ -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;