Bug 100077 - libdrm atomic_add_unless() may reverse return value meaning
Summary: libdrm atomic_add_unless() may reverse return value meaning
Alias: None
Product: DRI
Classification: Unclassified
Component: libdrm (show other bugs)
Version: unspecified
Hardware: x86-64 (AMD64) BSD (Others)
: medium normal
Assignee: Default DRI bug account
QA Contact:
Depends on:
Reported: 2017-03-06 08:41 UTC by David Shao
Modified: 2019-09-24 17:09 UTC (History)
0 users

See Also:
i915 platform:
i915 features:


Description David Shao 2017-03-06 08:41:32 UTC
atomic_add_unless() in libdrm xf86atomic.h may reverse the meaning
of its return value.

Linux kernel documentation seems to indicate something like:
"Returns non-zero if @v was not @u, and zero otherwise."

A simple inverting the meaning of libdrm's return value
allowed glxgears to properly function for a hacked version
of pkgsrc on DragonFly 4.7-DEVELOPMENT on an Intel IvyBridge
integrated graphics machine.  glxgears was already properly
functioning on the same machine for NetBSD current, NetBSD
using its own atomic operations declared in its sys/atomic.h

A one line (character) fix is of the form:

--- xf86atomic.h.orig	2015-09-22 04:34:51.000000000 +0000
+++ xf86atomic.h
@@ -111,7 +111,7 @@ static inline int atomic_add_unless(atom
 	c = atomic_read(v);
 	while (c != unless && (old = atomic_cmpxchg(v, c, c + add)) != c)
 		c = old;
-	return c == unless;
+	return c != unless;
Comment 1 GitLab Migration User 2019-09-24 17:09:10 UTC
-- GitLab Migration Automatic Message --

This bug has been migrated to freedesktop.org's GitLab instance and has been closed from further activity.

You can subscribe and participate further through the new bug through this link to our GitLab instance: https://gitlab.freedesktop.org/mesa/drm/issues/17.

Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.