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=7ca199439533e42cf4fb0d183dc0cef44b8da919;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 d22210b4cbd0..6f2e0f134167 100644 --- a/libgomp/libgomp.h +++ b/libgomp/libgomp.h @@ -988,17 +988,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. */ @@ -1054,10 +1046,6 @@ struct splay_tree_key_s { uintptr_t refcount; /* Dynamic reference count. */ uintptr_t dynamic_refcount; -#ifdef RC_CHECKING - /* The recalculated reference count, for verification. */ - uintptr_t refcount_chk; -#endif struct splay_tree_aux *aux; }; @@ -1211,12 +1199,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 9ac9a81469cb..56aee1874fef 100644 --- a/libgomp/oacc-parallel.c +++ b/libgomp/oacc-parallel.c @@ -545,15 +545,6 @@ GOACC_parallel_keyed (int flags_m, void (*fn) (void *), 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; @@ -630,12 +621,6 @@ GOACC_parallel_keyed (int flags_m, void (*fn) (void *), 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. */ @@ -751,12 +736,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; } @@ -851,12 +830,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; @@ -1036,12 +1009,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 851609586bd8..b4db0c2b453d 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 @@ -368,185 +365,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. */