andl $(ROBUST_BIT|PI_BIT), %eax
cmpl $PI_BIT, %eax
jne 40f
-
+
movl $(FUTEX_WAIT_REQUEUE_PI|FUTEX_PRIVATE_FLAG), %ecx
/* The following only works like this because we only support
two clocks, represented using a single bit. */
/* XXX Need to implement using sete instead of a jump. */
jne 42f
orl $FUTEX_CLOCK_REALTIME, %ecx
-
+
/* Requeue-PI uses absolute timeout */
42: leal (%ebp), %esi
movl 28(%esp), %edx
cmpl $-ENOSYS, %eax
jne 41f
xorl %ecx, %ecx
-
+
40: subl $1, %ecx
#ifdef __ASSUME_PRIVATE_FUTEX
andl $FUTEX_PRIVATE_FLAG, %ecx
/* Reset the pi-requeued flag. */
8: movl $0, 16(%esp)
movl cond_futex(%ebx), %ebp
-
+
/* Unlock. */
LOCK
#if cond_lock == 0
andl $(ROBUST_BIT|PI_BIT), %eax
cmpl $PI_BIT, %eax
jne 18f
-
+
movl $(FUTEX_WAIT_REQUEUE_PI|FUTEX_PRIVATE_FLAG), %ecx
movl %ebp, %edx
xorl %esi, %esi
cmpl $-ENOSYS, %eax
jne 19f
xorl %ecx, %ecx
-
+
18: subl $1, %ecx
#ifdef __ASSUME_PRIVATE_FUTEX
andl $FUTEX_PRIVATE_FLAG, %ecx