* Re: [patch libstdc++] Optimize synchronization in std::future if futexes are available.
@ 2015-01-17 6:45 David Edelsohn
2015-01-17 7:24 ` pinskia
0 siblings, 1 reply; 16+ messages in thread
From: David Edelsohn @ 2015-01-17 6:45 UTC (permalink / raw)
To: Torvald Riegel; +Cc: GCC Patches, libstdc++, Jonathan Wakely
This patch has broken bootstrap on AIX
May I mention that this really should have been tested on systems
other than x86 Linux.
In file included from /tmp/20150117/powerpc-ibm-aix7.1.0.0/libstdc++-v3/include/
future:44:0,
from
/nasfarm/edelsohn/src/src/libstdc++-v3/src/c++11/compatibility-thread-c++0x.cc:30:
/tmp/20150117/powerpc-ibm-aix7.1.0.0/libstdc++-v3/include/bits/atomic_futex.h:223:5:
error: 'mutex' does not name a type
mutex _M_mutex;
^
/tmp/20150117/powerpc-ibm-aix7.1.0.0/libstdc++-v3/include/bits/atomic_futex.h:224:5:
error: 'condition_variable' does not name a type
condition_variable _M_condvar;
^
/tmp/20150117/powerpc-ibm-aix7.1.0.0/libstdc++-v3/include/bits/atomic_futex.h:
In member function 'unsigned int
std::__atomic_futex_unsigned<_Waiter_bit>::_M_load(std::memory_order)':
/tmp/20150117/powerpc-ibm-aix7.1.0.0/libstdc++-v3/include/bits/atomic_futex.h:232:19:
error: 'mutex' was not declared in this scope
unique_lock<mutex> __lock(_M_mutex);
^
/tmp/20150117/powerpc-ibm-aix7.1.0.0/libstdc++-v3/include/bits/atomic_futex.h:232:24:
error: template argument 1 is invalid
unique_lock<mutex> __lock(_M_mutex);
^
/tmp/20150117/powerpc-ibm-aix7.1.0.0/libstdc++-v3/include/bits/atomic_futex.h:232:33:
error: '_M_mutex' was not declared in this scope
unique_lock<mutex> __lock(_M_mutex);
/tmp/20150117/powerpc-ibm-aix7.1.0.0/libstdc++-v3/include/bits/atomic_futex.h:
In member function 'unsigned int
std::__atomic_futex_unsigned<_Waiter_bit>::_M_load_when_not_equal(unsigned
int, std::memory_order)':
/tmp/20150117/powerpc-ibm-aix7.1.0.0/libstdc++-v3/include/bits/atomic_futex.h:239:19:
error: 'mutex' was not declared in this scope
unique_lock<mutex> __lock(_M_mutex);
^
/tmp/20150117/powerpc-ibm-aix7.1.0.0/libstdc++-v3/include/bits/atomic_futex.h:239:24:
error: template argument 1 is invalid
unique_lock<mutex> __lock(_M_mutex);
^
/tmp/20150117/powerpc-ibm-aix7.1.0.0/libstdc++-v3/include/bits/atomic_futex.h:239:33:
error: '_M_mutex' was not declared in this scope
unique_lock<mutex> __lock(_M_mutex);
^
/tmp/20150117/powerpc-ibm-aix7.1.0.0/libstdc++-v3/include/bits/atomic_futex.h:241:2:
error: '_M_condvar' was not declared in this scope
_M_condvar.wait(__lock);
^
/tmp/20150117/powerpc-ibm-aix7.1.0.0/libstdc++-v3/include/bits/atomic_futex.h:
In member function 'void
std::__atomic_futex_unsigned<_Waiter_bit>::_M_load_when_equal(unsigned
int, std::memory_order)':
/tmp/20150117/powerpc-ibm-aix7.1.0.0/libstdc++-v3/include/bits/atomic_futex.h:248:19:
error: 'mutex' was not declared in this scope
unique_lock<mutex> __lock(_M_mutex);
^
/tmp/20150117/powerpc-ibm-aix7.1.0.0/libstdc++-v3/include/bits/atomic_futex.h:248:24:
error: template argument 1 is invalid
unique_lock<mutex> __lock(_M_mutex);
/tmp/20150117/powerpc-ibm-aix7.1.0.0/libstdc++-v3/include/bits/atomic_futex.h:248:33:
error: '_M_mutex' was not declared in this scope
unique_lock<mutex> __lock(_M_mutex);
^
/tmp/20150117/powerpc-ibm-aix7.1.0.0/libstdc++-v3/include/bits/atomic_futex.h:250:2:
error: '_M_condvar' was not declared in this scope
_M_condvar.wait(__lock);
^
/tmp/20150117/powerpc-ibm-aix7.1.0.0/libstdc++-v3/include/bits/atomic_futex.h:
In member function 'bool
std::__atomic_futex_unsigned<_Waiter_bit>::_M_load_when_equal_for(unsigned
int, std::memory_order, const std::chrono::duration<_Rep, _Period>&)':
/tmp/20150117/powerpc-ibm-aix7.1.0.0/libstdc++-v3/include/bits/atomic_futex.h:258:19:
error: 'mutex' was not declared in this scope
unique_lock<mutex> __lock(_M_mutex);
^
/tmp/20150117/powerpc-ibm-aix7.1.0.0/libstdc++-v3/include/bits/atomic_futex.h:258:24:
error: template argument 1 is invalid
unique_lock<mutex> __lock(_M_mutex);
^
/tmp/20150117/powerpc-ibm-aix7.1.0.0/libstdc++-v3/include/bits/atomic_futex.h:258:33:
error: '_M_mutex' was not declared in this scope
unique_lock<mutex> __lock(_M_mutex);
^
/tmp/20150117/powerpc-ibm-aix7.1.0.0/libstdc++-v3/include/bits/atomic_futex.h:259:14:
error: '_M_condvar' was not declared in this scope
return _M_condvar.wait_for(__lock, __rtime,
^
etc.
- David
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [patch libstdc++] Optimize synchronization in std::future if futexes are available.
2015-01-17 6:45 [patch libstdc++] Optimize synchronization in std::future if futexes are available David Edelsohn
@ 2015-01-17 7:24 ` pinskia
2015-01-17 8:06 ` Hans-Peter Nilsson
0 siblings, 1 reply; 16+ messages in thread
From: pinskia @ 2015-01-17 7:24 UTC (permalink / raw)
To: David Edelsohn; +Cc: Torvald Riegel, GCC Patches, libstdc++, Jonathan Wakely
> On Jan 16, 2015, at 9:57 PM, David Edelsohn <dje.gcc@gmail.com> wrote:
>
> This patch has broken bootstrap on AIX
>
> May I mention that this really should have been tested on systems
> other than x86 Linux.
It also broke all newlib targets too. So you could have tested one listed in the sim-test web page.
Thanks,
Andrew
>
> In file included from /tmp/20150117/powerpc-ibm-aix7.1.0.0/libstdc++-v3/include/
> future:44:0,
> from
> /nasfarm/edelsohn/src/src/libstdc++-v3/src/c++11/compatibility-thread-c++0x.cc:30:
> /tmp/20150117/powerpc-ibm-aix7.1.0.0/libstdc++-v3/include/bits/atomic_futex.h:223:5:
> error: 'mutex' does not name a type
> mutex _M_mutex;
> ^
> /tmp/20150117/powerpc-ibm-aix7.1.0.0/libstdc++-v3/include/bits/atomic_futex.h:224:5:
> error: 'condition_variable' does not name a type
> condition_variable _M_condvar;
> ^
> /tmp/20150117/powerpc-ibm-aix7.1.0.0/libstdc++-v3/include/bits/atomic_futex.h:
> In member function 'unsigned int
> std::__atomic_futex_unsigned<_Waiter_bit>::_M_load(std::memory_order)':
> /tmp/20150117/powerpc-ibm-aix7.1.0.0/libstdc++-v3/include/bits/atomic_futex.h:232:19:
> error: 'mutex' was not declared in this scope
> unique_lock<mutex> __lock(_M_mutex);
> ^
> /tmp/20150117/powerpc-ibm-aix7.1.0.0/libstdc++-v3/include/bits/atomic_futex.h:232:24:
> error: template argument 1 is invalid
> unique_lock<mutex> __lock(_M_mutex);
> ^
> /tmp/20150117/powerpc-ibm-aix7.1.0.0/libstdc++-v3/include/bits/atomic_futex.h:232:33:
> error: '_M_mutex' was not declared in this scope
> unique_lock<mutex> __lock(_M_mutex);
>
> /tmp/20150117/powerpc-ibm-aix7.1.0.0/libstdc++-v3/include/bits/atomic_futex.h:
> In member function 'unsigned int
> std::__atomic_futex_unsigned<_Waiter_bit>::_M_load_when_not_equal(unsigned
> int, std::memory_order)':
> /tmp/20150117/powerpc-ibm-aix7.1.0.0/libstdc++-v3/include/bits/atomic_futex.h:239:19:
> error: 'mutex' was not declared in this scope
> unique_lock<mutex> __lock(_M_mutex);
> ^
> /tmp/20150117/powerpc-ibm-aix7.1.0.0/libstdc++-v3/include/bits/atomic_futex.h:239:24:
> error: template argument 1 is invalid
> unique_lock<mutex> __lock(_M_mutex);
> ^
> /tmp/20150117/powerpc-ibm-aix7.1.0.0/libstdc++-v3/include/bits/atomic_futex.h:239:33:
> error: '_M_mutex' was not declared in this scope
> unique_lock<mutex> __lock(_M_mutex);
> ^
> /tmp/20150117/powerpc-ibm-aix7.1.0.0/libstdc++-v3/include/bits/atomic_futex.h:241:2:
> error: '_M_condvar' was not declared in this scope
> _M_condvar.wait(__lock);
> ^
> /tmp/20150117/powerpc-ibm-aix7.1.0.0/libstdc++-v3/include/bits/atomic_futex.h:
> In member function 'void
> std::__atomic_futex_unsigned<_Waiter_bit>::_M_load_when_equal(unsigned
> int, std::memory_order)':
>
> /tmp/20150117/powerpc-ibm-aix7.1.0.0/libstdc++-v3/include/bits/atomic_futex.h:248:19:
> error: 'mutex' was not declared in this scope
> unique_lock<mutex> __lock(_M_mutex);
> ^
> /tmp/20150117/powerpc-ibm-aix7.1.0.0/libstdc++-v3/include/bits/atomic_futex.h:248:24:
> error: template argument 1 is invalid
> unique_lock<mutex> __lock(_M_mutex);
>
> /tmp/20150117/powerpc-ibm-aix7.1.0.0/libstdc++-v3/include/bits/atomic_futex.h:248:33:
> error: '_M_mutex' was not declared in this scope
> unique_lock<mutex> __lock(_M_mutex);
> ^
> /tmp/20150117/powerpc-ibm-aix7.1.0.0/libstdc++-v3/include/bits/atomic_futex.h:250:2:
> error: '_M_condvar' was not declared in this scope
> _M_condvar.wait(__lock);
> ^
> /tmp/20150117/powerpc-ibm-aix7.1.0.0/libstdc++-v3/include/bits/atomic_futex.h:
> In member function 'bool
> std::__atomic_futex_unsigned<_Waiter_bit>::_M_load_when_equal_for(unsigned
> int, std::memory_order, const std::chrono::duration<_Rep, _Period>&)':
>
> /tmp/20150117/powerpc-ibm-aix7.1.0.0/libstdc++-v3/include/bits/atomic_futex.h:258:19:
> error: 'mutex' was not declared in this scope
> unique_lock<mutex> __lock(_M_mutex);
> ^
> /tmp/20150117/powerpc-ibm-aix7.1.0.0/libstdc++-v3/include/bits/atomic_futex.h:258:24:
> error: template argument 1 is invalid
> unique_lock<mutex> __lock(_M_mutex);
> ^
> /tmp/20150117/powerpc-ibm-aix7.1.0.0/libstdc++-v3/include/bits/atomic_futex.h:258:33:
> error: '_M_mutex' was not declared in this scope
> unique_lock<mutex> __lock(_M_mutex);
> ^
> /tmp/20150117/powerpc-ibm-aix7.1.0.0/libstdc++-v3/include/bits/atomic_futex.h:259:14:
> error: '_M_condvar' was not declared in this scope
> return _M_condvar.wait_for(__lock, __rtime,
> ^
>
> etc.
>
> - David
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [patch libstdc++] Optimize synchronization in std::future if futexes are available.
2015-01-17 7:24 ` pinskia
@ 2015-01-17 8:06 ` Hans-Peter Nilsson
2015-01-17 11:00 ` Jonathan Wakely
2015-01-17 14:30 ` Jonathan Wakely
0 siblings, 2 replies; 16+ messages in thread
From: Hans-Peter Nilsson @ 2015-01-17 8:06 UTC (permalink / raw)
To: pinskia
Cc: David Edelsohn, Torvald Riegel, GCC Patches, libstdc++, Jonathan Wakely
On Fri, 16 Jan 2015, pinskia@gmail.com wrote:
> > On Jan 16, 2015, at 9:57 PM, David Edelsohn <dje.gcc@gmail.com> wrote:
> >
> > This patch has broken bootstrap on AIX
> >
> > May I mention that this really should have been tested on systems
> > other than x86 Linux.
>
> It also broke all newlib targets too. So you could have tested one listed in the sim-test web page.
For those interested, PR64638.
brgds, H-P
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [patch libstdc++] Optimize synchronization in std::future if futexes are available.
2015-01-17 8:06 ` Hans-Peter Nilsson
@ 2015-01-17 11:00 ` Jonathan Wakely
2015-01-17 14:30 ` Jonathan Wakely
1 sibling, 0 replies; 16+ messages in thread
From: Jonathan Wakely @ 2015-01-17 11:00 UTC (permalink / raw)
To: Hans-Peter Nilsson
Cc: Andrew Pinski, David Edelsohn, Torvald Riegel, GCC Patches,
libstdc++,
Jonathan Wakely
On 17 January 2015 at 06:45, Hans-Peter Nilsson <hp@bitrange.com> wrote:
> On Fri, 16 Jan 2015, pinskia@gmail.com wrote:
>> > On Jan 16, 2015, at 9:57 PM, David Edelsohn <dje.gcc@gmail.com> wrote:
>> >
>> > This patch has broken bootstrap on AIX
>> >
>> > May I mention that this really should have been tested on systems
>> > other than x86 Linux.
>>
>> It also broke all newlib targets too. So you could have tested one listed in the sim-test web page.
>
> For those interested, PR64638.
I'll fix it later today if Torvald doesn't beat me to it.
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [patch libstdc++] Optimize synchronization in std::future if futexes are available.
2015-01-17 8:06 ` Hans-Peter Nilsson
2015-01-17 11:00 ` Jonathan Wakely
@ 2015-01-17 14:30 ` Jonathan Wakely
2015-01-17 20:55 ` Sandra Loosemore
1 sibling, 1 reply; 16+ messages in thread
From: Jonathan Wakely @ 2015-01-17 14:30 UTC (permalink / raw)
To: Hans-Peter Nilsson
Cc: pinskia, David Edelsohn, Torvald Riegel, GCC Patches, libstdc++
[-- Attachment #1: Type: text/plain, Size: 513 bytes --]
On 17/01/15 01:45 -0500, Hans-Peter Nilsson wrote:
>On Fri, 16 Jan 2015, pinskia@gmail.com wrote:
>> > On Jan 16, 2015, at 9:57 PM, David Edelsohn <dje.gcc@gmail.com> wrote:
>> >
>> > This patch has broken bootstrap on AIX
>> >
>> > May I mention that this really should have been tested on systems
>> > other than x86 Linux.
>>
>> It also broke all newlib targets too. So you could have tested one listed in the sim-test web page.
>
>For those interested, PR64638.
Should be fixed in trunk now, by this patch.
[-- Attachment #2: patch.txt --]
[-- Type: text/x-patch, Size: 1257 bytes --]
commit a0fe2162e3b10f6d35e4ea73bae209081bf2e9c2
Author: Jonathan Wakely <jwakely@redhat.com>
Date: Sat Jan 17 13:29:17 2015 +0000
PR libstdc++/64638
* include/bits/atomic_futex.h: Use appropriate config macros for
availability of std::mutex, std::condition and std::chrono.
diff --git a/libstdc++-v3/include/bits/atomic_futex.h b/libstdc++-v3/include/bits/atomic_futex.h
index 9a418d8..2673604 100644
--- a/libstdc++-v3/include/bits/atomic_futex.h
+++ b/libstdc++-v3/include/bits/atomic_futex.h
@@ -48,6 +48,7 @@ namespace std _GLIBCXX_VISIBILITY(default)
{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
+#if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1)
#if defined(_GLIBCXX_HAVE_LINUX_FUTEX)
struct __atomic_futex_unsigned_base
{
@@ -209,7 +210,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
};
-#else
+#else // !_GLIBCXX_HAVE_LINUX_FUTEX
// If futexes are not available, use a mutex and a condvar to wait.
// Because we access the data only within critical sections, all accesses
@@ -280,7 +281,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
};
-#endif
+#endif // _GLIBCXX_HAVE_LINUX_FUTEX
+#endif // _GLIBCXX_HAS_GTHREADS && _GLIBCXX_USE_C99_STDINT_TR1
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Re: [patch libstdc++] Optimize synchronization in std::future if futexes are available.
2015-01-17 14:30 ` Jonathan Wakely
@ 2015-01-17 20:55 ` Sandra Loosemore
2015-01-17 21:13 ` Jonathan Wakely
0 siblings, 1 reply; 16+ messages in thread
From: Sandra Loosemore @ 2015-01-17 20:55 UTC (permalink / raw)
To: Jonathan Wakely
Cc: Hans-Peter Nilsson, pinskia, David Edelsohn, Torvald Riegel,
GCC Patches, libstdc++
Re:
> On 17/01/15 01:45 -0500, Hans-Peter Nilsson wrote:
>> On Fri, 16 Jan 2015, pinskia@gmail.com wrote:
>>> > On Jan 16, 2015, at 9:57 PM, David Edelsohn <dje.gcc@gmail.com> wrote:
>>> >
>>> > This patch has broken bootstrap on AIX
>>> >
>>> > May I mention that this really should have been tested on systems
>>> > other than x86 Linux.
>>>
>>> It also broke all newlib targets too. So you could have tested one listed in the sim-test web page.
>>
>> For those interested, PR64638.
>
> Should be fixed in trunk now, by this patch.
I'm now getting this error in an arm-none-linux-gnueabi cross build:
In file included from
/scratch/sandra/arm-fsf2/obj/gcc-mainline-0-arm-none-linux-gnueabi-i686-pc-linux-gnu/arm-none-linux-gnueabi/libstdc++-v3/include/future:44:0,
from
/scratch/sandra/arm-fsf2/src/gcc-mainline/libstdc++-v3/src/c++11/functexcept.cc:34:
/scratch/sandra/arm-fsf2/obj/gcc-mainline-0-arm-none-linux-gnueabi-i686-pc-linux-gnu/arm-none-linux-gnueabi/libstdc++-v3/include/bits/atomic_futex.h:71:3:
error: #error We require lock-free atomic operations on int
# error We require lock-free atomic operations on int
^
It used to work a few days ago.... nothing changed in my build
environment except that I did "svn up" in my gcc source directory....
-Sandra
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Re: [patch libstdc++] Optimize synchronization in std::future if futexes are available.
2015-01-17 20:55 ` Sandra Loosemore
@ 2015-01-17 21:13 ` Jonathan Wakely
2015-01-17 22:54 ` Sandra Loosemore
0 siblings, 1 reply; 16+ messages in thread
From: Jonathan Wakely @ 2015-01-17 21:13 UTC (permalink / raw)
To: Sandra Loosemore
Cc: Hans-Peter Nilsson, pinskia, David Edelsohn, Torvald Riegel,
GCC Patches, libstdc++
[-- Attachment #1: Type: text/plain, Size: 1654 bytes --]
On 17/01/15 12:59 -0700, Sandra Loosemore wrote:
>Re:
>
>>On 17/01/15 01:45 -0500, Hans-Peter Nilsson wrote:
>>>On Fri, 16 Jan 2015, pinskia@gmail.com wrote:
>>>>> On Jan 16, 2015, at 9:57 PM, David Edelsohn <dje.gcc@gmail.com> wrote:
>>>>>
>>>>> This patch has broken bootstrap on AIX
>>>>>
>>>>> May I mention that this really should have been tested on systems
>>>>> other than x86 Linux.
>>>>
>>>>It also broke all newlib targets too. So you could have tested one listed in the sim-test web page.
>>>
>>>For those interested, PR64638.
>>
>>Should be fixed in trunk now, by this patch.
>
>I'm now getting this error in an arm-none-linux-gnueabi cross build:
>
>
>In file included from /scratch/sandra/arm-fsf2/obj/gcc-mainline-0-arm-none-linux-gnueabi-i686-pc-linux-gnu/arm-none-linux-gnueabi/libstdc++-v3/include/future:44:0,
> from /scratch/sandra/arm-fsf2/src/gcc-mainline/libstdc++-v3/src/c++11/functexcept.cc:34:
>/scratch/sandra/arm-fsf2/obj/gcc-mainline-0-arm-none-linux-gnueabi-i686-pc-linux-gnu/arm-none-linux-gnueabi/libstdc++-v3/include/bits/atomic_futex.h:71:3:
>error: #error We require lock-free atomic operations on int
> # error We require lock-free atomic operations on int
> ^
>
>It used to work a few days ago.... nothing changed in my build
>environment except that I did "svn up" in my gcc source directory....
Well that file didn't exist until yesterday :-)
Does the attached patch fix it?
The new __atomic_futex_unsigned type is only used in <future> when
ATOMIC_LOCK_FREE > 1, so there's no point trying to define it and
then failing if int is not lock-free, as the type isn't going to be
used anyway.
[-- Attachment #2: patch.txt --]
[-- Type: text/x-patch, Size: 1277 bytes --]
diff --git a/libstdc++-v3/include/bits/atomic_futex.h b/libstdc++-v3/include/bits/atomic_futex.h
index 2673604..b4138ba 100644
--- a/libstdc++-v3/include/bits/atomic_futex.h
+++ b/libstdc++-v3/include/bits/atomic_futex.h
@@ -49,7 +49,7 @@ namespace std _GLIBCXX_VISIBILITY(default)
_GLIBCXX_BEGIN_NAMESPACE_VERSION
#if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1)
-#if defined(_GLIBCXX_HAVE_LINUX_FUTEX)
+#if defined(_GLIBCXX_HAVE_LINUX_FUTEX) && ATOMIC_INT_LOCK_FREE > 1
struct __atomic_futex_unsigned_base
{
// Returns false iff a timeout occurred.
@@ -66,10 +66,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{
typedef chrono::system_clock __clock_t;
- // XXX We expect this to be lock-free, and having the payload at offset 0.
-#if ATOMIC_INT_LOCK_FREE < 2
-# error We require lock-free atomic operations on int
-#endif
+ // This must be lock-free and at offset 0.
atomic<unsigned> _M_data;
__atomic_futex_unsigned(unsigned __data) : _M_data(__data)
@@ -281,7 +278,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
};
-#endif // _GLIBCXX_HAVE_LINUX_FUTEX
+#endif // _GLIBCXX_HAVE_LINUX_FUTEX && ATOMIC_INT_LOCK_FREE > 1
#endif // _GLIBCXX_HAS_GTHREADS && _GLIBCXX_USE_C99_STDINT_TR1
_GLIBCXX_END_NAMESPACE_VERSION
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [patch libstdc++] Optimize synchronization in std::future if futexes are available.
2015-01-17 21:13 ` Jonathan Wakely
@ 2015-01-17 22:54 ` Sandra Loosemore
2015-01-17 22:58 ` Jonathan Wakely
0 siblings, 1 reply; 16+ messages in thread
From: Sandra Loosemore @ 2015-01-17 22:54 UTC (permalink / raw)
To: Jonathan Wakely
Cc: Hans-Peter Nilsson, pinskia, David Edelsohn, Torvald Riegel,
GCC Patches, libstdc++
On 01/17/2015 01:23 PM, Jonathan Wakely wrote:
> On 17/01/15 12:59 -0700, Sandra Loosemore wrote:
>> Re:
>>
>>> On 17/01/15 01:45 -0500, Hans-Peter Nilsson wrote:
>>>> On Fri, 16 Jan 2015, pinskia@gmail.com wrote:
>>>>>> On Jan 16, 2015, at 9:57 PM, David Edelsohn <dje.gcc@gmail.com>
>>>>>> wrote:
>>>>>>
>>>>>> This patch has broken bootstrap on AIX
>>>>>>
>>>>>> May I mention that this really should have been tested on systems
>>>>>> other than x86 Linux.
>>>>>
>>>>> It also broke all newlib targets too. So you could have tested one
>>>>> listed in the sim-test web page.
>>>>
>>>> For those interested, PR64638.
>>>
>>> Should be fixed in trunk now, by this patch.
>>
>> I'm now getting this error in an arm-none-linux-gnueabi cross build:
>>
>>
>> In file included from
>> /scratch/sandra/arm-fsf2/obj/gcc-mainline-0-arm-none-linux-gnueabi-i686-pc-linux-gnu/arm-none-linux-gnueabi/libstdc++-v3/include/future:44:0,
>>
>> from
>> /scratch/sandra/arm-fsf2/src/gcc-mainline/libstdc++-v3/src/c++11/functexcept.cc:34:
>>
>> /scratch/sandra/arm-fsf2/obj/gcc-mainline-0-arm-none-linux-gnueabi-i686-pc-linux-gnu/arm-none-linux-gnueabi/libstdc++-v3/include/bits/atomic_futex.h:71:3:
>> error: #error We require lock-free atomic operations on int
>> # error We require lock-free atomic operations on int
>> ^
>>
>> It used to work a few days ago.... nothing changed in my build
>> environment except that I did "svn up" in my gcc source directory....
>
> Well that file didn't exist until yesterday :-)
>
> Does the attached patch fix it?
>
> The new __atomic_futex_unsigned type is only used in <future> when
> ATOMIC_LOCK_FREE > 1, so there's no point trying to define it and
> then failing if int is not lock-free, as the type isn't going to be
> used anyway.
I'm getting a different series of build errors with this patch --
starting with
In file included from
/scratch/sandra/arm-fsf2/src/gcc-mainline/libstdc++-v3/src/c++11/futex.cc:27:0:
/scratch/sandra/arm-fsf2/obj/gcc-mainline-0-arm-none-linux-gnueabi-i686-pc-linux-gnu/arm-none-linux-gnueabi/libstdc++-v3/include/bits/atomic_futex.h:221:5:
error: 'mutex' does not name a type
mutex _M_mutex;
^
/scratch/sandra/arm-fsf2/obj/gcc-mainline-0-arm-none-linux-gnueabi-i686-pc-linux-gnu/arm-none-linux-gnueabi/libstdc++-v3/include/bits/atomic_futex.h:222:5:
error: 'condition_variable' does not name a type
condition_variable _M_condvar;
^
/scratch/sandra/arm-fsf2/obj/gcc-mainline-0-arm-none-linux-gnueabi-i686-pc-linux-gnu/arm-none-linux-gnueabi/libstdc++-v3/include/bits/atomic_futex.h:
In member function 'unsigned int
std::__atomic_futex_unsigned<_Waiter_bit>::_M_load(std::memory_
order)':
/scratch/sandra/arm-fsf2/obj/gcc-mainline-0-arm-none-linux-gnueabi-i686-pc-linux-gnu/arm-none-linux-gnueabi/libstdc++-v3/include/bits/atomic_futex.h:230:7:
error: 'unique_lock' was not declared in this scope
unique_lock<mutex> __lock(_M_mutex);
^
and going on for several screenfuls.
Maybe the patch(es) causing all these problems should be reverted until
the breakage is tracked down and fixed and regression-tested on a
variety of targets? It's not really blocking me at the moment, but it
seems unfortunate that trunk is so unstable as we're entering Stage 4.....
-Sandra
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [patch libstdc++] Optimize synchronization in std::future if futexes are available.
2015-01-17 22:54 ` Sandra Loosemore
@ 2015-01-17 22:58 ` Jonathan Wakely
2015-01-18 0:08 ` Sandra Loosemore
0 siblings, 1 reply; 16+ messages in thread
From: Jonathan Wakely @ 2015-01-17 22:58 UTC (permalink / raw)
To: Sandra Loosemore
Cc: Hans-Peter Nilsson, pinskia, David Edelsohn, Torvald Riegel,
GCC Patches, libstdc++
On 17/01/15 15:22 -0700, Sandra Loosemore wrote:
>On 01/17/2015 01:23 PM, Jonathan Wakely wrote:
>>On 17/01/15 12:59 -0700, Sandra Loosemore wrote:
>>>Re:
>>>
>>>>On 17/01/15 01:45 -0500, Hans-Peter Nilsson wrote:
>>>>>On Fri, 16 Jan 2015, pinskia@gmail.com wrote:
>>>>>>>On Jan 16, 2015, at 9:57 PM, David Edelsohn <dje.gcc@gmail.com>
>>>>>>>wrote:
>>>>>>>
>>>>>>>This patch has broken bootstrap on AIX
>>>>>>>
>>>>>>>May I mention that this really should have been tested on systems
>>>>>>>other than x86 Linux.
>>>>>>
>>>>>>It also broke all newlib targets too. So you could have tested one
>>>>>>listed in the sim-test web page.
>>>>>
>>>>>For those interested, PR64638.
>>>>
>>>>Should be fixed in trunk now, by this patch.
>>>
>>>I'm now getting this error in an arm-none-linux-gnueabi cross build:
>>>
>>>
>>>In file included from
>>>/scratch/sandra/arm-fsf2/obj/gcc-mainline-0-arm-none-linux-gnueabi-i686-pc-linux-gnu/arm-none-linux-gnueabi/libstdc++-v3/include/future:44:0,
>>>
>>> from
>>>/scratch/sandra/arm-fsf2/src/gcc-mainline/libstdc++-v3/src/c++11/functexcept.cc:34:
>>>
>>>/scratch/sandra/arm-fsf2/obj/gcc-mainline-0-arm-none-linux-gnueabi-i686-pc-linux-gnu/arm-none-linux-gnueabi/libstdc++-v3/include/bits/atomic_futex.h:71:3:
>>>error: #error We require lock-free atomic operations on int
>>># error We require lock-free atomic operations on int
>>> ^
>>>
>>>It used to work a few days ago.... nothing changed in my build
>>>environment except that I did "svn up" in my gcc source directory....
>>
>>Well that file didn't exist until yesterday :-)
>>
>>Does the attached patch fix it?
>>
>>The new __atomic_futex_unsigned type is only used in <future> when
>>ATOMIC_LOCK_FREE > 1, so there's no point trying to define it and
>>then failing if int is not lock-free, as the type isn't going to be
>>used anyway.
>
>I'm getting a different series of build errors with this patch --
>starting with
>
>In file included from /scratch/sandra/arm-fsf2/src/gcc-mainline/libstdc++-v3/src/c++11/futex.cc:27:0:
>/scratch/sandra/arm-fsf2/obj/gcc-mainline-0-arm-none-linux-gnueabi-i686-pc-linux-gnu/arm-none-linux-gnueabi/libstdc++-v3/include/bits/atomic_futex.h:221:5:
>error: 'mutex' does not name a type
> mutex _M_mutex;
> ^
>/scratch/sandra/arm-fsf2/obj/gcc-mainline-0-arm-none-linux-gnueabi-i686-pc-linux-gnu/arm-none-linux-gnueabi/libstdc++-v3/include/bits/atomic_futex.h:222:5:
>error: 'condition_variable' does not name a type
> condition_variable _M_condvar;
> ^
>/scratch/sandra/arm-fsf2/obj/gcc-mainline-0-arm-none-linux-gnueabi-i686-pc-linux-gnu/arm-none-linux-gnueabi/libstdc++-v3/include/bits/atomic_futex.h:
>In member function 'unsigned int
>std::__atomic_futex_unsigned<_Waiter_bit>::_M_load(std::memory_
>order)':
>/scratch/sandra/arm-fsf2/obj/gcc-mainline-0-arm-none-linux-gnueabi-i686-pc-linux-gnu/arm-none-linux-gnueabi/libstdc++-v3/include/bits/atomic_futex.h:230:7:
>error: 'unique_lock' was not declared in this scope
> unique_lock<mutex> __lock(_M_mutex);
> ^
>and going on for several screenfuls.
Odd, that should already be fixed at rev 219799.
Are you still at a revision older than that?
>Maybe the patch(es) causing all these problems should be reverted
>until the breakage is tracked down and fixed and regression-tested on
>a variety of targets? It's not really blocking me at the moment, but
>it seems unfortunate that trunk is so unstable as we're entering Stage
>4.....
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [patch libstdc++] Optimize synchronization in std::future if futexes are available.
2015-01-17 22:58 ` Jonathan Wakely
@ 2015-01-18 0:08 ` Sandra Loosemore
2015-01-18 0:24 ` Jonathan Wakely
0 siblings, 1 reply; 16+ messages in thread
From: Sandra Loosemore @ 2015-01-18 0:08 UTC (permalink / raw)
To: Jonathan Wakely
Cc: Hans-Peter Nilsson, pinskia, David Edelsohn, Torvald Riegel,
GCC Patches, libstdc++
On 01/17/2015 03:36 PM, Jonathan Wakely wrote:
> On 17/01/15 15:22 -0700, Sandra Loosemore wrote:
> [snip snip]
>> I'm getting a different series of build errors with this patch --
>> starting with
>>
>> In file included from
>> /scratch/sandra/arm-fsf2/src/gcc-mainline/libstdc++-v3/src/c++11/futex.cc:27:0:
>>
>> /scratch/sandra/arm-fsf2/obj/gcc-mainline-0-arm-none-linux-gnueabi-i686-pc-linux-gnu/arm-none-linux-gnueabi/libstdc++-v3/include/bits/atomic_futex.h:221:5:
>> error: 'mutex' does not name a type
>> mutex _M_mutex;
>> ^
>> /scratch/sandra/arm-fsf2/obj/gcc-mainline-0-arm-none-linux-gnueabi-i686-pc-linux-gnu/arm-none-linux-gnueabi/libstdc++-v3/include/bits/atomic_futex.h:222:5:
>> error: 'condition_variable' does not name a type
>> condition_variable _M_condvar;
>> ^
>> /scratch/sandra/arm-fsf2/obj/gcc-mainline-0-arm-none-linux-gnueabi-i686-pc-linux-gnu/arm-none-linux-gnueabi/libstdc++-v3/include/bits/atomic_futex.h:
>> In member function 'unsigned int
>> std::__atomic_futex_unsigned<_Waiter_bit>::_M_load(std::memory_
>> order)':
>> /scratch/sandra/arm-fsf2/obj/gcc-mainline-0-arm-none-linux-gnueabi-i686-pc-linux-gnu/arm-none-linux-gnueabi/libstdc++-v3/include/bits/atomic_futex.h:230:7:
>> error: 'unique_lock' was not declared in this scope
>> unique_lock<mutex> __lock(_M_mutex);
>> ^
>> and going on for several screenfuls.
>
> Odd, that should already be fixed at rev 219799.
>
> Are you still at a revision older than that?
My source tree is at r219802 now.
>
>> Maybe the patch(es) causing all these problems should be reverted
>> until the breakage is tracked down and fixed and regression-tested on
>> a variety of targets? It's not really blocking me at the moment, but
>> it seems unfortunate that trunk is so unstable as we're entering Stage
>> 4.....
-Sandra
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [patch libstdc++] Optimize synchronization in std::future if futexes are available.
2015-01-18 0:08 ` Sandra Loosemore
@ 2015-01-18 0:24 ` Jonathan Wakely
2015-01-18 8:37 ` Sandra Loosemore
0 siblings, 1 reply; 16+ messages in thread
From: Jonathan Wakely @ 2015-01-18 0:24 UTC (permalink / raw)
To: Sandra Loosemore
Cc: Hans-Peter Nilsson, pinskia, David Edelsohn, Torvald Riegel,
GCC Patches, libstdc++
On 17/01/15 15:54 -0700, Sandra Loosemore wrote:
>On 01/17/2015 03:36 PM, Jonathan Wakely wrote:
>>On 17/01/15 15:22 -0700, Sandra Loosemore wrote:
>>[snip snip]
>>>I'm getting a different series of build errors with this patch --
>>>starting with
>>>
>>>In file included from
>>>/scratch/sandra/arm-fsf2/src/gcc-mainline/libstdc++-v3/src/c++11/futex.cc:27:0:
>>>
>>>/scratch/sandra/arm-fsf2/obj/gcc-mainline-0-arm-none-linux-gnueabi-i686-pc-linux-gnu/arm-none-linux-gnueabi/libstdc++-v3/include/bits/atomic_futex.h:221:5:
>>>error: 'mutex' does not name a type
>>> mutex _M_mutex;
>>> ^
>>>/scratch/sandra/arm-fsf2/obj/gcc-mainline-0-arm-none-linux-gnueabi-i686-pc-linux-gnu/arm-none-linux-gnueabi/libstdc++-v3/include/bits/atomic_futex.h:222:5:
>>>error: 'condition_variable' does not name a type
>>> condition_variable _M_condvar;
>>> ^
>>>/scratch/sandra/arm-fsf2/obj/gcc-mainline-0-arm-none-linux-gnueabi-i686-pc-linux-gnu/arm-none-linux-gnueabi/libstdc++-v3/include/bits/atomic_futex.h:
>>>In member function 'unsigned int
>>>std::__atomic_futex_unsigned<_Waiter_bit>::_M_load(std::memory_
>>>order)':
>>>/scratch/sandra/arm-fsf2/obj/gcc-mainline-0-arm-none-linux-gnueabi-i686-pc-linux-gnu/arm-none-linux-gnueabi/libstdc++-v3/include/bits/atomic_futex.h:230:7:
>>>error: 'unique_lock' was not declared in this scope
>>> unique_lock<mutex> __lock(_M_mutex);
>>> ^
>>>and going on for several screenfuls.
>>
>>Odd, that should already be fixed at rev 219799.
>>
>>Are you still at a revision older than that?
>
>My source tree is at r219802 now.
My fault, this additional chunk is needed alongside the patch I sent
earlier:
--- a/libstdc++-v3/include/bits/atomic_futex.h
+++ b/libstdc++-v3/include/bits/atomic_futex.h
@@ -35,7 +35,7 @@
#include <bits/c++config.h>
#include <atomic>
#include <chrono>
-#if !defined(_GLIBCXX_HAVE_LINUX_FUTEX)
+#if ! (defined(_GLIBCXX_HAVE_LINUX_FUTEX) && ATOMIC_INT_LOCK_FREE > 1)
#include <mutex>
#include <condition_variable>
#endif
What I sent earlier causes your target to use std::mutex and
std::condition_variable, but without the bit above the headers aren't
included.
>>>Maybe the patch(es) causing all these problems should be reverted
>>>until the breakage is tracked down and fixed and regression-tested on
>>>a variety of targets? It's not really blocking me at the moment, but
>>>it seems unfortunate that trunk is so unstable as we're entering Stage
>>>4.....
Torvald, if the extra change above doesn't fix it (although it should
do) then maybe it should be reverted until it can be tested more
widely.
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [patch libstdc++] Optimize synchronization in std::future if futexes are available.
2015-01-18 0:24 ` Jonathan Wakely
@ 2015-01-18 8:37 ` Sandra Loosemore
2015-01-18 15:32 ` Jonathan Wakely
0 siblings, 1 reply; 16+ messages in thread
From: Sandra Loosemore @ 2015-01-18 8:37 UTC (permalink / raw)
To: Jonathan Wakely
Cc: Hans-Peter Nilsson, pinskia, David Edelsohn, Torvald Riegel,
GCC Patches, libstdc++
On 01/17/2015 03:58 PM, Jonathan Wakely wrote:
>
> My fault, this additional chunk is needed alongside the patch I sent
> earlier:
>
> --- a/libstdc++-v3/include/bits/atomic_futex.h
> +++ b/libstdc++-v3/include/bits/atomic_futex.h
> @@ -35,7 +35,7 @@
> #include <bits/c++config.h>
> #include <atomic>
> #include <chrono>
> -#if !defined(_GLIBCXX_HAVE_LINUX_FUTEX)
> +#if ! (defined(_GLIBCXX_HAVE_LINUX_FUTEX) && ATOMIC_INT_LOCK_FREE > 1)
> #include <mutex>
> #include <condition_variable>
> #endif
>
> What I sent earlier causes your target to use std::mutex and
> std::condition_variable, but without the bit above the headers aren't
> included.
Still no joy:
/scratch/sandra/arm-fsf2/src/gcc-mainline/libstdc++-v3/src/c++11/futex.cc:45:3:
error: '__atomic_futex_unsigned_base' has not been declared
__atomic_futex_unsigned_base::_M_futex_wait_until(unsigned *__addr,
^
/scratch/sandra/arm-fsf2/src/gcc-mainline/libstdc++-v3/src/c++11/futex.cc:88:3:
error: '__atomic_futex_unsigned_base' has not been declared
__atomic_futex_unsigned_base::_M_futex_notify_all(unsigned* __addr)
^
>>>> Maybe the patch(es) causing all these problems should be reverted
>>>> until the breakage is tracked down and fixed and regression-tested on
>>>> a variety of targets? It's not really blocking me at the moment, but
>>>> it seems unfortunate that trunk is so unstable as we're entering Stage
>>>> 4.....
>
> Torvald, if the extra change above doesn't fix it (although it should
> do) then maybe it should be reverted until it can be tested more
> widely.
-Sandra
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [patch libstdc++] Optimize synchronization in std::future if futexes are available.
2015-01-18 8:37 ` Sandra Loosemore
@ 2015-01-18 15:32 ` Jonathan Wakely
2015-01-18 15:49 ` Jonathan Wakely
2015-01-29 3:35 ` Doug Gilmore
0 siblings, 2 replies; 16+ messages in thread
From: Jonathan Wakely @ 2015-01-18 15:32 UTC (permalink / raw)
To: Sandra Loosemore
Cc: Hans-Peter Nilsson, pinskia, David Edelsohn, Torvald Riegel,
GCC Patches, libstdc++
[-- Attachment #1: Type: text/plain, Size: 1195 bytes --]
On 17/01/15 19:51 -0700, Sandra Loosemore wrote:
>On 01/17/2015 03:58 PM, Jonathan Wakely wrote:
>>
>>My fault, this additional chunk is needed alongside the patch I sent
>>earlier:
>>
>>--- a/libstdc++-v3/include/bits/atomic_futex.h
>>+++ b/libstdc++-v3/include/bits/atomic_futex.h
>>@@ -35,7 +35,7 @@
>>#include <bits/c++config.h>
>>#include <atomic>
>>#include <chrono>
>>-#if !defined(_GLIBCXX_HAVE_LINUX_FUTEX)
>>+#if ! (defined(_GLIBCXX_HAVE_LINUX_FUTEX) && ATOMIC_INT_LOCK_FREE > 1)
>>#include <mutex>
>>#include <condition_variable>
>>#endif
>>
>>What I sent earlier causes your target to use std::mutex and
>>std::condition_variable, but without the bit above the headers aren't
>>included.
>
>Still no joy:
>/scratch/sandra/arm-fsf2/src/gcc-mainline/libstdc++-v3/src/c++11/futex.cc:45:3:
>error: '__atomic_futex_unsigned_base' has not been declared
> __atomic_futex_unsigned_base::_M_futex_wait_until(unsigned *__addr,
> ^
>/scratch/sandra/arm-fsf2/src/gcc-mainline/libstdc++-v3/src/c++11/futex.cc:88:3:
>error: '__atomic_futex_unsigned_base' has not been declared
> __atomic_futex_unsigned_base::_M_futex_notify_all(unsigned* __addr)
> ^
futex.cc needs the same change ...
[-- Attachment #2: patch.txt --]
[-- Type: text/x-patch, Size: 449 bytes --]
diff --git a/libstdc++-v3/src/c++11/futex.cc b/libstdc++-v3/src/c++11/futex.cc
index ad766c8..f24b44e 100644
--- a/libstdc++-v3/src/c++11/futex.cc
+++ b/libstdc++-v3/src/c++11/futex.cc
@@ -23,7 +23,7 @@
// <http://www.gnu.org/licenses/>.
#include <bits/c++config.h>
-#if defined(_GLIBCXX_HAVE_LINUX_FUTEX)
+#if defined(_GLIBCXX_HAVE_LINUX_FUTEX) && ATOMIC_INT_LOCK_FREE > 1
#include <bits/atomic_futex.h>
#include <chrono>
#include <climits>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [patch libstdc++] Optimize synchronization in std::future if futexes are available.
2015-01-18 15:32 ` Jonathan Wakely
@ 2015-01-18 15:49 ` Jonathan Wakely
2015-02-01 15:13 ` Jonathan Wakely
2015-01-29 3:35 ` Doug Gilmore
1 sibling, 1 reply; 16+ messages in thread
From: Jonathan Wakely @ 2015-01-18 15:49 UTC (permalink / raw)
To: Sandra Loosemore
Cc: Hans-Peter Nilsson, pinskia, David Edelsohn, Torvald Riegel,
GCC Patches, libstdc++
[-- Attachment #1: Type: text/plain, Size: 1947 bytes --]
On 18/01/15 13:19 +0000, Jonathan Wakely wrote:
>On 17/01/15 19:51 -0700, Sandra Loosemore wrote:
>>On 01/17/2015 03:58 PM, Jonathan Wakely wrote:
>>>
>>>My fault, this additional chunk is needed alongside the patch I sent
>>>earlier:
>>>
>>>--- a/libstdc++-v3/include/bits/atomic_futex.h
>>>+++ b/libstdc++-v3/include/bits/atomic_futex.h
>>>@@ -35,7 +35,7 @@
>>>#include <bits/c++config.h>
>>>#include <atomic>
>>>#include <chrono>
>>>-#if !defined(_GLIBCXX_HAVE_LINUX_FUTEX)
>>>+#if ! (defined(_GLIBCXX_HAVE_LINUX_FUTEX) && ATOMIC_INT_LOCK_FREE > 1)
>>>#include <mutex>
>>>#include <condition_variable>
>>>#endif
>>>
>>>What I sent earlier causes your target to use std::mutex and
>>>std::condition_variable, but without the bit above the headers aren't
>>>included.
>>
>>Still no joy:
>>/scratch/sandra/arm-fsf2/src/gcc-mainline/libstdc++-v3/src/c++11/futex.cc:45:3:
>>error: '__atomic_futex_unsigned_base' has not been declared
>> __atomic_futex_unsigned_base::_M_futex_wait_until(unsigned *__addr,
>> ^
>>/scratch/sandra/arm-fsf2/src/gcc-mainline/libstdc++-v3/src/c++11/futex.cc:88:3:
>>error: '__atomic_futex_unsigned_base' has not been declared
>> __atomic_futex_unsigned_base::_M_futex_notify_all(unsigned* __addr)
>> ^
>
>futex.cc needs the same change ...
>diff --git a/libstdc++-v3/src/c++11/futex.cc b/libstdc++-v3/src/c++11/futex.cc
>index ad766c8..f24b44e 100644
>--- a/libstdc++-v3/src/c++11/futex.cc
>+++ b/libstdc++-v3/src/c++11/futex.cc
>@@ -23,7 +23,7 @@
> // <http://www.gnu.org/licenses/>.
>
> #include <bits/c++config.h>
>-#if defined(_GLIBCXX_HAVE_LINUX_FUTEX)
>+#if defined(_GLIBCXX_HAVE_LINUX_FUTEX) && ATOMIC_INT_LOCK_FREE > 1
> #include <bits/atomic_futex.h>
> #include <chrono>
> #include <climits>
I've committed the attached after succesfully building
arm-none-linux-gnueabi with it and testing on x86_64-linux.
(The other changes in the patch are just whitespace and making the
member variables private.)
[-- Attachment #2: patch.txt --]
[-- Type: text/x-patch, Size: 7915 bytes --]
commit 07fcc71b616a253ed34b8b6f83e7f8cf6ea08a7a
Author: Jonathan Wakely <jwakely@redhat.com>
Date: Sun Jan 18 14:34:52 2015 +0000
* src/c++11/futex.cc: Fix order of includes and preprocessor condition.
diff --git a/libstdc++-v3/src/c++11/futex.cc b/libstdc++-v3/src/c++11/futex.cc
index f24b44e..1336779 100644
--- a/libstdc++-v3/src/c++11/futex.cc
+++ b/libstdc++-v3/src/c++11/futex.cc
@@ -22,9 +22,8 @@
// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
// <http://www.gnu.org/licenses/>.
-#include <bits/c++config.h>
-#if defined(_GLIBCXX_HAVE_LINUX_FUTEX) && ATOMIC_INT_LOCK_FREE > 1
#include <bits/atomic_futex.h>
+#if defined(_GLIBCXX_HAVE_LINUX_FUTEX) && ATOMIC_INT_LOCK_FREE > 1
#include <chrono>
#include <climits>
#include <syscall.h>
commit c0b71ac062080887ae2bc072c9db21118155ae22
Author: redi <redi@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Sun Jan 18 14:25:22 2015 +0000
* include/bits/atomic_futex.h: Use mutex and condition_variable when
atomic int is not lock-free. Make member variables private.
* src/c++11/futex.cc: Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@219815 138bc75d-0d04-0410-961f-82ee72b054a4
diff --git a/libstdc++-v3/include/bits/atomic_futex.h b/libstdc++-v3/include/bits/atomic_futex.h
index 2673604..51b9c7e 100644
--- a/libstdc++-v3/include/bits/atomic_futex.h
+++ b/libstdc++-v3/include/bits/atomic_futex.h
@@ -35,7 +35,7 @@
#include <bits/c++config.h>
#include <atomic>
#include <chrono>
-#if !defined(_GLIBCXX_HAVE_LINUX_FUTEX)
+#if ! (defined(_GLIBCXX_HAVE_LINUX_FUTEX) && ATOMIC_INT_LOCK_FREE > 1)
#include <mutex>
#include <condition_variable>
#endif
@@ -49,7 +49,7 @@ namespace std _GLIBCXX_VISIBILITY(default)
_GLIBCXX_BEGIN_NAMESPACE_VERSION
#if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1)
-#if defined(_GLIBCXX_HAVE_LINUX_FUTEX)
+#if defined(_GLIBCXX_HAVE_LINUX_FUTEX) && ATOMIC_INT_LOCK_FREE > 1
struct __atomic_futex_unsigned_base
{
// Returns false iff a timeout occurred.
@@ -62,16 +62,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
};
template <unsigned _Waiter_bit = 0x80000000>
- struct __atomic_futex_unsigned : __atomic_futex_unsigned_base
+ class __atomic_futex_unsigned : __atomic_futex_unsigned_base
{
typedef chrono::system_clock __clock_t;
- // XXX We expect this to be lock-free, and having the payload at offset 0.
-#if ATOMIC_INT_LOCK_FREE < 2
-# error We require lock-free atomic operations on int
-#endif
+ // This must be lock-free and at offset 0.
atomic<unsigned> _M_data;
+ public:
+ explicit
__atomic_futex_unsigned(unsigned __data) : _M_data(__data)
{ }
@@ -82,7 +81,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
private:
-
// If a timeout occurs, returns a current value after the timeout;
// otherwise, returns the operand's value if equal is true or a different
// value if equal is false.
@@ -165,26 +163,27 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// Returns false iff a timeout occurred.
template<typename _Rep, typename _Period>
- _GLIBCXX_ALWAYS_INLINE bool
- _M_load_when_equal_for(unsigned __val, memory_order __mo,
- const chrono::duration<_Rep, _Period>& __rtime)
- {
- return _M_load_when_equal_until(__val, __mo, __clock_t::now() + __rtime);
- }
+ _GLIBCXX_ALWAYS_INLINE bool
+ _M_load_when_equal_for(unsigned __val, memory_order __mo,
+ const chrono::duration<_Rep, _Period>& __rtime)
+ {
+ return _M_load_when_equal_until(__val, __mo,
+ __clock_t::now() + __rtime);
+ }
// Returns false iff a timeout occurred.
template<typename _Clock, typename _Duration>
- _GLIBCXX_ALWAYS_INLINE bool
- _M_load_when_equal_until(unsigned __val, memory_order __mo,
- const chrono::time_point<_Clock, _Duration>& __atime)
- {
- // DR 887 - Sync unknown clock to known clock.
- const typename _Clock::time_point __c_entry = _Clock::now();
- const __clock_t::time_point __s_entry = __clock_t::now();
- const auto __delta = __atime - __c_entry;
- const auto __s_atime = __s_entry + __delta;
- return _M_load_when_equal_until(__val, __mo, __s_atime);
- }
+ _GLIBCXX_ALWAYS_INLINE bool
+ _M_load_when_equal_until(unsigned __val, memory_order __mo,
+ const chrono::time_point<_Clock, _Duration>& __atime)
+ {
+ // DR 887 - Sync unknown clock to known clock.
+ const typename _Clock::time_point __c_entry = _Clock::now();
+ const __clock_t::time_point __s_entry = __clock_t::now();
+ const auto __delta = __atime - __c_entry;
+ const auto __s_atime = __s_entry + __delta;
+ return _M_load_when_equal_until(__val, __mo, __s_atime);
+ }
// Returns false iff a timeout occurred.
template<typename _Duration>
@@ -207,16 +206,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
if (_M_data.exchange(__val, __mo) & _Waiter_bit)
_M_futex_notify_all(__futex);
}
-
};
-#else // !_GLIBCXX_HAVE_LINUX_FUTEX
+#else // ! (_GLIBCXX_HAVE_LINUX_FUTEX && ATOMIC_INT_LOCK_FREE > 1)
// If futexes are not available, use a mutex and a condvar to wait.
// Because we access the data only within critical sections, all accesses
// are sequentially consistent; thus, we satisfy any provided memory_order.
template <unsigned _Waiter_bit = 0x80000000>
- struct __atomic_futex_unsigned
+ class __atomic_futex_unsigned
{
typedef chrono::system_clock __clock_t;
@@ -224,6 +222,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
mutex _M_mutex;
condition_variable _M_condvar;
+ public:
+ explicit
__atomic_futex_unsigned(unsigned __data) : _M_data(__data)
{ }
@@ -252,24 +252,24 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
template<typename _Rep, typename _Period>
- _GLIBCXX_ALWAYS_INLINE bool
- _M_load_when_equal_for(unsigned __val, memory_order __mo,
- const chrono::duration<_Rep, _Period>& __rtime)
- {
- unique_lock<mutex> __lock(_M_mutex);
- return _M_condvar.wait_for(__lock, __rtime,
- [&] { return _M_data == __val;});
- }
+ _GLIBCXX_ALWAYS_INLINE bool
+ _M_load_when_equal_for(unsigned __val, memory_order __mo,
+ const chrono::duration<_Rep, _Period>& __rtime)
+ {
+ unique_lock<mutex> __lock(_M_mutex);
+ return _M_condvar.wait_for(__lock, __rtime,
+ [&] { return _M_data == __val;});
+ }
template<typename _Clock, typename _Duration>
- _GLIBCXX_ALWAYS_INLINE bool
- _M_load_when_equal_until(unsigned __val, memory_order __mo,
- const chrono::time_point<_Clock, _Duration>& __atime)
- {
- unique_lock<mutex> __lock(_M_mutex);
- return _M_condvar.wait_until(__lock, __atime,
- [&] { return _M_data == __val;});
- }
+ _GLIBCXX_ALWAYS_INLINE bool
+ _M_load_when_equal_until(unsigned __val, memory_order __mo,
+ const chrono::time_point<_Clock, _Duration>& __atime)
+ {
+ unique_lock<mutex> __lock(_M_mutex);
+ return _M_condvar.wait_until(__lock, __atime,
+ [&] { return _M_data == __val;});
+ }
_GLIBCXX_ALWAYS_INLINE void
_M_store_notify_all(unsigned __val, memory_order __mo)
@@ -278,10 +278,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_M_data = __val;
_M_condvar.notify_all();
}
-
};
-#endif // _GLIBCXX_HAVE_LINUX_FUTEX
+#endif // _GLIBCXX_HAVE_LINUX_FUTEX && ATOMIC_INT_LOCK_FREE > 1
#endif // _GLIBCXX_HAS_GTHREADS && _GLIBCXX_USE_C99_STDINT_TR1
_GLIBCXX_END_NAMESPACE_VERSION
diff --git a/libstdc++-v3/src/c++11/futex.cc b/libstdc++-v3/src/c++11/futex.cc
index ad766c8..f24b44e 100644
--- a/libstdc++-v3/src/c++11/futex.cc
+++ b/libstdc++-v3/src/c++11/futex.cc
@@ -23,7 +23,7 @@
// <http://www.gnu.org/licenses/>.
#include <bits/c++config.h>
-#if defined(_GLIBCXX_HAVE_LINUX_FUTEX)
+#if defined(_GLIBCXX_HAVE_LINUX_FUTEX) && ATOMIC_INT_LOCK_FREE > 1
#include <bits/atomic_futex.h>
#include <chrono>
#include <climits>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [patch libstdc++] Optimize synchronization in std::future if futexes are available.
2015-01-18 15:32 ` Jonathan Wakely
2015-01-18 15:49 ` Jonathan Wakely
@ 2015-01-29 3:35 ` Doug Gilmore
1 sibling, 0 replies; 16+ messages in thread
From: Doug Gilmore @ 2015-01-29 3:35 UTC (permalink / raw)
To: gcc-patches
[-- Attachment #1: Type: text/plain, Size: 1531 bytes --]
On 01/18/2015 05:19 AM, Jonathan Wakely wrote:
> On 17/01/15 19:51 -0700, Sandra Loosemore wrote:
>> On 01/17/2015 03:58 PM, Jonathan Wakely wrote:
>>>
>>> My fault, this additional chunk is needed alongside the patch I sent
>>> earlier:
>>>
>>> --- a/libstdc++-v3/include/bits/atomic_futex.h
>>> +++ b/libstdc++-v3/include/bits/atomic_futex.h
>>> @@ -35,7 +35,7 @@
>>> #include <bits/c++config.h>
>>> #include <atomic>
>>> #include <chrono>
>>> -#if !defined(_GLIBCXX_HAVE_LINUX_FUTEX)
>>> +#if ! (defined(_GLIBCXX_HAVE_LINUX_FUTEX) && ATOMIC_INT_LOCK_FREE > 1)
>>> #include <mutex>
>>> #include <condition_variable>
>>> #endif
>>>
>>> What I sent earlier causes your target to use std::mutex and
>>> std::condition_variable, but without the bit above the headers aren't
>>> included.
>>
>> Still no joy:
>> /scratch/sandra/arm-fsf2/src/gcc-mainline/libstdc++-v3/src/c++11/futex.cc:45:3: error: '__atomic_futex_unsigned_base' has not been declared
>> __atomic_futex_unsigned_base::_M_futex_wait_until(unsigned *__addr,
>> ^
>> /scratch/sandra/arm-fsf2/src/gcc-mainline/libstdc++-v3/src/c++11/futex.cc:88:3: error: '__atomic_futex_unsigned_base' has not been declared
>> __atomic_futex_unsigned_base::_M_futex_notify_all(unsigned* __addr)
>> ^
>
> futex.cc needs the same change ...
I am still noticing a problem building a native X86_64 ToT compiler on
Ubuntu 12.04.5 LTS.
Attached is a patch where the CPP guards in atomic_futex.h are
reflected in futex.cc, which fixes my build problem.
OK to commit?
Thanks,
Doug
[-- Attachment #2: 0001-CPP-guards-in-futex.cc-should-match-guards-in-futex..patch --]
[-- Type: text/x-patch, Size: 993 bytes --]
From 1debe13da342ac30d905e12a9ca243e30cb61870 Mon Sep 17 00:00:00 2001
From: Doug Gilmore <doug.gilmore@imgtec.com>
Date: Wed, 28 Jan 2015 14:29:14 -0800
Subject: [PATCH] CPP guards in futex.cc should match guards in futex.ii.
---
libstdc++-v3/src/c++11/futex.cc | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/libstdc++-v3/src/c++11/futex.cc b/libstdc++-v3/src/c++11/futex.cc
index 1336779..5087483 100644
--- a/libstdc++-v3/src/c++11/futex.cc
+++ b/libstdc++-v3/src/c++11/futex.cc
@@ -23,6 +23,7 @@
// <http://www.gnu.org/licenses/>.
#include <bits/atomic_futex.h>
+#if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1)
#if defined(_GLIBCXX_HAVE_LINUX_FUTEX) && ATOMIC_INT_LOCK_FREE > 1
#include <chrono>
#include <climits>
@@ -93,4 +94,5 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
}
-#endif
+#endif // _GLIBCXX_HAVE_LINUX_FUTEX && ATOMIC_INT_LOCK_FREE > 1
+#endif // _GLIBCXX_HAS_GTHREADS && _GLIBCXX_USE_C99_STDINT_TR1
--
1.7.9.5
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [patch libstdc++] Optimize synchronization in std::future if futexes are available.
2015-01-18 15:49 ` Jonathan Wakely
@ 2015-02-01 15:13 ` Jonathan Wakely
0 siblings, 0 replies; 16+ messages in thread
From: Jonathan Wakely @ 2015-02-01 15:13 UTC (permalink / raw)
To: libstdc++, gcc-patches; +Cc: Torvald Riegel
[-- Attachment #1: Type: text/plain, Size: 136 bytes --]
One more patch to fix the preprocessor conditions, this time to fix
--disable-threads builds.
Tested x86_64-linux, committed to trunk.
[-- Attachment #2: patch.txt --]
[-- Type: text/x-patch, Size: 730 bytes --]
commit 911783907e5482c09d80fd8a5e3b5aa6d2b891d3
Author: Jonathan Wakely <jwakely@redhat.com>
Date: Sat Jan 31 22:01:43 2015 +0000
* src/c++11/futex.cc: Do not define for gthr-single.h targets.
diff --git a/libstdc++-v3/src/c++11/futex.cc b/libstdc++-v3/src/c++11/futex.cc
index 1336779..a7f0200 100644
--- a/libstdc++-v3/src/c++11/futex.cc
+++ b/libstdc++-v3/src/c++11/futex.cc
@@ -23,6 +23,7 @@
// <http://www.gnu.org/licenses/>.
#include <bits/atomic_futex.h>
+#if defined(_GLIBCXX_HAS_GTHREADS) && defined(_GLIBCXX_USE_C99_STDINT_TR1)
#if defined(_GLIBCXX_HAVE_LINUX_FUTEX) && ATOMIC_INT_LOCK_FREE > 1
#include <chrono>
#include <climits>
@@ -94,3 +95,4 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
#endif
+#endif
^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2015-02-01 15:13 UTC | newest]
Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-01-17 6:45 [patch libstdc++] Optimize synchronization in std::future if futexes are available David Edelsohn
2015-01-17 7:24 ` pinskia
2015-01-17 8:06 ` Hans-Peter Nilsson
2015-01-17 11:00 ` Jonathan Wakely
2015-01-17 14:30 ` Jonathan Wakely
2015-01-17 20:55 ` Sandra Loosemore
2015-01-17 21:13 ` Jonathan Wakely
2015-01-17 22:54 ` Sandra Loosemore
2015-01-17 22:58 ` Jonathan Wakely
2015-01-18 0:08 ` Sandra Loosemore
2015-01-18 0:24 ` Jonathan Wakely
2015-01-18 8:37 ` Sandra Loosemore
2015-01-18 15:32 ` Jonathan Wakely
2015-01-18 15:49 ` Jonathan Wakely
2015-02-01 15:13 ` Jonathan Wakely
2015-01-29 3:35 ` Doug Gilmore
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).