Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+3 −7
Original line number Original line Diff line number Diff line
@@ -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;
}
}


/*
/*