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

Commit 2855b335 authored by Michael S. Tsirkin's avatar Michael S. Tsirkin
Browse files

virtio_console: don't tie bufs to a vq



an allocated buffer doesn't need to be tied to a vq -
only vq->vdev is ever used. Pass the function the
just what it needs - the vdev.

Cc: stable@vger.kernel.org
Signed-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
parent b4000032
Loading
Loading
Loading
Loading
+7 −7
Original line number Diff line number Diff line
@@ -422,7 +422,7 @@ static void reclaim_dma_bufs(void)
	}
}

static struct port_buffer *alloc_buf(struct virtqueue *vq, size_t buf_size,
static struct port_buffer *alloc_buf(struct virtio_device *vdev, size_t buf_size,
				     int pages)
{
	struct port_buffer *buf;
@@ -445,16 +445,16 @@ static struct port_buffer *alloc_buf(struct virtqueue *vq, size_t buf_size,
		return buf;
	}

	if (is_rproc_serial(vq->vdev)) {
	if (is_rproc_serial(vdev)) {
		/*
		 * Allocate DMA memory from ancestor. When a virtio
		 * device is created by remoteproc, the DMA memory is
		 * associated with the grandparent device:
		 * vdev => rproc => platform-dev.
		 */
		if (!vq->vdev->dev.parent || !vq->vdev->dev.parent->parent)
		if (!vdev->dev.parent || !vdev->dev.parent->parent)
			goto free_buf;
		buf->dev = vq->vdev->dev.parent->parent;
		buf->dev = vdev->dev.parent->parent;

		/* Increase device refcnt to avoid freeing it */
		get_device(buf->dev);
@@ -838,7 +838,7 @@ static ssize_t port_fops_write(struct file *filp, const char __user *ubuf,

	count = min((size_t)(32 * 1024), count);

	buf = alloc_buf(port->out_vq, count, 0);
	buf = alloc_buf(port->portdev->vdev, count, 0);
	if (!buf)
		return -ENOMEM;

@@ -957,7 +957,7 @@ static ssize_t port_fops_splice_write(struct pipe_inode_info *pipe,
	if (ret < 0)
		goto error_out;

	buf = alloc_buf(port->out_vq, 0, pipe->nrbufs);
	buf = alloc_buf(port->portdev->vdev, 0, pipe->nrbufs);
	if (!buf) {
		ret = -ENOMEM;
		goto error_out;
@@ -1374,7 +1374,7 @@ static unsigned int fill_queue(struct virtqueue *vq, spinlock_t *lock)

	nr_added_bufs = 0;
	do {
		buf = alloc_buf(vq, PAGE_SIZE, 0);
		buf = alloc_buf(vq->vdev, PAGE_SIZE, 0);
		if (!buf)
			break;