On Thu, May 18, 2017 at 08:46:17AM +0200, Peter Zijlstra wrote: > On Wed, May 17, 2017 at 07:50:31PM +0200, Florian Weimer wrote: > > On 05/17/2017 07:36 PM, Markus Trippelsdorf wrote: > > > Since: > > > commit cfafcd117da0216520568c195cb2f6cd1980c4bb > > > Author: Peter Zijlstra <pet...@infradead.org> > > > Date: Wed Mar 22 11:35:58 2017 +0100 > > > > > > futex: Rework futex_lock_pi() to use rt_mutex_*_proxy_lock() > > > > > > glibc's nptl/tst-robustpi8 testcase fails: > > > > > > glibc-build % ./nptl/tst-robustpi8 > > > tst-robustpi8: ../nptl/pthread_mutex_lock.c:424: > > > __pthread_mutex_lock_full: Assertion `INTERNAL_SYSCALL_ERRNO (e, __err) > > > != ESRCH || !robust' failed. > > > > > > pthread_mutex_lock.c: > > > 415 if (INTERNAL_SYSCALL_ERROR_P (e, __err) > > > 416 && (INTERNAL_SYSCALL_ERRNO (e, __err) == ESRCH > > > 417 || INTERNAL_SYSCALL_ERRNO (e, __err) == EDEADLK)) > > > 418 { > > > 419 assert (INTERNAL_SYSCALL_ERRNO (e, __err) != EDEADLK > > > 420 || (kind != PTHREAD_MUTEX_ERRORCHECK_NP > > > 421 && kind != PTHREAD_MUTEX_RECURSIVE_NP)); > > > 422 /* ESRCH can happen only for non-robust PI mutexes > > > where > > > 423 the owner of the lock died. */ > > > 424 assert (INTERNAL_SYSCALL_ERRNO (e, __err) != ESRCH || > > > !robust); > > > > > > During bisection the commit above hangs the machine when I run the > > > testcase. > > > > > > See: https://sourceware.org/bugzilla/show_bug.cgi?id=21487 > > > > Markus, could you confirm that it is chocking on the EAGAIN failure? Or > > is it something else? > > > > What is userspace supposed to do with the error code? > > IIRC that -EAGAIN should not get to userspace. The kernel should retry > the lock operation. I'll go stare at it.
So commit: bebe5b514345 ("futex: Futex_unlock_pi() determinism") put a WARN_ON_ONCE() on that -EAGAIN condition, and since that doesn't appear to be triggering, I suspect something else is buggered.