Okay I've gone around the sun with these a few times, and pretty much implemented what I said last week. This is pretty much a complete revamp. 1. sync objects are self contained drm objects, they have a file reference so can be passed between processes. 2. Added a sync object wait interface modelled on the vulkan fence waiting API. 3. sync_file interaction is explicitly different than opaque fd passing, you import a sync file state into an existing syncobj, or create a new sync_file from an existing syncobj. This means no touching the sync file code at all. \o/ I haven't used rcu anywhere here, I've used xchg to swap fence pointers in the hope that's safe. If this does need rcu'ing I suggest we do it in a follow on patch to minimise the review pain. Dave.