mirror of https://gitee.com/Nocallback/glibc.git
Browse Source
Most systems are SMP, so optimizing for the UP case is no longer approriate. A dynamic check based on the kernel identification has been only implemented for i386 anyway. To disable adaptive mutexes on sh, define DEFAULT_ADAPTIVE_COUNT as zero for this architecture. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>rearnsha/mte-v3.0
9 changed files with 20 additions and 121 deletions
@ -1,27 +0,0 @@ |
|||
/* Determine whether the host has multiple processors. Stub version.
|
|||
Copyright (C) 1996-2020 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 <https://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; |
|||
} |
|||
@ -1,55 +0,0 @@ |
|||
/* Determine whether the host has multiple processors. Linux version.
|
|||
Copyright (C) 1996-2020 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 <https://www.gnu.org/licenses/>. */
|
|||
|
|||
#include <errno.h> |
|||
#include <fcntl.h> |
|||
#include <string.h> |
|||
#include <sys/utsname.h> |
|||
#include <not-cancel.h> |
|||
|
|||
/* 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) |
|||
{ |
|||
union |
|||
{ |
|||
struct utsname uts; |
|||
char buf[512]; |
|||
} u; |
|||
char *cp; |
|||
|
|||
/* Try reading the number using `sysctl' first. */ |
|||
if (__uname (&u.uts) == 0) |
|||
cp = u.uts.version; |
|||
else |
|||
{ |
|||
/* This was not successful. Now try reading the /proc filesystem. */ |
|||
int fd = __open64_nocancel ("/proc/sys/kernel/version", O_RDONLY); |
|||
if (__builtin_expect (fd, 0) == -1 |
|||
|| __read_nocancel (fd, u.buf, sizeof (u.buf)) <= 0) |
|||
/* This also didn't work. We give up and say it's a UP machine. */ |
|||
u.buf[0] = '\0'; |
|||
|
|||
__close_nocancel_nostatus (fd); |
|||
cp = u.buf; |
|||
} |
|||
|
|||
return strstr (cp, "SMP") != NULL; |
|||
} |
|||
@ -0,0 +1,20 @@ |
|||
/* Maximum adaptive spin count default for sh.
|
|||
Copyright (C) 2020 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 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 |
|||
<https://www.gnu.org/licenses/>. */
|
|||
|
|||
/* Disable spinning because sh is always uniprocessor. */ |
|||
#define DEFAULT_ADAPTIVE_COUNT 0 |
|||
@ -1,23 +0,0 @@ |
|||
/* Determine whether the host has multiple processors. SH version.
|
|||
Copyright (C) 2002-2020 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 <https://www.gnu.org/licenses/>. */
|
|||
|
|||
static inline int |
|||
is_smp_system (void) |
|||
{ |
|||
return 0; |
|||
} |
|||
Loading…
Reference in new issue