virtio: console makes incorrect assumption about virtio API
The get_buf() API sets the second arg to the number of bytes *written* by the other side; in this case it should be zero as these are output buffers. lguest gets this right (obviously kvm's console doesn't), resulting in continual buildup of console writes. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> Acked-by: Amit Shah <amit.shah@redhat.com>
This commit is contained in:
@@ -416,20 +416,16 @@ static ssize_t send_buf(struct port *port, void *in_buf, size_t in_count)
|
|||||||
out_vq->vq_ops->kick(out_vq);
|
out_vq->vq_ops->kick(out_vq);
|
||||||
|
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
len = 0;
|
in_count = 0;
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/* Wait till the host acknowledges it pushed out the data we sent. */
|
||||||
* Wait till the host acknowledges it pushed out the data we
|
|
||||||
* sent. Also ensure we return to userspace the number of
|
|
||||||
* bytes that were successfully consumed by the host.
|
|
||||||
*/
|
|
||||||
while (!out_vq->vq_ops->get_buf(out_vq, &len))
|
while (!out_vq->vq_ops->get_buf(out_vq, &len))
|
||||||
cpu_relax();
|
cpu_relax();
|
||||||
fail:
|
fail:
|
||||||
/* We're expected to return the amount of data we wrote */
|
/* We're expected to return the amount of data we wrote */
|
||||||
return len;
|
return in_count;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Reference in New Issue
Block a user