> @@ -291,11 +291,9 @@ static int virtio_gpu_queue_ctrl_buffer_locked(struct
> virtio_gpu_device *vgdev,
> trace_virtio_gpu_cmd_queue(vq,
> (struct virtio_gpu_ctrl_hdr *)vbuf->buf);
>
> - virtqueue_kick(vq);
> + ret =
Replace virtqueue_kick by virtqueue_kick_prepare, which requires
serialization, and virtqueue_notify, which does not. Repurpose the
return values to indicate whether the vq should be notified.
This fixes a bad spinlock contention when the host is qemu. When
the guest calls virtqueue_notify, the
Replace virtqueue_kick by virtqueue_kick_prepare, which requires
serialization, and virtqueue_notify, which does not. Repurpose the
return values to indicate whether the vq should be notified.
This fixes a lock contention with qemu host. When the guest calls
vibad rtqueue_notify, the qemu vcpu