On 03.11.2017 14:23, Nicolai Hähnle wrote:
What's the status of this?
On 16.10.2017 14:36, Emil Velikov wrote:
On 16 October 2017 at 08:06, Timothy Arceri <tarc...@itsqueeze.com>
wrote:
While modern pthread mutexes are very fast, they still incur a call
to an
external DSO and overhead of the generality and features of pthread
mutexes.
Most mutexes in mesa only needs lock/unlock, and the idea here is
that we can
inline the atomic operation and make the fast case just two intructions.
Mutexes are subtle and finicky to implement, so we carefully copy the
implementation from Ulrich Dreppers well-written and well-reviewed
paper:
"Futexes Are Tricky"
http://www.akkadia.org/drepper/futex.pdf
We implement "mutex3", which gives us a mutex that has no syscalls on
uncontended lock or unlock. Further, the uncontended case boils down
to a
cmpxchg and an untaken branch and the uncontended unlock is just a
locked decr
and an untaken branch. We use __builtin_expect() to indicate that
contention
is unlikely so that gcc will put the contention code out of the main
code
flow.
Worth using likely/unlikely macros from src/util/macros.h?
configure.ac | 3 +
src/intel/vulkan/anv_allocator.c | 24 +-----
src/util/Makefile.sources | 1 +
src/util/meson.build | 1 +
src/util/simple_mtx.h | 153
+++++++++++++++++++++++++++++++++++++++
5 files changed, 159 insertions(+), 23 deletions(-)
create mode 100644 src/util/simple_mtx.h
diff --git a/configure.ac b/configure.ac
index 62d33a1941c..c113e714638 100644
--- a/configure.ac
+++ b/configure.ac
@@ -894,6 +894,9 @@ if test "x$pthread_stubs_possible" = xyes; then
PKG_CHECK_MODULES(PTHREADSTUBS, pthread-stubs >= 0.4)
fi
+dnl Check for futex for fast inline simple_mtx_t.
+AC_CHECK_HEADER([linux/futex.h], [DEFINES="$DEFINES -DHAVE_FUTEX"])
+
Dylan you might want a similar check for Meson?
+static inline int futex_wake(uint32_t *addr, int count) {
+ return sys_futex(addr, FUTEX_WAKE, count, NULL, NULL, 0);
+}
+
+static inline int futex_wait(uint32_t *addr, int32_t value) {
+ return sys_futex(addr, FUTEX_WAIT, value, NULL, NULL, 0);
+}
Coding style: please keep { on the next line.
For what it's worth, with this fixed and possible Meson build issues
addressed, this patch as well as v2 of patches 2 & 3 are
Reviewed-by: Nicolai Hähnle <nicolai.haeh...@amd.com>
-Emil
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev
--
Lerne, wie die Welt wirklich ist,
Aber vergiss niemals, wie sie sein sollte.
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev