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

Commit 2d24cdaa authored by Amit Shah's avatar Amit Shah Committed by Rusty Russell
Browse files

virtio: console: make discard_port_data() use get_inbuf()



discard_port_data() used virtqueue_get_buf() directly instead of using
get_inbuf().  Fix this, so that we get accounting for all received
bytes.  This also simplifies the code a lot.

Signed-off-by: default avatarAmit Shah <amit.shah@redhat.com>
Signed-off-by: default avatarRusty Russell <rusty@rustcorp.com.au>
parent ce072a0c
Loading
Loading
Loading
Loading
+5 −10
Original line number Diff line number Diff line
@@ -386,28 +386,23 @@ static int add_inbuf(struct virtqueue *vq, struct port_buffer *buf)
static void discard_port_data(struct port *port)
{
	struct port_buffer *buf;
	struct virtqueue *vq;
	unsigned int len, err;
	unsigned int err;

	if (!port->portdev) {
		/* Device has been unplugged.  vqs are already gone. */
		return;
	}
	vq = port->in_vq;
	if (port->inbuf)
		buf = port->inbuf;
	else
		buf = virtqueue_get_buf(vq, &len);
	buf = get_inbuf(port);

	err = 0;
	while (buf) {
		if (add_inbuf(vq, buf) < 0) {
		if (add_inbuf(port->in_vq, buf) < 0) {
			err++;
			free_buf(buf);
		}
		buf = virtqueue_get_buf(vq, &len);
	}
		port->inbuf = NULL;
		buf = get_inbuf(port);
	}
	if (err)
		dev_warn(port->dev, "Errors adding %d buffers back to vq\n",
			 err);