From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qv1-xf30.google.com (mail-qv1-xf30.google.com [IPv6:2607:f8b0:4864:20::f30]) by sourceware.org (Postfix) with ESMTPS id 84E343854819 for ; Mon, 10 May 2021 16:49:27 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 84E343854819 Received: by mail-qv1-xf30.google.com with SMTP id 5so4725966qvk.0 for ; Mon, 10 May 2021 09:49:27 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=Cl7CsD6yLgSJHra1160k7+rxOakiAZL7ep3QcbAI3Wc=; b=RobX5Rr14FfRiLGKSqQRxCdrilPl3X3vaqNCY8k9EY0+faVlmq7y4KM1r5oSRivebi f1YZvPXe8ag4XMWiU1Jhud4V5ccgn4Mr/7n0F6j2T1Ak2NbfUB6kxJh0Qn3R5HCBznjF QCyFGNIfLBkBhoJnj/jgVdoqsQKvCtBnQb176E0jxkVn2F8q0/m48nwTV6AFO+kiuS7j imkW63Yq4L2ttbkPuM6d1zd6AIFNkUUhdi9wo/c7VxaRiTNyoJQqI83KEN1Ov4F3Mwao 74TAcp33c35Yk7xGvOkNO17RBW3w3dvq4kzqwV8c64as9dzWQNcvxL/j3OnaQxCgeE/q AqsQ== X-Gm-Message-State: AOAM531+s44CN/baDNSlaJE+xzBbVIjlfUc8ws39HDvxeNdS5gYcUoGS hbWrClp/9zMnwca6+YBTLonpwlUhMEBwsg== X-Google-Smtp-Source: ABdhPJz8Vac00NgKbomXyNKOZc7lY1wIj071/f9HeI+mkl/bKhAPhFnswGsSdqsA5Q8aWkEzWyGRFA== X-Received: by 2002:a0c:9c0f:: with SMTP id v15mr19594649qve.24.1620665367097; Mon, 10 May 2021 09:49:27 -0700 (PDT) Received: from [192.168.1.4] ([177.194.37.86]) by smtp.gmail.com with ESMTPSA id b23sm5552887qtq.0.2021.05.10.09.49.26 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 10 May 2021 09:49:26 -0700 (PDT) Subject: Re: [PATCH 6/8] nptl: Move __free_tcb into libc To: libc-alpha@sourceware.org, Florian Weimer References: From: Adhemerval Zanella Message-ID: Date: Mon, 10 May 2021 13:49:24 -0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.8.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-12.7 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, NICE_REPLY_A, RCVD_IN_DNSWL_NONE, 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: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 May 2021 16:49:29 -0000 On 10/05/2021 09:38, Florian Weimer via Libc-alpha wrote: > Under the name __nptl_free_tcb. LGTM (the 'Contribute-by' is not a blocker, so we can follow up on the previous patch). Reviewed-by: Adhemerval Zanella > --- > nptl/Makefile | 1 + > nptl/Versions | 1 + > nptl/nptl_free_tcb.c | 46 ++++++++++++++++++++++++++++++++++++++ > nptl/pthreadP.h | 3 ++- > nptl/pthread_create.c | 27 +--------------------- > nptl/pthread_detach.c | 2 +- > nptl/pthread_join_common.c | 2 +- > 7 files changed, 53 insertions(+), 29 deletions(-) > create mode 100644 nptl/nptl_free_tcb.c > > diff --git a/nptl/Makefile b/nptl/Makefile > index 3b83817163..82dc6f466d 100644 > --- a/nptl/Makefile > +++ b/nptl/Makefile > @@ -46,6 +46,7 @@ routines = \ > lowlevellock \ > nptl-stack \ > nptl_deallocate_tsd \ > + nptl_free_tcb \ > nptl_nthreads \ > nptl_setxid \ > nptlfreeres \ Ok. > diff --git a/nptl/Versions b/nptl/Versions > index 93219d2657..da610a4803 100644 > --- a/nptl/Versions > +++ b/nptl/Versions > @@ -321,6 +321,7 @@ libc { > __mutex_aconf; > __nptl_deallocate_stack; > __nptl_deallocate_tsd; > + __nptl_free_tcb; > __nptl_nthreads; > __nptl_setxid_sighandler; > __nptl_stack_list_add; Ok. > diff --git a/nptl/nptl_free_tcb.c b/nptl/nptl_free_tcb.c > new file mode 100644 > index 0000000000..65c4d3bfa7 > --- /dev/null > +++ b/nptl/nptl_free_tcb.c > @@ -0,0 +1,46 @@ > +/* TCB deallocation for NPTL. > + Copyright (C) 2002-2021 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + Contributed by Ulrich Drepper , 2002. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + . */ > + > +#include > +#include > +#include > + > +void > +__nptl_free_tcb (struct pthread *pd) > +{ > + /* The thread is exiting now. */ > + if (__builtin_expect (atomic_bit_test_set (&pd->cancelhandling, > + TERMINATED_BIT) == 0, 1)) Maybe use __glibc_likely here or just remove it, since it does not make to use in this short function. > + { > + /* Free TPP data. */ > + if (__glibc_unlikely (pd->tpp != NULL)) Same here, the loop is short enough that it should not matter. > + { > + struct priority_protection_data *tpp = pd->tpp; > + > + pd->tpp = NULL; > + free (tpp); > + } > + > + /* Queue the stack memory block for reuse and exit the process. The > + kernel will signal via writing to the address returned by > + QUEUE-STACK when the stack is available. */ > + __nptl_deallocate_stack (pd); > + } > +} > +libc_hidden_def (__nptl_free_tcb) > diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h > index 505d0f00ff..d580f71a38 100644 > --- a/nptl/pthreadP.h > +++ b/nptl/pthreadP.h > @@ -312,7 +312,8 @@ __do_cancel (void) > > /* Deallocate a thread's stack after optionally making sure the thread > descriptor is still valid. */ > -extern void __free_tcb (struct pthread *pd) attribute_hidden; > +extern void __nptl_free_tcb (struct pthread *pd); > +libc_hidden_proto (__nptl_free_tcb) > > /* Change the permissions of a thread stack. Called from > _dl_make_stacks_executable and pthread_create. */ Ok. > diff --git a/nptl/pthread_create.c b/nptl/pthread_create.c > index fcaf440bb5..770656453d 100644 > --- a/nptl/pthread_create.c > +++ b/nptl/pthread_create.c > @@ -207,31 +207,6 @@ static int create_thread (struct pthread *pd, const struct pthread_attr *attr, > > #include > > -/* Deallocate a thread's stack after optionally making sure the thread > - descriptor is still valid. */ > -void > -__free_tcb (struct pthread *pd) > -{ > - /* The thread is exiting now. */ > - if (__builtin_expect (atomic_bit_test_set (&pd->cancelhandling, > - TERMINATED_BIT) == 0, 1)) > - { > - /* Free TPP data. */ > - if (__glibc_unlikely (pd->tpp != NULL)) > - { > - struct priority_protection_data *tpp = pd->tpp; > - > - pd->tpp = NULL; > - free (tpp); > - } > - > - /* Queue the stack memory block for reuse and exit the process. The > - kernel will signal via writing to the address returned by > - QUEUE-STACK when the stack is available. */ > - __nptl_deallocate_stack (pd); > - } > -} > - > /* Local function to start thread and handle cleanup. > createthread.c defines the macro START_THREAD_DEFN to the > declaration that its create_thread function will refer to, and Ok. > @@ -444,7 +419,7 @@ START_THREAD_DEFN > /* If the thread is detached free the TCB. */ > if (IS_DETACHED (pd)) > /* Free the TCB. */ > - __free_tcb (pd); > + __nptl_free_tcb (pd); > > /* We cannot call '_exit' here. '_exit' will terminate the process. > Ok. > diff --git a/nptl/pthread_detach.c b/nptl/pthread_detach.c > index 57293ec950..410255bbe1 100644 > --- a/nptl/pthread_detach.c > +++ b/nptl/pthread_detach.c > @@ -49,7 +49,7 @@ __pthread_detach (pthread_t th) > if ((pd->cancelhandling & EXITING_BITMASK) != 0) > /* Note that the code in __free_tcb makes sure each thread > control block is freed only once. */ > - __free_tcb (pd); > + __nptl_free_tcb (pd); > > return result; > } Ok. > diff --git a/nptl/pthread_join_common.c b/nptl/pthread_join_common.c > index a99c26e27e..e87801b5a3 100644 > --- a/nptl/pthread_join_common.c > +++ b/nptl/pthread_join_common.c > @@ -122,7 +122,7 @@ __pthread_clockjoin_ex (pthread_t threadid, void **thread_return, > *thread_return = pd_result; > > /* Free the TCB. */ > - __free_tcb (pd); > + __nptl_free_tcb (pd); > } > else > pd->joinid = NULL; > Ok.