Commit d2fd8dd9 authored by Dariusz Stojaczyk's avatar Dariusz Stojaczyk Committed by Jim Harris
Browse files

rte_virtio/user: operate on virtio_dev structs where possible



We currently pass virtio_user_dev as
an argument to various function in belief
they will access the virtio_dev via
virtio_user_dev->vdev field. However,
this field is about to be removed soon.

This patch is a mid-step towards a bigger
change. See the next patch for details.

Change-Id: Ie684aa1614d9777d79d350bbfda79effe2a2d5f6
Signed-off-by: default avatarDariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-on: https://review.gerrithub.io/385422


Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Tested-by: default avatarSPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: default avatarDaniel Verkamp <daniel.verkamp@intel.com>
parent bcaaae7e
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -70,10 +70,10 @@ virtio_user_set_status(struct virtio_dev *vdev, uint8_t status)
	struct virtio_user_dev *dev = virtio_dev_get_user_dev(vdev);

	if (status & VIRTIO_CONFIG_S_DRIVER_OK) {
		virtio_user_start_device(dev);
		virtio_user_start_device(vdev);
	} else if (status == VIRTIO_CONFIG_S_RESET &&
		   (dev->status & VIRTIO_CONFIG_S_DRIVER_OK)) {
		virtio_user_stop_device(dev);
		virtio_user_stop_device(vdev);
	}
	dev->status = status;
}
+23 −14
Original line number Diff line number Diff line
@@ -40,9 +40,14 @@
#include "spdk/string.h"
#include "spdk/util.h"

#define virtio_dev_get_user_dev(dev) \
	((struct virtio_user_dev *)((uintptr_t)(dev) - offsetof(struct virtio_user_dev, vdev)))

static int
virtio_user_create_queue(struct virtio_user_dev *dev, uint32_t queue_sel)
virtio_user_create_queue(struct virtio_dev *vdev, uint32_t queue_sel)
{
	struct virtio_user_dev *dev = virtio_dev_get_user_dev(vdev);

	/* Of all per virtqueue MSGs, make sure VHOST_SET_VRING_CALL come
	 * firstly because vhost depends on this msg to allocate virtqueue
	 * pair.
@@ -57,8 +62,9 @@ virtio_user_create_queue(struct virtio_user_dev *dev, uint32_t queue_sel)
}

static int
virtio_user_kick_queue(struct virtio_user_dev *dev, uint32_t queue_sel)
virtio_user_kick_queue(struct virtio_dev *vdev, uint32_t queue_sel)
{
	struct virtio_user_dev *dev = virtio_dev_get_user_dev(vdev);
	struct vhost_vring_file file;
	struct vhost_vring_state state;
	struct vring *vring = &dev->vrings[queue_sel];
@@ -93,8 +99,9 @@ virtio_user_kick_queue(struct virtio_user_dev *dev, uint32_t queue_sel)
}

static int
virtio_user_stop_queue(struct virtio_user_dev *dev, uint32_t queue_sel)
virtio_user_stop_queue(struct virtio_dev *vdev, uint32_t queue_sel)
{
	struct virtio_user_dev *dev = virtio_dev_get_user_dev(vdev);
	struct vhost_vring_state state;

	state.index = queue_sel;
@@ -105,13 +112,13 @@ virtio_user_stop_queue(struct virtio_user_dev *dev, uint32_t queue_sel)
}

static int
virtio_user_queue_setup(struct virtio_user_dev *dev,
			int (*fn)(struct virtio_user_dev *, uint32_t))
virtio_user_queue_setup(struct virtio_dev *vdev,
			int (*fn)(struct virtio_dev *, uint32_t))
{
	uint32_t i;

	for (i = 0; i < dev->vdev.max_queues; ++i) {
		if (fn(dev, i) < 0) {
	for (i = 0; i < vdev->max_queues; ++i) {
		if (fn(vdev, i) < 0) {
			SPDK_ERRLOG("setup tx vq fails: %"PRIu32".\n", i);
			return -1;
		}
@@ -121,12 +128,13 @@ virtio_user_queue_setup(struct virtio_user_dev *dev,
}

int
virtio_user_start_device(struct virtio_user_dev *dev)
virtio_user_start_device(struct virtio_dev *vdev)
{
	struct virtio_user_dev *dev = virtio_dev_get_user_dev(vdev);
	int ret;

	/* tell vhost to create queues */
	if (virtio_user_queue_setup(dev, virtio_user_create_queue) < 0)
	if (virtio_user_queue_setup(vdev, virtio_user_create_queue) < 0)
		return -1;

	/* share memory regions */
@@ -135,20 +143,21 @@ virtio_user_start_device(struct virtio_user_dev *dev)
		return -1;

	/* kick queues */
	if (virtio_user_queue_setup(dev, virtio_user_kick_queue) < 0)
	if (virtio_user_queue_setup(vdev, virtio_user_kick_queue) < 0)
		return -1;

	return 0;
}

int virtio_user_stop_device(struct virtio_user_dev *dev)
int virtio_user_stop_device(struct virtio_dev *vdev)
{
	return virtio_user_queue_setup(dev, virtio_user_stop_queue);
	return virtio_user_queue_setup(vdev, virtio_user_stop_queue);
}

static int
virtio_user_dev_setup(struct virtio_user_dev *dev)
virtio_user_dev_setup(struct virtio_dev *vdev)
{
	struct virtio_user_dev *dev = virtio_dev_get_user_dev(vdev);
	uint16_t i;

	dev->vhostfd = -1;
@@ -205,7 +214,7 @@ virtio_user_dev_init(const char *name, const char *path, uint16_t requested_queu
	snprintf(dev->path, PATH_MAX, "%s", path);
	dev->queue_size = queue_size;

	if (virtio_user_dev_setup(dev) < 0) {
	if (virtio_user_dev_setup(vdev) < 0) {
		SPDK_ERRLOG("backend set up fails\n");
		goto err;
	}
+2 −2
Original line number Diff line number Diff line
@@ -61,8 +61,8 @@ struct virtio_user_dev {
	struct virtio_user_backend_ops *ops;
};

int virtio_user_start_device(struct virtio_user_dev *dev);
int virtio_user_stop_device(struct virtio_user_dev *dev);
int virtio_user_start_device(struct virtio_dev *vdev);
int virtio_user_stop_device(struct virtio_dev *vdev);

/**
 * Connect to a vhost-user device and create corresponding virtio_dev.