From patchwork Tue Apr 18 21:13:19 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adhemerval Zanella X-Patchwork-Id: 752002 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3w6yY13Hcgz9s3w for ; Wed, 19 Apr 2017 07:13:41 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; secure) header.d=sourceware.org header.i=@sourceware.org header.b="WoiHP1KL"; dkim-atps=neutral DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:subject:date:message-id; q=dns; s= default; b=rAGzNKMZXziOD/YVZtZenl3nUPNY7cdXYCIovgtOuj6oeOaKxo63u I6cqrG5A0NXwSnJO3oViT3vQQ9JxX4zTP+M31gA9pA/HXN2Fg3BDdu0GKPhsnleG KF195mH5UQtpzN3T4Mv6SWfa40Dl77cgS6TFzOF4ktarhHmQkMpuI0= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:subject:date:message-id; s=default; bh=3XCSj/lUcvjyQUHt0rmPTAHegTE=; b=WoiHP1KLuOKtt1mr5Iv5ZdbAz9PW qpo/q0wLiprfOc2GAQVwPMIIS90wVhafXGwfW7445TM4Ov3JdB6hZpsBf4TcoSKU h37Cs0ZFc3xx5eLOaSbbSR6fv8cLXlNjMcNeQLfGWiHEIlPLy3ZSVRqZnb5PshIz 7LkI51dLYYL9DpA= Received: (qmail 41673 invoked by alias); 18 Apr 2017 21:13:32 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 41644 invoked by uid 89); 18 Apr 2017 21:13:32 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.2 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_LOW, RCVD_IN_SORBS_SPAM, SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: mail-qt0-f180.google.com X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id; bh=LMHepdZJmT83LgOKy6D1LLLL8yLn71GGoN75UnXBTCg=; b=JNaR0vMt08lg4wTXyuqAygMTpU1qC32PVtuT13HOCm4conbXtJCzjeM4ICyO8BmsxE rKVY6nRrLe8ekwI19ebT8GhXFsLV7i/m68UzQ9Li3Al4Lx9bO0R/e2Xzqv+d9Q9tkLO4 ZGUFnxcfXO/0A4xgszXg+n0UjqYT7PTLLktYnR5nzb9CRQ9EBgi48BYtC+6Tf/Y8Qb+W 4Kv5Ohia1p4S0YmdzTxHtjipeF8IL5JFNnb1BrSV29nBFSLhsCIeFN0Qx2rY6nrKW3a6 doRrhFPTY9O34OWv+oAxjWEDfcDJZr0qSU/f1JA/AhIhrxd2Vry9pc+H98lFv7WmGMeW 6/NA== X-Gm-Message-State: AN3rC/5UoFptOqjI9zeWgKZCA8EEwIV7Xd7TxVphFMWKoe5bVGzCqoZE dLgVlOVOe8/CKM+r+t/OVg== X-Received: by 10.237.35.134 with SMTP id j6mr13863659qtc.256.1492550009757; Tue, 18 Apr 2017 14:13:29 -0700 (PDT) From: Adhemerval Zanella To: libc-alpha@sourceware.org Subject: [PATCH 1/2] nptl: Remove __ASSUME_SET_ROBUST_LIST Date: Tue, 18 Apr 2017 18:13:19 -0300 Message-Id: <1492550000-31374-1-git-send-email-adhemerval.zanella@linaro.org> This is another patch that was in my backlog, so I am sending it again on the list since first version was send almost 5 months ago [1]. --- This patch removes the __ASSUME_SET_ROBUST_LIST usage on nptl generic code. The set_robust_list availability is defined by '__set_robust_list_avail' which is now defined regardless. Its initial value is set to -1 and defined to a positive value if both __NR_set_robust_list is defined and the syscall returns correctly. A subsequent patch is intended to remove the Linux definitions of __ASSUME_SET_ROBUST_LIST. Tested on x86_64. * nptl/nptl-init.c (set_robust_list_not_avail): Remove definition. (__pthread_initialize_minimal_internal): Set __set_robust_list_avail to 1 if syscall returns correctly. (__set_robust_list_avail): Define regardless if __ASSUME_SET_ROBUST_LIST is defined or not. * nptl/pthreadP.h (__set_robust_list_avail): Likewise. * nptl/pthread_create.c (START_THREAD_DEFN): Remove __ASSUME_SET_ROBUST_LIST usage. * nptl/pthread_mutex_init.c (__pthread_mutex_init): Likewise. [1] https://sourceware.org/ml/libc-alpha/2016-09/msg00373.html --- nptl/nptl-init.c | 12 +++--------- nptl/pthreadP.h | 2 -- nptl/pthread_create.c | 8 ++------ nptl/pthread_mutex_init.c | 2 -- 4 files changed, 5 insertions(+), 19 deletions(-) diff --git a/nptl/nptl-init.c b/nptl/nptl-init.c index 2921607..c86b35e 100644 --- a/nptl/nptl-init.c +++ b/nptl/nptl-init.c @@ -48,14 +48,8 @@ int *__libc_multiple_threads_ptr attribute_hidden; size_t __static_tls_size; size_t __static_tls_align_m1; -#ifndef __ASSUME_SET_ROBUST_LIST /* Negative if we do not have the system call and we can use it. */ -int __set_robust_list_avail; -# define set_robust_list_not_avail() \ - __set_robust_list_avail = -1 -#else -# define set_robust_list_not_avail() do { } while (0) -#endif +int __set_robust_list_avail = -1; #ifndef __ASSUME_FUTEX_CLOCK_REALTIME /* Nonzero if we do not have FUTEX_CLOCK_REALTIME. */ @@ -308,9 +302,9 @@ __pthread_initialize_minimal_internal (void) INTERNAL_SYSCALL_DECL (err); int res = INTERNAL_SYSCALL (set_robust_list, err, 2, &pd->robust_head, sizeof (struct robust_list_head)); - if (INTERNAL_SYSCALL_ERROR_P (res, err)) + if (!INTERNAL_SYSCALL_ERROR_P (res, err)) + __set_robust_list_avail = 1; #endif - set_robust_list_not_avail (); } #ifdef __NR_futex diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h index 7fc1e50..4125e7f 100644 --- a/nptl/pthreadP.h +++ b/nptl/pthreadP.h @@ -213,10 +213,8 @@ hidden_proto (__pthread_keys) /* Number of threads running. */ extern unsigned int __nptl_nthreads attribute_hidden; -#ifndef __ASSUME_SET_ROBUST_LIST /* Negative if we do not have the system call and we can use it. */ extern int __set_robust_list_avail attribute_hidden; -#endif /* Thread Priority Protection. */ extern int __sched_fifo_min_prio attribute_hidden; diff --git a/nptl/pthread_create.c b/nptl/pthread_create.c index d0d7414..76b0ac4 100644 --- a/nptl/pthread_create.c +++ b/nptl/pthread_create.c @@ -387,18 +387,16 @@ START_THREAD_DEFN if (__glibc_unlikely (atomic_exchange_acq (&pd->setxid_futex, 0) == -2)) futex_wake (&pd->setxid_futex, 1, FUTEX_PRIVATE); -#ifdef __NR_set_robust_list -# ifndef __ASSUME_SET_ROBUST_LIST if (__set_robust_list_avail >= 0) -# endif { +#ifdef __NR_set_robust_list INTERNAL_SYSCALL_DECL (err); /* This call should never fail because the initial call in init.c succeeded. */ INTERNAL_SYSCALL (set_robust_list, err, 2, &pd->robust_head, sizeof (struct robust_list_head)); - } #endif + } #ifdef SIGCANCEL /* If the parent was running cancellation handlers while creating @@ -508,7 +506,6 @@ START_THREAD_DEFN the breakpoint reports TD_THR_RUN state rather than TD_THR_ZOMBIE. */ atomic_bit_set (&pd->cancelhandling, EXITING_BIT); -#ifndef __ASSUME_SET_ROBUST_LIST /* If this thread has any robust mutexes locked, handle them now. */ # ifdef __PTHREAD_MUTEX_HAVE_PREV void *robust = pd->robust_head.list; @@ -539,7 +536,6 @@ START_THREAD_DEFN } while (robust != (void *) &pd->robust_head); } -#endif /* Mark the memory of the stack as usable to the kernel. We free everything except for the space used for the TCB itself. */ diff --git a/nptl/pthread_mutex_init.c b/nptl/pthread_mutex_init.c index 138e144..18724e8 100644 --- a/nptl/pthread_mutex_init.c +++ b/nptl/pthread_mutex_init.c @@ -91,11 +91,9 @@ __pthread_mutex_init (pthread_mutex_t *mutex, if ((imutexattr->mutexkind & PTHREAD_MUTEXATTR_FLAG_ROBUST) != 0) { -#ifndef __ASSUME_SET_ROBUST_LIST if ((imutexattr->mutexkind & PTHREAD_MUTEXATTR_FLAG_PSHARED) != 0 && __set_robust_list_avail < 0) return ENOTSUP; -#endif mutex->__data.__kind |= PTHREAD_MUTEX_ROBUST_NORMAL_NP; }