This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCHv2] nptl: Fix pthread_rwlock_try*lock stalls [BZ #23844]


On 1/22/19 1:12 PM, Carlos O'Donell wrote:
> v2
> - Added analysis comment to tryrdlock test.
> - Removed rw var and avoided boolean coercion.
> - Avoided incomplete test output to stdout.

Siddhesh,

Both Torvald and Rik have OK'd my use of Signed-off-by.

Florian has done a review of tests.

Torvald, Rik and myself have reviewed and tested the fix.

Rik restated that the current fix I have here fixes his test case.

I plan to do a "quick" b-m-g run to look for issues and then push
this fix as my last fix for 2.29.

> From 0768c51e2930f922071b4b77f96bb15d1ddae004 Mon Sep 17 00:00:00 2001
> From: Carlos O'Donell <carlos@redhat.com>
> Date: Mon, 21 Jan 2019 22:50:12 -0500
> Subject: [PATCH] nptl: Fix pthread_rwlock_try*lock stalls (Bug 23844)
> 
> For a full analysis of both the pthread_rwlock_tryrdlock() stall
> and the pthread_rwlock_trywrlock() stall see:
> https://sourceware.org/bugzilla/show_bug.cgi?id=23844#c14
> 
> In the pthread_rwlock_trydlock() function we fail to inspect for
> PTHREAD_RWLOCK_FUTEX_USED in __wrphase_futex and wake the waiting
> readers.
> 
> In the pthread_rwlock_trywrlock() function we write 1 to
> __wrphase_futex and loose the setting of the PTHREAD_RWLOCK_FUTEX_USED
> bit, again failing to wake waiting readers during unlock.
> 
> The fix in the case of pthread_rwlock_trydlock() is to check for
> PTHREAD_RWLOCK_FUTEX_USED and wake the readers.
> 
> The fix in the case of pthread_rwlock_trywrlock() is to only write
> 1 to __wrphase_futex if we installed the write phase, since all other
> readers would be spinning waiting for this step.
> 
> We add two new tests, one exercises the stall for
> pthread_rwlock_trywrlock() which is easy to exercise, and one exercises
> the stall for pthread_rwlock_trydlock() which is harder to exercise.
> 
> The pthread_rwlock_trywrlock() test fails consistently without the fix,
> and passes after. The pthread_rwlock_tryrdlock() test fails roughly
> 5-10% of the time without the fix, and passes all the time after.
> 
> Signed-off-by: Carlos O'Donell <carlos@redhat.com>
> Signed-off-by: Torvald Riegel <triegel@redhat.com>
> Signed-off-by: Rik Prohaska <prohaska7@gmail.com>


-- 
Cheers,
Carlos.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]