From patchwork Sun Feb 9 20:21:06 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Weimer X-Patchwork-Id: 37824 X-Patchwork-Delegate: carlos@redhat.com Received: (qmail 27286 invoked by alias); 9 Feb 2020 20:21:15 -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 27183 invoked by uid 89); 9 Feb 2020 20:21:14 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-18.8 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 spammy=1299 X-HELO: us-smtp-1.mimecast.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1581279671; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=1HR5R7SVQU1irQkFGeUwwGTaz50BQjtdtY2YvEcQRT0=; b=QWX/JOgrZMN4kkI25WIIWmlgLTThtNwvnu6WLojTncUhySpT9hdaii4CMSx9B9fyu0OmzI PrY52tjYcfD20HJ7Ygj6Q9UTdMfg+4yZMn2hirTbrmIHoRgbin4TvLq8vr9UCrRG7FQEIQ xLr6pK8beAZvd5mKdy9Bg2kVkTIc7Zc= From: Florian Weimer To: libc-alpha@sourceware.org Subject: [PATCH 20/26] Linux: set_robust_list syscall number is always available In-Reply-To: References: X-From-Line: d767ca43b8c6b28efb5ad12051f6629e4ceae642 Mon Sep 17 00:00:00 2001 Message-Id: Date: Sun, 09 Feb 2020 21:21:06 +0100 User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux) MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Due to the built-in tables, __NR_set_robust_list is always defined (although it may not be available at run time). Reviewed-by: Adhemerval Zanella --- nptl/nptl-init.c | 4 ---- nptl/pthread_create.c | 6 ++---- sysdeps/nptl/fork.c | 10 ++++------ 3 files changed, 6 insertions(+), 14 deletions(-) diff --git a/nptl/nptl-init.c b/nptl/nptl-init.c index 1877248014..373be89c95 100644 --- a/nptl/nptl-init.c +++ b/nptl/nptl-init.c @@ -129,11 +129,9 @@ static void __nptl_set_robust (struct pthread *self) { -#ifdef __NR_set_robust_list INTERNAL_SYSCALL_DECL (err); INTERNAL_SYSCALL (set_robust_list, err, 2, &self->robust_head, sizeof (struct robust_list_head)); -#endif } @@ -254,7 +252,6 @@ __pthread_initialize_minimal_internal (void) pd->robust_prev = &pd->robust_head; #endif pd->robust_head.list = &pd->robust_head; -#ifdef __NR_set_robust_list pd->robust_head.futex_offset = (offsetof (pthread_mutex_t, __data.__lock) - offsetof (pthread_mutex_t, __data.__list.__next)); @@ -262,7 +259,6 @@ __pthread_initialize_minimal_internal (void) int res = INTERNAL_SYSCALL (set_robust_list, err, 2, &pd->robust_head, sizeof (struct robust_list_head)); if (INTERNAL_SYSCALL_ERROR_P (res, err)) -#endif set_robust_list_not_avail (); } diff --git a/nptl/pthread_create.c b/nptl/pthread_create.c index d3fd58730c..58706b4160 100644 --- a/nptl/pthread_create.c +++ b/nptl/pthread_create.c @@ -389,10 +389,9 @@ 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 +#ifndef __ASSUME_SET_ROBUST_LIST if (__set_robust_list_avail >= 0) -# endif +#endif { INTERNAL_SYSCALL_DECL (err); /* This call should never fail because the initial call in init.c @@ -400,7 +399,6 @@ START_THREAD_DEFN INTERNAL_SYSCALL (set_robust_list, err, 2, &pd->robust_head, sizeof (struct robust_list_head)); } -#endif /* If the parent was running cancellation handlers while creating the thread the new thread inherited the signal mask. Reset the diff --git a/sysdeps/nptl/fork.c b/sysdeps/nptl/fork.c index f5cf88d68c..5091a000e3 100644 --- a/sysdeps/nptl/fork.c +++ b/sysdeps/nptl/fork.c @@ -83,7 +83,6 @@ __libc_fork (void) if (__fork_generation_pointer != NULL) *__fork_generation_pointer += __PTHREAD_ONCE_FORK_GEN_INCR; -#ifdef __NR_set_robust_list /* Initialize the robust mutex list setting in the kernel which has been reset during the fork. We do not check for errors because if it fails here, it must have failed at process startup as well and @@ -94,19 +93,18 @@ __libc_fork (void) inherit the correct value from the parent. We do not need to clear the pending operation because it must have been zero when fork was called. */ -# if __PTHREAD_MUTEX_HAVE_PREV +#if __PTHREAD_MUTEX_HAVE_PREV self->robust_prev = &self->robust_head; -# endif +#endif self->robust_head.list = &self->robust_head; -# ifdef SHARED +#ifdef SHARED if (__builtin_expect (__libc_pthread_functions_init, 0)) PTHFCT_CALL (ptr_set_robust, (self)); -# else +#else extern __typeof (__nptl_set_robust) __nptl_set_robust __attribute__((weak)); if (__builtin_expect (__nptl_set_robust != NULL, 0)) __nptl_set_robust (self); -# endif #endif /* Reset the lock state in the multi-threaded case. */