But then we'd need a different set of accessors for every different drm/v4l/etc driver, wouldn't we?
Not any more different than you need for this, you just have a new interface that you request a sw object from, then mmap that object, and underneath it knows who owns it in the kernel.
mmap just feels wrong in this API, which is a buffer sharing API not a buffer mapping API.
I guess if sharing a buffer between multiple drm devices, there is nothing stopping you from having some NOT_DMABUF_MMAPABLE flag you pass when the buffer is allocated, then you don't have to support dmabuf->mmap(), and instead mmap via device and use some sort of DRM_CPU_PREP/FINI ioctls for synchronization..
Or we could make a generic CPU accessor that we don't have to worry about.
Dave.