From patchwork Thu Jun 4 18:26:38 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Thomas Schwinge X-Patchwork-Id: 1303687 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=8.43.85.97; helo=sourceware.org; envelope-from=gcc-patches-bounces@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Received: from sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49dDl15BMSz9sSc for ; Fri, 5 Jun 2020 04:26:52 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id C1FCC388F059; Thu, 4 Jun 2020 18:26:49 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from esa2.mentor.iphmx.com (esa2.mentor.iphmx.com [68.232.141.98]) by sourceware.org (Postfix) with ESMTPS id 63F4A3851C27 for ; Thu, 4 Jun 2020 18:26:47 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 63F4A3851C27 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=Thomas_Schwinge@mentor.com IronPort-SDR: O7P5xi8LVxvE68WtK+OUjgrMEhoMGd4IrjhZbCNod83PMBwf1BJPxt6FQrLOc9HYRQG/DckZpn WD3av0mlcvnIaNJwJoWO4ftN1Np4RrToCIPMFHLVSlQhKgmnhFd+ejfxfuUrQYNU94TayWiA/G 4hevtzlIhmLGVBr3aIjyTDb2wSevN5UT8msTzLRTz/bWaVa1+bMr7p0sGcC7MLUwJUoJZTmBzZ FjSBbouqQ4foexVqaRdFKgCjukonxODsxlUlYmoc3Tu7ANeKIjCooNqx1Tqa2WURCCB5SNC2Pf 9pg= X-IronPort-AV: E=Sophos;i="5.73,472,1583222400"; d="scan'208,223";a="49471308" Received: from orw-gwy-02-in.mentorg.com ([192.94.38.167]) by esa2.mentor.iphmx.com with ESMTP; 04 Jun 2020 10:26:46 -0800 IronPort-SDR: 7FaY/Gqz6LyqiG0NBBIIrHaMSSL/8RkxIZNNvKJbifb/zLzemN31gP4D3XrPp9NsBH2+ZCEcYi uvob2Dia/Bgs4xoqUPlXkBrbUiooe1ymhuA+QF3xNMrSdJqI55y7DvvkiRmDAA2tRLwV7y3o7+ nO9EnNFNewpuZ6o5v3dDOzZd6JP5tUbU3fn9ezNBwDy4ZEpuO//tPcZZ1JRk08K9pSQMO2WtEG uqXJm+9f1BoUfoKTuLJ9L/CPPwIfcwRu1Ig3Butzu/GfPi8dYdge3mmDe95pseExTk/lm8GMML te0= From: Thomas Schwinge To: Julian Brown , Subject: [OpenACC] Don't open-code 'gomp_remove_var' in 'acc_unmap_data' (was: [PATCH 2/7] [OpenACC] Adjust dynamic reference count semantics) In-Reply-To: References: User-Agent: Notmuch/0.29.1+93~g67ed7df (https://notmuchmail.org) Emacs/26.3 (x86_64-pc-linux-gnu) Date: Thu, 4 Jun 2020 20:26:38 +0200 Message-ID: <87eequsn4x.fsf@euler.schwinge.homeip.net> MIME-Version: 1.0 X-Spam-Status: No, score=-11.7 required=5.0 tests=BAYES_00, GIT_PATCH_0, HEADER_FROM_DIFFERENT_DOMAINS, KAM_DMARC_STATUS, KAM_LOTSOFHASH, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: jakub@redhat.com Errors-To: gcc-patches-bounces@gcc.gnu.org Sender: "Gcc-patches" Hi Julian! On 2020-05-22T15:16:05-0700, Julian Brown wrote: > --- a/libgomp/oacc-mem.c > +++ b/libgomp/oacc-mem.c > @@ -475,14 +475,19 @@ acc_unmap_data (void *h) > gomp_mutex_unlock (&acc_dev->lock); > gomp_fatal ("cannot unmap target block"); > } > - else if (tgt->refcount > 1) > - tgt->refcount--; > - else > + > + if (tgt->refcount == 1) > { > - free (tgt->array); > - free (tgt); > + /* This is the last reference. Nullifying these fields prevents > + 'gomp_unmap_tgt' via 'gomp_remove_var' from freeing the target > + memory. */ > + tgt->tgt_end = 0; > + tgt->to_free = NULL; > } > > + bool is_tgt_unmapped = gomp_remove_var (acc_dev, n); > + assert (is_tgt_unmapped); Also should again remove the 'splay_tree_remove' that you'd added further up. I've pushed "[OpenACC] Don't open-code 'gomp_remove_var' in 'acc_unmap_data'" to master branch in commit 2112d3242f413979931e371423dcead9d19440e7, and releases/gcc-10 branch in commit 1bca30efec5d684f03dfb88ed93cbe26e68d35b0, see attached. 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 From 1bca30efec5d684f03dfb88ed93cbe26e68d35b0 Mon Sep 17 00:00:00 2001 From: Thomas Schwinge Date: Fri, 29 May 2020 14:21:03 +0200 Subject: [PATCH] [OpenACC] Don't open-code 'gomp_remove_var' in 'acc_unmap_data' libgomp/ * oacc-mem.c (acc_unmap_data): Don't open-code 'gomp_remove_var'. Co-Authored-By: Julian Brown (cherry picked from commit 2112d3242f413979931e371423dcead9d19440e7) --- libgomp/oacc-mem.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/libgomp/oacc-mem.c b/libgomp/oacc-mem.c index 6314f5d8b686..8e8c7c3093d5 100644 --- a/libgomp/oacc-mem.c +++ b/libgomp/oacc-mem.c @@ -468,8 +468,6 @@ acc_unmap_data (void *h) (void *) h, (int) host_size); } - splay_tree_remove (&acc_dev->mem_map, n); - struct target_mem_desc *tgt = n->tgt; if (tgt->refcount == REFCOUNT_INFINITY) @@ -482,8 +480,12 @@ acc_unmap_data (void *h) 'acc_map_data'. */ assert (tgt->refcount == 1); - free (tgt->array); - free (tgt); + /* Nullifying these fields prevents 'gomp_unmap_tgt' via 'gomp_remove_var' + from freeing the target memory. */ + tgt->tgt_end = 0; + tgt->to_free = NULL; + + gomp_remove_var (acc_dev, n); gomp_mutex_unlock (&acc_dev->lock); -- 2.26.2