Commit 9ff4cfab authored by Rusty Russell's avatar Rusty Russell

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: default avatarRusty Russell <rusty@rustcorp.com.au>
Acked-by: default avatarAmit Shah <amit.shah@redhat.com>
parent 162a689a
...@@ -416,20 +416,16 @@ static ssize_t send_buf(struct port *port, void *in_buf, size_t in_count) ...@@ -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;
} }
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment