Hi, > > if (fence) > > virtio_gpu_fence_emit(vgdev, hdr, fence); > > + if (vbuf->objs) { > > + virtio_gpu_array_add_fence(vbuf->objs, &fence->f); > > + virtio_gpu_array_unlock_resv(vbuf->objs); > > + } > This is with the spinlock held. Maybe we should move the > virtio_gpu_array_unlock_resv call out of the critical section. That would bring back the race ... > I am actually more concerned about virtio_gpu_array_add_fence, but it > is also harder to move. Should we add a kref to the object array? Yep, refcounting would be the other way to fix the race. > This bothers me because I recently ran into a CPU-bound game with very > bad lock contention here. Hmm. Any clue where this comes from? Multiple threads competing for virtio buffers I guess? Maybe we should have larger virtqueues? cheers, Gerd _______________________________________________ Virtualization mailing list Virtualization@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linuxfoundation.org/mailman/listinfo/virtualization