Remove __is_smp

Message ID 1476517442-11759-1-git-send-email-siddhesh@sourceware.org
State Dropped
Headers

Commit Message

Siddhesh Poyarekar Oct. 15, 2016, 7:44 a.m. UTC
  The flag is always set to 1, so there is no longer a point in setting
and checking it.

Tested on x86_64 to verify that the testsuite does not regress.

Siddhesh
---
 nptl/nptl-init.c               |  4 ----
 nptl/pthreadP.h                |  3 ---
 nptl/pthread_mutex_lock.c      |  3 ---
 nptl/pthread_mutex_timedlock.c |  2 --
 nptl/smp.h                     | 27 ---------------------------
 nptl/vars.c                    |  3 ---
 6 files changed, 42 deletions(-)
 delete mode 100644 nptl/smp.h
  

Comments

Florian Weimer Oct. 15, 2016, 8:19 p.m. UTC | #1
On 10/15/2016 09:44 AM, Siddhesh Poyarekar wrote:
> The flag is always set to 1, so there is no longer a point in setting
> and checking it.

What about the architecture-specific copies of is_smp_system?

Thanks,
Florian
  
Siddhesh Poyarekar Oct. 16, 2016, 3:01 a.m. UTC | #2
On Sunday 16 October 2016 01:49 AM, Florian Weimer wrote:
> On 10/15/2016 09:44 AM, Siddhesh Poyarekar wrote:
>> The flag is always set to 1, so there is no longer a point in setting
>> and checking it.
> 
> What about the architecture-specific copies of is_smp_system?

Sheesh, I didn't see them somehow, probably because I was searching for
__is_smp_system :/

I withdraw my patch.

Siddhesh
  
Adhemerval Zanella Netto Oct. 17, 2016, 8:14 p.m. UTC | #3
On 16/10/2016 01:01, Siddhesh Poyarekar wrote:
> On Sunday 16 October 2016 01:49 AM, Florian Weimer wrote:
>> On 10/15/2016 09:44 AM, Siddhesh Poyarekar wrote:
>>> The flag is always set to 1, so there is no longer a point in setting
>>> and checking it.
>>
>> What about the architecture-specific copies of is_smp_system?
> 
> Sheesh, I didn't see them somehow, probably because I was searching for
> __is_smp_system :/
> 
> I withdraw my patch.
> 
> Siddhesh
> 

I think we can still proceed with this cleanup, it really seems another
old dubious optimization oriented approach that does not justify the
kind of code complexity id adds.

Basically i686 will set it based on '/proc/sys/kernel/version' output
(with came from kernel config), SH will always set to 0 and any other
system will be 1 (from nptl/smp.h).

It is only used on adaptive mutexes (PTHREAD_MUTEX_ADAPTIVE_NP), which
will avoid the spin and jump to default mutex lock algorithm.  It does
seems sense on kernel without SMP support, but I am sceptical about the
gain and usually better for unicore configuration to just avoid 
adaptive mutexes.

I would also say with current glibc usage approach (with even embedded
systems being multicore), this 'optimization' seems even superfluous.
  

Patch

diff --git a/nptl/nptl-init.c b/nptl/nptl-init.c
index bdbdfed..b5a744c 100644
--- a/nptl/nptl-init.c
+++ b/nptl/nptl-init.c
@@ -32,7 +32,6 @@ 
 #include <fork.h>
 #include <version.h>
 #include <shlib-compat.h>
-#include <smp.h>
 #include <lowlevellock.h>
 #include <futex-internal.h>
 #include <kernel-features.h>
@@ -493,9 +492,6 @@  __pthread_initialize_minimal_internal (void)
 #endif
     __libc_pthread_init (&__fork_generation, __reclaim_stacks,
 			 ptr_pthread_functions);
-
-  /* Determine whether the machine is SMP or not.  */
-  __is_smp = is_smp_system ();
 }
 strong_alias (__pthread_initialize_minimal_internal,
 	      __pthread_initialize_minimal)
diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h
index 6e0dd09..2364c07 100644
--- a/nptl/pthreadP.h
+++ b/nptl/pthreadP.h
@@ -178,9 +178,6 @@  extern int __default_pthread_attr_lock attribute_hidden;
 extern size_t __static_tls_size attribute_hidden;
 extern size_t __static_tls_align_m1 attribute_hidden;
 
-/* Flag whether the machine is SMP or not.  */
-extern int __is_smp attribute_hidden;
-
 /* Thread descriptor handling.  */
 extern list_t __stack_user;
 hidden_proto (__stack_user)
diff --git a/nptl/pthread_mutex_lock.c b/nptl/pthread_mutex_lock.c
index bdfa529..d48dd0c 100644
--- a/nptl/pthread_mutex_lock.c
+++ b/nptl/pthread_mutex_lock.c
@@ -120,9 +120,6 @@  __pthread_mutex_lock (pthread_mutex_t *mutex)
   else if (__builtin_expect (PTHREAD_MUTEX_TYPE (mutex)
 			  == PTHREAD_MUTEX_ADAPTIVE_NP, 1))
     {
-      if (! __is_smp)
-	goto simple;
-
       if (LLL_MUTEX_TRYLOCK (mutex) != 0)
 	{
 	  int cnt = 0;
diff --git a/nptl/pthread_mutex_timedlock.c b/nptl/pthread_mutex_timedlock.c
index 07f0901..f965883 100644
--- a/nptl/pthread_mutex_timedlock.c
+++ b/nptl/pthread_mutex_timedlock.c
@@ -110,8 +110,6 @@  pthread_mutex_timedlock (pthread_mutex_t *mutex,
 
 
     case PTHREAD_MUTEX_ADAPTIVE_NP:
-      if (! __is_smp)
-	goto simple;
 
       if (lll_trylock (mutex->__data.__lock) != 0)
 	{
diff --git a/nptl/smp.h b/nptl/smp.h
deleted file mode 100644
index bedfb46..0000000
--- a/nptl/smp.h
+++ /dev/null
@@ -1,27 +0,0 @@ 
-/* Determine whether the host has multiple processors.  Stub version.
-   Copyright (C) 1996-2016 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Library General Public License as
-   published by the Free Software Foundation; either version 2 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
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with the GNU C Library; see the file COPYING.LIB.  If
-   not, see <http://www.gnu.org/licenses/>.  */
-
-/* Test whether the machine has more than one processor.  This is not the
-   best test but good enough.  More complicated tests would require `malloc'
-   which is not available at that time.  */
-static inline int
-is_smp_system (void)
-{
-  /* Assume all machines are SMP and/or CMT and/or SMT.  */
-  return 1;
-}
diff --git a/nptl/vars.c b/nptl/vars.c
index f09c712..80a605c 100644
--- a/nptl/vars.c
+++ b/nptl/vars.c
@@ -27,9 +27,6 @@  struct pthread_attr __default_pthread_attr attribute_hidden;
 /* Mutex protecting __default_pthread_attr.  */
 int __default_pthread_attr_lock = LLL_LOCK_INITIALIZER;
 
-/* Flag whether the machine is SMP or not.  */
-int __is_smp attribute_hidden;
-
 #ifndef TLS_MULTIPLE_THREADS_IN_TCB
 /* Variable set to a nonzero value either if more than one thread runs or ran,
    or if a single-threaded process is trying to cancel itself.  See