Fix: dynamic fallback to compat futex on sys_futex ENOSYS
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Fri, 11 Sep 2015 14:33:43 +0000 (10:33 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Sun, 13 Sep 2015 16:36:36 +0000 (12:36 -0400)
commit42dfe454abcd206bb2005261c6b79cb3d4f9ce29
treeeec81aee27d5ebebd23562413a1727a0c9b1ca10
parent6ef5ddc9b4e136e250f3c5f292f847e6849e6200
Fix: dynamic fallback to compat futex on sys_futex ENOSYS

Some MIPS processors (e.g. Cavium Octeon II) dynamically check if the
CPU supports ll/sc within sys_futex, and return a ENOSYS errno if they
don't, even though the architecture implements sys_futex.

Handle this situation by always building the sys_futex compatibility
layer, and fall-back on it if sys_futex return a ENOSYS errno. This is
a tiny compat layer which adds very little space overhead.

This adds an unlikely branch on return from sys_futex, which should
not be an issue performance-wise (we've already taken a system call).

Since this is a fall-back mode, don't try to be clever, and don't cache
the result, so that the common cases (architectures with a properly
working sys_futex) don't get two conditional branches, just one.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Acked-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
CC: Michael Jeanson <mjeanson@efficios.com>
CC: Jon Bernard <jbernard@debian.org>
Makefile.am
urcu/futex.h
This page took 0.033557 seconds and 4 git commands to generate.