Hi Julian! On 2019-12-17T22:02:27-0800, Julian Brown <jul...@codesourcery.com> wrote: > --- a/libgomp/oacc-mem.c > +++ b/libgomp/oacc-mem.c
> @@ -571,14 +570,16 @@ present_create_copy (unsigned f, void *h, size_t s, int > async) > > goacc_aq aq = get_goacc_asyncqueue (async); > > - tgt = gomp_map_vars_async (acc_dev, aq, mapnum, &hostaddrs, NULL, &s, > - &kinds, true, GOMP_MAP_VARS_OPENACC); > - n = tgt->list[0].key; > - assert (n->refcount == 1); > - assert (n->dynamic_refcount == 0); > - n->dynamic_refcount++; > + gomp_map_vars_async (acc_dev, aq, mapnum, &hostaddrs, NULL, &s, &kinds, > + true, GOMP_MAP_VARS_OPENACC_ENTER_DATA); > > - d = tgt->to_free; > + gomp_mutex_lock (&acc_dev->lock); > + n = lookup_host (acc_dev, h, s); > + assert (n != NULL); > + assert (n->tgt_offset == 0); > + assert ((uintptr_t) h == n->host_start); > + d = (void *) n->tgt->tgt_start; > + gomp_mutex_unlock (&acc_dev->lock); > } Notwithstanding the open question of the "'gomp_map_vars' locking protocol" (discussed in a different thread, to be resolved independently), is there a reason that you changed this code to look up 'n = lookup_host ([...])'? This is the case that 'gomp_map_vars' enters a new mapping, so by construction, 'n = tgt->list[0].key' must hold? I tested the following: --- libgomp/oacc-mem.c +++ libgomp/oacc-mem.c @@ -555,16 +555,17 @@ goacc_enter_datum (void **hostaddrs, size_t *sizes, void *kinds, int async) goacc_aq aq = get_goacc_asyncqueue (async); - gomp_map_vars_async (acc_dev, aq, mapnum, hostaddrs, NULL, sizes, kinds, - true, GOMP_MAP_VARS_OPENACC_ENTER_DATA); + struct target_mem_desc *tgt + = gomp_map_vars_async (acc_dev, aq, mapnum, hostaddrs, NULL, sizes, kinds, + true, GOMP_MAP_VARS_OPENACC_ENTER_DATA); + assert (tgt); + n = tgt->list[0].key; + assert (n->refcount == 1); + assert (n->virtual_refcount == 0); - gomp_mutex_lock (&acc_dev->lock); - n = lookup_host (acc_dev, hostaddrs[0], sizes[0]); - assert (n != NULL); assert (n->tgt_offset == 0); assert ((uintptr_t) hostaddrs[0] == n->host_start); d = (void *) n->tgt->tgt_start; - gomp_mutex_unlock (&acc_dev->lock); } ..., and don't see any regressions. If approving this patch, please respond with "Reviewed-by: NAME <EMAIL>" so that your effort will be recorded in the commit log, see <https://gcc.gnu.org/wiki/Reviewed-by>. Grüße Thomas ----------------- Mentor Graphics (Deutschland) GmbH, Arnulfstraße 201, 80634 München / Germany Registergericht München HRB 106955, Geschäftsführer: Thomas Heurung, Alexander Walter