From: Julian Brown Date: Fri, 31 Jul 2020 15:22:00 +0000 (-0700) Subject: Revert "OpenACC reference count consistency checking" X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2e8ad1c9ebbaa58b8e37a06ddec6fc31ee0b6586;p=thirdparty%2Fgcc.git Revert "OpenACC reference count consistency checking" This reverts commit 56ebcdff802678b11deb1a9c3f6d20d33498e944. --- diff --git a/libgomp/libgomp.h b/libgomp/libgomp.h index 2770399b0678..c51d72301901 100644 --- a/libgomp/libgomp.h +++ b/libgomp/libgomp.h @@ -960,17 +960,9 @@ struct target_var_desc { uintptr_t length; }; -/* Uncomment to enable reference-count consistency checking (for development - use only). */ -//#define RC_CHECKING 1 - struct target_mem_desc { /* Reference count. */ uintptr_t refcount; -#ifdef RC_CHECKING - uintptr_t refcount_chk; - bool mark; -#endif /* All the splay nodes allocated together. */ splay_tree_node array; /* Start of the target region. */ @@ -1029,10 +1021,6 @@ struct splay_tree_key_s { "present increment" operations (via "acc enter data") referring to the same host-memory block. */ uintptr_t virtual_refcount; -#ifdef RC_CHECKING - /* The recalculated reference count, for verification. */ - uintptr_t refcount_chk; -#endif struct splay_tree_aux *aux; }; @@ -1189,12 +1177,6 @@ extern void gomp_detach_pointer (struct gomp_device_descr *, struct goacc_asyncqueue *, splay_tree_key, uintptr_t, bool, struct gomp_coalesce_buf *); -#ifdef RC_CHECKING -extern void dump_tgt (const char *, struct target_mem_desc *); -extern void gomp_rc_check (struct gomp_device_descr *, - struct target_mem_desc *); -#endif - extern struct target_mem_desc *gomp_map_vars (struct gomp_device_descr *, size_t, void **, void **, size_t *, void *, bool, diff --git a/libgomp/oacc-parallel.c b/libgomp/oacc-parallel.c index 1ea64f222a72..192641988a03 100644 --- a/libgomp/oacc-parallel.c +++ b/libgomp/oacc-parallel.c @@ -583,15 +583,6 @@ GOACC_parallel_keyed (int flags_m, void (*fn) (void *), size_t mapnum, nca_info); free (nca_info); -#ifdef RC_CHECKING - gomp_mutex_lock (&acc_dev->lock); - assert (tgt); - dump_tgt (__FUNCTION__, tgt); - tgt->prev = thr->mapped_data; - gomp_rc_check (acc_dev, tgt); - gomp_mutex_unlock (&acc_dev->lock); -#endif - if (profiling_p) { prof_info.event_type = acc_ev_enter_data_end; @@ -680,12 +671,6 @@ GOACC_parallel_keyed (int flags_m, void (*fn) (void *), size_t mapnum, thr->prof_info = NULL; thr->api_info = NULL; } - -#ifdef RC_CHECKING - gomp_mutex_lock (&acc_dev->lock); - gomp_rc_check (acc_dev, thr->mapped_data); - gomp_mutex_unlock (&acc_dev->lock); -#endif } /* Legacy entry point (GCC 5). Only provide host fallback execution. */ @@ -801,12 +786,6 @@ GOACC_data_start (int flags_m, size_t mapnum, tgt->prev = thr->mapped_data; thr->mapped_data = tgt; -#ifdef RC_CHECKING - gomp_mutex_lock (&acc_dev->lock); - gomp_rc_check (acc_dev, thr->mapped_data); - gomp_mutex_unlock (&acc_dev->lock); -#endif - goto out_prof; } @@ -901,12 +880,6 @@ GOACC_data_end (void) gomp_unmap_vars (tgt, true); gomp_debug (0, " %s: mappings restored\n", __FUNCTION__); -#ifdef RC_CHECKING - gomp_mutex_lock (&thr->dev->lock); - gomp_rc_check (thr->dev, thr->mapped_data); - gomp_mutex_unlock (&thr->dev->lock); -#endif - if (profiling_p) { prof_info.event_type = acc_ev_exit_data_end; @@ -1086,12 +1059,6 @@ GOACC_update (int flags_m, size_t mapnum, thr->prof_info = NULL; thr->api_info = NULL; } - -#ifdef RC_CHECKING - gomp_mutex_lock (&acc_dev->lock); - gomp_rc_check (acc_dev, thr->mapped_data); - gomp_mutex_unlock (&acc_dev->lock); -#endif } diff --git a/libgomp/target.c b/libgomp/target.c index d9a219b42447..35a65cc27937 100644 --- a/libgomp/target.c +++ b/libgomp/target.c @@ -38,9 +38,6 @@ #include #include #include -#ifdef RC_CHECKING -#include -#endif #ifdef PLUGIN_SUPPORT #include @@ -355,185 +352,6 @@ gomp_free_device_memory (struct gomp_device_descr *devicep, void *devptr) } } -#ifdef RC_CHECKING -void -dump_tgt (const char *where, struct target_mem_desc *tgt) -{ - if (!getenv ("GOMP_DEBUG_TGT")) - return; - - fprintf (stderr, "%s: %s: tgt=%p\n", __FUNCTION__, where, (void*) tgt); - fprintf (stderr, "refcount=%d\n", (int) tgt->refcount); - fprintf (stderr, "tgt_start=%p\n", (void*) tgt->tgt_start); - fprintf (stderr, "tgt_end=%p\n", (void*) tgt->tgt_end); - fprintf (stderr, "to_free=%p\n", tgt->to_free); - fprintf (stderr, "list_count=%d\n", (int) tgt->list_count); - for (int i = 0; i < tgt->list_count; i++) - { - fprintf (stderr, "list item %d:\n", i); - fprintf (stderr, " key: %p\n", (void*) tgt->list[i].key); - if (tgt->list[i].key) - { - fprintf (stderr, " key.host_start=%p\n", - (void*) tgt->list[i].key->host_start); - fprintf (stderr, " key.host_end=%p\n", - (void*) tgt->list[i].key->host_end); - fprintf (stderr, " key.tgt=%p\n", (void*) tgt->list[i].key->tgt); - fprintf (stderr, " key.offset=%d\n", - (int) tgt->list[i].key->tgt_offset); - fprintf (stderr, " key.refcount=%d\n", - (int) tgt->list[i].key->refcount); - if (tgt->list[i].key->refcount == REFCOUNT_LINK) - fprintf (stderr, " key.aux.link_key=%p\n", - (void*) tgt->list[i].key->aux->link_key); - else - { - fprintf (stderr, " key.virtual_refcount=%d\n", - (int) tgt->list[i].key->virtual_refcount); - fprintf (stderr, " key.aux.attach_count=%p\n", - (void*) tgt->list[i].key->aux->attach_count); - } - } - } - fprintf (stderr, "\n"); -} - -static void -rc_check_clear (splay_tree_node node) -{ - splay_tree_key k = &node->key; - - k->refcount_chk = 0; - k->tgt->refcount_chk = 0; - k->tgt->mark = false; - - if (node->left) - rc_check_clear (node->left); - if (node->right) - rc_check_clear (node->right); -} - -static void -rc_check_count (splay_tree_node node) -{ - splay_tree_key k = &node->key; - struct target_mem_desc *t; - - /* Add virtual reference counts ("acc enter data", etc.) for this key. */ - k->refcount_chk += k->virtual_refcount; - - t = k->tgt; - t->refcount_chk++; - - if (!t->mark) - { - for (int i = 0; i < t->list_count; i++) - if (t->list[i].key) - t->list[i].key->refcount_chk++; - - t->mark = true; - } - - if (node->left) - rc_check_count (node->left); - if (node->right) - rc_check_count (node->right); -} - -static bool -rc_check_verify (splay_tree_node node, bool noisy, bool errors) -{ - splay_tree_key k = &node->key; - struct target_mem_desc *t; - - if (k->refcount != REFCOUNT_INFINITY) - { - if (noisy) - fprintf (stderr, "key %p (%p..+%d): rc=%d/%d, virt_rc=%d\n", k, - (void *) k->host_start, (int) (k->host_end - k->host_start), - (int) k->refcount, (int) k->refcount_chk, - (int) k->virtual_refcount); - - if (k->refcount != k->refcount_chk) - { - if (noisy) - fprintf (stderr, " -- key refcount mismatch!\n"); - errors = true; - } - - t = k->tgt; - - if (noisy) - fprintf (stderr, "tgt %p: rc=%d/%d\n", t, (int) t->refcount, - (int) t->refcount_chk); - - if (t->refcount != t->refcount_chk) - { - if (noisy) - fprintf (stderr, - " -- target memory descriptor refcount mismatch!\n"); - errors = true; - } - } - - if (node->left) - errors |= rc_check_verify (node->left, noisy, errors); - if (node->right) - errors |= rc_check_verify (node->right, noisy, errors); - - return errors; -} - -/* Call with device locked. */ - -attribute_hidden void -gomp_rc_check (struct gomp_device_descr *devicep, struct target_mem_desc *tgt) -{ - splay_tree sp = &devicep->mem_map; - - bool noisy = getenv ("GOMP_DEBUG_TGT") != 0; - - if (noisy) - fprintf (stderr, "\n*** GOMP_RC_CHECK ***\n\n"); - - if (sp->root) - { - rc_check_clear (sp->root); - - for (struct target_mem_desc *t = tgt; t; t = t->prev) - { - t->refcount_chk = 0; - t->mark = false; - } - - /* Add references for interconnected splay-tree keys. */ - rc_check_count (sp->root); - - /* Add references for the tgt for a currently-executing kernel and/or - any enclosing data directives. */ - for (struct target_mem_desc *t = tgt; t; t = t->prev) - { - t->refcount_chk++; - - if (!t->mark) - { - for (int i = 0; i < t->list_count; i++) - if (t->list[i].key) - t->list[i].key->refcount_chk++; - - t->mark = true; - } - } - - if (rc_check_verify (sp->root, noisy, false)) - { - gomp_mutex_unlock (&devicep->lock); - gomp_fatal ("refcount checking failure"); - } - } -} -#endif - /* Handle the case where gomp_map_lookup, splay_tree_lookup or gomp_map_0len_lookup found oldn for newn. Helper function of gomp_map_vars. */