amdgcn: Check HSA return codes [PR94629]
authorAndrew Stubbs <ams@codesourcery.com>
Mon, 20 Apr 2020 14:25:31 +0000 (15:25 +0100)
committerAndrew Stubbs <ams@codesourcery.com>
Thu, 23 Apr 2020 14:05:23 +0000 (15:05 +0100)
Ensure that the returned status values are not ignored.  The old code was
not broken, but this is both safer and satisfies static analysis.

2020-04-23  Andrew Stubbs  <ams@codesourcery.com>

PR other/94629

libgomp/
* plugin/plugin-gcn.c (init_hsa_context): Check return value from
hsa_iterate_agents.
(GOMP_OFFLOAD_init_device): Check return values from both calls to
hsa_agent_iterate_regions.

libgomp/ChangeLog
libgomp/plugin/plugin-gcn.c

index c524abbbfb6be6596acd9a62ba132a7b9ab961f9..ee1764d4ae31d618e20f863646f0a4044db46bdd 100644 (file)
@@ -1,3 +1,12 @@
+2020-04-23  Andrew Stubbs  <ams@codesourcery.com>
+
+       PR other/94629
+
+       * plugin/plugin-gcn.c (init_hsa_context): Check return value from
+       hsa_iterate_agents.
+       (GOMP_OFFLOAD_init_device): Check return values from both calls to
+       hsa_agent_iterate_regions.
+
 2020-04-20  Thomas Schwinge  <thomas@codesourcery.com>
 
        PR middle-end/94635
index dc72c90962c2d4725beeb51619fc402e0ff6864b..4c6a4c03b6e5df55331322cd5002619f77b4af65 100644 (file)
@@ -1508,6 +1508,8 @@ init_hsa_context (void)
     = GOMP_PLUGIN_malloc_cleared (hsa_context.agent_count
                                  * sizeof (struct agent_info));
   status = hsa_fns.hsa_iterate_agents_fn (assign_agent_ids, &agent_index);
+  if (status != HSA_STATUS_SUCCESS)
+    return hsa_error ("Scanning compute agents failed", status);
   if (agent_index != hsa_context.agent_count)
     {
       GOMP_PLUGIN_error ("Failed to assign IDs to all GCN agents");
@@ -3473,6 +3475,9 @@ GOMP_OFFLOAD_init_device (int n)
   status = hsa_fns.hsa_agent_iterate_regions_fn (agent->id,
                                                 get_kernarg_memory_region,
                                                 &agent->kernarg_region);
+  if (status != HSA_STATUS_SUCCESS
+      && status != HSA_STATUS_INFO_BREAK)
+    hsa_error ("Scanning memory regions failed", status);
   if (agent->kernarg_region.handle == (uint64_t) -1)
     {
       GOMP_PLUGIN_error ("Could not find suitable memory region for kernel "
@@ -3486,6 +3491,9 @@ GOMP_OFFLOAD_init_device (int n)
   status = hsa_fns.hsa_agent_iterate_regions_fn (agent->id,
                                                 get_data_memory_region,
                                                 &agent->data_region);
+  if (status != HSA_STATUS_SUCCESS
+      && status != HSA_STATUS_INFO_BREAK)
+    hsa_error ("Scanning memory regions failed", status);
   if (agent->data_region.handle == (uint64_t) -1)
     {
       GOMP_PLUGIN_error ("Could not find suitable memory region for device "