--- x/drivers/gpu/drm/virtio/virtgpu_gem.c +++ y/drivers/gpu/drm/virtio/virtgpu_gem.c @@ -252,10 +252,21 @@ void virtio_gpu_array_add_fence(struct v struct dma_fence *fence) { int i; + int ret; + + if (objs->nents == 1) { + ret = dma_resv_lock_interruptible(objs->objs[0]->resv, NULL); + } else { + ret = drm_gem_lock_reservations(objs->objs, objs->nents, &objs->ticket); + } + if (ret) + return; for (i = 0; i < objs->nents; i++) dma_resv_add_fence(objs->objs[i]->resv, fence, DMA_RESV_USAGE_WRITE); + + virtio_gpu_array_unlock_resv(objs); } void virtio_gpu_array_put_free(struct virtio_gpu_object_array *objs)