Committed r15-5392-g884637b6362391 (as attached)
Albeit with a minor comment change as my new comment was slightly
misleading.
Tobias Burnus wrote:
This fixes a C23 error, causing a build fail: 'false'
should have been 'NULL'.
The NULL value is not really handled as the code calling
maybe_init_omp_async assumes that agent->omp_async_queue can be
dereferenced. Hence, besides fixing the false/NULL issue, it switches
to a 'fatal' error. Comments before I commit it after lunch?
Tobias
commit 884637b6362391921100efa2c7db4f4452e2a13f
Author: Tobias Burnus <tbur...@baylibre.com>
Date: Mon Nov 18 14:58:21 2024 +0100
libgomp/plugin/plugin-gcn.c: async-queue init - fix function-return type and fail fatally
libgomp/ChangeLog:
* plugin/plugin-gcn.c (GOMP_OFFLOAD_openacc_async_construct): In
case of an error, call GOMP_PLUGIN_fatal not ..._error; use NULL
not false in return.
---
libgomp/plugin/plugin-gcn.c | 16 +++++++++-------
1 file changed, 9 insertions(+), 7 deletions(-)
diff --git a/libgomp/plugin/plugin-gcn.c b/libgomp/plugin/plugin-gcn.c
index f2f2940de9d..d26b93657bf 100644
--- a/libgomp/plugin/plugin-gcn.c
+++ b/libgomp/plugin/plugin-gcn.c
@@ -4388,7 +4388,9 @@ GOMP_OFFLOAD_openacc_async_exec (void (*fn_ptr) (void *),
gcn_exec (kernel, devaddrs, dims, targ_mem_desc, true, aq);
}
-/* Create a new asynchronous thread and queue for running future kernels. */
+/* Create a new asynchronous thread and queue for running future kernels;
+ issues a fatal error if the queue cannot be created as all callers expect
+ that the queue exists. */
struct goacc_asyncqueue *
GOMP_OFFLOAD_openacc_async_construct (int device)
@@ -4416,18 +4418,18 @@ GOMP_OFFLOAD_openacc_async_construct (int device)
if (pthread_mutex_init (&aq->mutex, NULL))
{
- GOMP_PLUGIN_error ("Failed to initialize a GCN agent queue mutex");
- return false;
+ GOMP_PLUGIN_fatal ("Failed to initialize a GCN agent queue mutex");
+ return NULL;
}
if (pthread_cond_init (&aq->queue_cond_in, NULL))
{
- GOMP_PLUGIN_error ("Failed to initialize a GCN agent queue cond");
- return false;
+ GOMP_PLUGIN_fatal ("Failed to initialize a GCN agent queue cond");
+ return NULL;
}
if (pthread_cond_init (&aq->queue_cond_out, NULL))
{
- GOMP_PLUGIN_error ("Failed to initialize a GCN agent queue cond");
- return false;
+ GOMP_PLUGIN_fatal ("Failed to initialize a GCN agent queue cond");
+ return NULL;
}
hsa_status_t status = hsa_fns.hsa_queue_create_fn (agent->id,