Okay I've taken Chris's suggestions to heart and reworked things around a sem_file to see how they might look. This means the drm_syncobj are currently only useful for semaphores, the flags field could be used in future to use it for other things, and we can reintroduce some of the API then if needed. This refactors sync_file first to add some basic rcu wrappers about the fence pointer, as this point never updates this should all be fine unlocked. It then creates the sem_file with a mutex, and uses that to track the semaphores with reduced fops and the replace and get APIs. Then it reworks the drm stuff on top, and fixes amdgpu bug with old_fence. Let's see if anyone prefers one approach over the other. Dave.