[ANNOUNCE] libxshmfence 1.0
Mark Kettenis
mark.kettenis at xs4all.nl
Thu Nov 7 00:24:26 CET 2013
> Date: Wed, 06 Nov 2013 13:09:26 -0800
> From: Alan Coopersmith <alan.coopersmith at oracle.com>
>
> On 11/ 2/13 12:39 AM, Keith Packard wrote:
> > Alan Coopersmith <alan.coopersmith at oracle.com> writes:
> >
> >> What about platforms which don't have <linux/futex.h> ?
> >
> > I looked into alternate synchronization mechanisms; I couldn't figure
> > out how to use standard pthread APIs to provide the desired semantics.
> >
> > Here's the detailed write up I did that describes the SyncFence
> > semantics and how those map directly to Linux Futexes:
> >
> > http://keithp.com/blogs/Shared_Memory_Fences/
> >
> > If you can figure out how to build this with pthread mutexes and/or
> > semaphores, then we could create a version of xshmfence that worked
> > using regular pthread functions. As I understand it, pthread
> > synchronization primitives are supposed to work across processes that
> > share memory, even if they use different virtual addresses to reference
> > the same object.
>
> I've checked with the Solaris kernel & libc folks, and they confirm there's
> no problem using the POSIX API's on Solaris - ours are correctly implemented
> using uint{16,32,64}_t types so they are the same on 32-bit & 64-bit ABI's,
> and they're documented & supported as being compatible across the two.
>
> Specifically they said:
>
> "On Solaris, mutexes in shared memory, shared among 32-bit and 64-bit
> processes, work correctly. All of the other locking thingies work
> correctly too:
>
> condvars
> rwlocks
> semaphores
> barriers
> message queues"
>
> And one of our old timers pointed out:
>
> "Note that this is exactly the same problem that Solaris (SunOS first)
> solved with the winlock driver.
>
>
> https://hg.java.net/hg/solaris~on-src/file/tip/usr/src/uts/common/io/winlockio.c#l27
>
> This was an real factor in the excellent performance of sundgadoom 8-)."
>
> (Honestly, I vaguely knew we had winlockio, but not what it was for. Our Xorg
> doesn't use it, only our old Xsun implementation with its SUN-DGA extension.)
>
> So between this & the comments from the BSD guys, it seems like POSIX API's
> should be the default implementation for all platforms except Linux multi-lib
> platforms with incompatible implementations, where you have to use futexes
> instead to work around platform bugs.
As I said, currently OpenBSD doesn't implement the process-shared
stuff, but I'm already looking into implementing the necessary
functionality. So I'd say that the POSIX API's are indeed the way to
go.
More information about the xorg-devel
mailing list