diff options
author | Andrew Stubbs <ams@codesourcery.com> | 2020-04-20 15:25:31 +0100 |
---|---|---|
committer | Andrew Stubbs <ams@codesourcery.com> | 2020-04-23 15:05:23 +0100 |
commit | 966de09be91c639d66d252c9ae6ab8da5ebfca18 (patch) | |
tree | ce0d4fc53f0913505e6212d3570deea88d854c81 /libgomp | |
parent | 744b3e4478df83f54543964b8eb7250eb9bb6d40 (diff) | |
download | gcc-966de09be91c639d66d252c9ae6ab8da5ebfca18.zip gcc-966de09be91c639d66d252c9ae6ab8da5ebfca18.tar.gz gcc-966de09be91c639d66d252c9ae6ab8da5ebfca18.tar.bz2 |
amdgcn: Check HSA return codes [PR94629]
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.
Diffstat (limited to 'libgomp')
-rw-r--r-- | libgomp/ChangeLog | 9 | ||||
-rw-r--r-- | libgomp/plugin/plugin-gcn.c | 8 |
2 files changed, 17 insertions, 0 deletions
diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog index c524abbb..ee1764d 100644 --- a/libgomp/ChangeLog +++ b/libgomp/ChangeLog @@ -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 diff --git a/libgomp/plugin/plugin-gcn.c b/libgomp/plugin/plugin-gcn.c index dc72c90..4c6a4c0 100644 --- a/libgomp/plugin/plugin-gcn.c +++ b/libgomp/plugin/plugin-gcn.c @@ -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 " |