fix modern futex handling
This commit is contained in:
parent
2bec3a5226
commit
706d9bf33a
@ -1,7 +1,32 @@
|
||||
diff -up gperftools-2.4/src/base/spinlock_linux-inl.h.armfutex gperftools-2.4/src/base/spinlock_linux-inl.h
|
||||
--- gperftools-2.4/src/base/spinlock_linux-inl.h.armfutex 2015-06-01 15:46:32.129618825 -0400
|
||||
+++ gperftools-2.4/src/base/spinlock_linux-inl.h 2015-06-01 15:46:55.081459716 -0400
|
||||
@@ -51,13 +51,8 @@ static struct InitModule {
|
||||
diff -ru gperftools-2.4/src/base/linux_syscall_support.h gperftools-2.4-fixed/src/base/linux_syscall_support.h
|
||||
--- gperftools-2.4/src/base/linux_syscall_support.h 2014-12-06 23:51:40.000000000 +0100
|
||||
+++ gperftools-2.4-fixed/src/base/linux_syscall_support.h 2015-06-01 16:51:03.725616215 +0200
|
||||
@@ -83,7 +83,6 @@
|
||||
* sys_fcntl(
|
||||
* sys_fstat(
|
||||
* sys_futex(
|
||||
- * sys_futex1(
|
||||
* sys_getcpu(
|
||||
* sys_getdents64(
|
||||
* sys_getppid(
|
||||
@@ -2094,9 +2093,11 @@
|
||||
int, c, long, a)
|
||||
LSS_INLINE _syscall2(int, fstat, int, f,
|
||||
struct kernel_stat*, b)
|
||||
- LSS_INLINE _syscall4(int, futex, int*, a,
|
||||
+ LSS_INLINE _syscall6(int, futex, int*, a,
|
||||
int, o, int, v,
|
||||
- struct kernel_timespec*, t)
|
||||
+ struct kernel_timespec*, t,
|
||||
+ int*, a2,
|
||||
+ int, v3)
|
||||
#ifdef __NR_getdents64
|
||||
LSS_INLINE _syscall3(int, getdents64, int, f,
|
||||
struct kernel_dirent64*, d, int, c)
|
||||
diff -ru gperftools-2.4/src/base/spinlock_linux-inl.h gperftools-2.4-fixed/src/base/spinlock_linux-inl.h
|
||||
--- gperftools-2.4/src/base/spinlock_linux-inl.h 2014-12-06 23:51:40.000000000 +0100
|
||||
+++ gperftools-2.4-fixed/src/base/spinlock_linux-inl.h 2015-06-01 16:51:03.725616215 +0200
|
||||
@@ -51,15 +51,10 @@
|
||||
int x = 0;
|
||||
// futexes are ints, so we can use them only when
|
||||
// that's the same size as the lockword_ in SpinLock.
|
||||
@ -10,8 +35,32 @@ diff -up gperftools-2.4/src/base/spinlock_linux-inl.h.armfutex gperftools-2.4/sr
|
||||
- have_futex = 0;
|
||||
-#else
|
||||
have_futex = (sizeof (Atomic32) == sizeof (int) &&
|
||||
sys_futex(&x, FUTEX_WAKE, 1, 0) >= 0);
|
||||
- sys_futex(&x, FUTEX_WAKE, 1, 0) >= 0);
|
||||
-#endif
|
||||
+ sys_futex(&x, FUTEX_WAKE, 1, NULL, NULL, 0) >= 0);
|
||||
if (have_futex &&
|
||||
sys_futex(&x, FUTEX_WAKE | futex_private_flag, 1, 0) < 0) {
|
||||
- sys_futex(&x, FUTEX_WAKE | futex_private_flag, 1, 0) < 0) {
|
||||
+ sys_futex(&x, FUTEX_WAKE | futex_private_flag, 1, NULL, NULL, 0) < 0) {
|
||||
futex_private_flag = 0;
|
||||
}
|
||||
}
|
||||
@@ -85,7 +85,8 @@
|
||||
tm.tv_nsec *= 16; // increase the delay; we expect explicit wakeups
|
||||
sys_futex(reinterpret_cast<int *>(const_cast<Atomic32 *>(w)),
|
||||
FUTEX_WAIT | futex_private_flag,
|
||||
- value, reinterpret_cast<struct kernel_timespec *>(&tm));
|
||||
+ value, reinterpret_cast<struct kernel_timespec *>(&tm),
|
||||
+ NULL, 0);
|
||||
} else {
|
||||
nanosleep(&tm, NULL);
|
||||
}
|
||||
@@ -96,7 +97,8 @@
|
||||
void SpinLockWake(volatile Atomic32 *w, bool all) {
|
||||
if (have_futex) {
|
||||
sys_futex(reinterpret_cast<int *>(const_cast<Atomic32 *>(w)),
|
||||
- FUTEX_WAKE | futex_private_flag, all? INT_MAX : 1, 0);
|
||||
+ FUTEX_WAKE | futex_private_flag, all? INT_MAX : 1,
|
||||
+ NULL, NULL, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4,12 +4,13 @@
|
||||
|
||||
Name: gperftools
|
||||
Version: 2.4
|
||||
Release: 3%{?dist}
|
||||
Release: 4%{?dist}
|
||||
License: BSD
|
||||
Group: Development/Tools
|
||||
Summary: Very fast malloc and performance analysis tools
|
||||
URL: http://code.google.com/p/gperftools/
|
||||
Source0: https://googledrive.com/host/0B6NtGsLhIcf7MWxMMF9JdTN3UVk/%{name}-%{version}.tar.gz
|
||||
# https://code.google.com/p/gperftools/issues/detail?id=693
|
||||
Patch0: gperftools-arm-has-futex.patch
|
||||
ExcludeArch: s390 s390x
|
||||
%ifnarch ppc %{power64}
|
||||
@ -110,6 +111,9 @@ rm -rf %{buildroot}%{_pkgdocdir}/INSTALL
|
||||
%{_libdir}/*.so.*
|
||||
|
||||
%changelog
|
||||
* Tue Jun 9 2015 Tom Callaway <spot@fedoraproject.org> - 2.4-4
|
||||
- fix modern futex handling (thanks to Paolo Bonzini)
|
||||
|
||||
* Mon Jun 1 2015 Tom Callaway <spot@fedoraproject.org> - 2.4-3
|
||||
- enable futex for ARM
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user