From e37288a608ed33f7789feff4f4ee7fa772e5a962 Mon Sep 17 00:00:00 2001 From: Chung-Lin Tang Date: Tue, 17 May 2016 08:07:52 +0000 Subject: [PATCH] oacc-init.c (acc_init): Remove !cached_base_dev condition on call to gomp_init_targets_once. 2016-05-17 Chung-Lin Tang 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 | 11 +++++++++++ libgomp/oacc-init.c | 14 +++++--------- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog index f509114a20c..3f2fe5a4df9 100644 --- a/libgomp/ChangeLog +++ b/libgomp/ChangeLog @@ -1,3 +1,14 @@ +2016-05-17 Chung-Lin Tang + + * 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 * testsuite/libgomp.hsa.c/complex-align-2.c: New test. diff --git a/libgomp/oacc-init.c b/libgomp/oacc-init.c index 42d005da5f2..f6176eccd3f 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;