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: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com> Reviewed-on: https://review.gerrithub.io/385422 Reviewed-by: Jim Harris <james.r.harris@intel.com> Tested-by: SPDK Automated Test System <sys_sgsw@intel.com> Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
This commit is contained in:
parent
bcaaae7e8c
commit
d2fd8dd93c
@ -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);
|
struct virtio_user_dev *dev = virtio_dev_get_user_dev(vdev);
|
||||||
|
|
||||||
if (status & VIRTIO_CONFIG_S_DRIVER_OK) {
|
if (status & VIRTIO_CONFIG_S_DRIVER_OK) {
|
||||||
virtio_user_start_device(dev);
|
virtio_user_start_device(vdev);
|
||||||
} else if (status == VIRTIO_CONFIG_S_RESET &&
|
} else if (status == VIRTIO_CONFIG_S_RESET &&
|
||||||
(dev->status & VIRTIO_CONFIG_S_DRIVER_OK)) {
|
(dev->status & VIRTIO_CONFIG_S_DRIVER_OK)) {
|
||||||
virtio_user_stop_device(dev);
|
virtio_user_stop_device(vdev);
|
||||||
}
|
}
|
||||||
dev->status = status;
|
dev->status = status;
|
||||||
}
|
}
|
||||||
|
@ -40,9 +40,14 @@
|
|||||||
#include "spdk/string.h"
|
#include "spdk/string.h"
|
||||||
#include "spdk/util.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
|
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
|
/* Of all per virtqueue MSGs, make sure VHOST_SET_VRING_CALL come
|
||||||
* firstly because vhost depends on this msg to allocate virtqueue
|
* firstly because vhost depends on this msg to allocate virtqueue
|
||||||
* pair.
|
* pair.
|
||||||
@ -57,8 +62,9 @@ virtio_user_create_queue(struct virtio_user_dev *dev, uint32_t queue_sel)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
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_file file;
|
||||||
struct vhost_vring_state state;
|
struct vhost_vring_state state;
|
||||||
struct vring *vring = &dev->vrings[queue_sel];
|
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
|
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;
|
struct vhost_vring_state state;
|
||||||
|
|
||||||
state.index = queue_sel;
|
state.index = queue_sel;
|
||||||
@ -105,13 +112,13 @@ virtio_user_stop_queue(struct virtio_user_dev *dev, uint32_t queue_sel)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
virtio_user_queue_setup(struct virtio_user_dev *dev,
|
virtio_user_queue_setup(struct virtio_dev *vdev,
|
||||||
int (*fn)(struct virtio_user_dev *, uint32_t))
|
int (*fn)(struct virtio_dev *, uint32_t))
|
||||||
{
|
{
|
||||||
uint32_t i;
|
uint32_t i;
|
||||||
|
|
||||||
for (i = 0; i < dev->vdev.max_queues; ++i) {
|
for (i = 0; i < vdev->max_queues; ++i) {
|
||||||
if (fn(dev, i) < 0) {
|
if (fn(vdev, i) < 0) {
|
||||||
SPDK_ERRLOG("setup tx vq fails: %"PRIu32".\n", i);
|
SPDK_ERRLOG("setup tx vq fails: %"PRIu32".\n", i);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -121,12 +128,13 @@ virtio_user_queue_setup(struct virtio_user_dev *dev,
|
|||||||
}
|
}
|
||||||
|
|
||||||
int
|
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;
|
int ret;
|
||||||
|
|
||||||
/* tell vhost to create queues */
|
/* 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;
|
return -1;
|
||||||
|
|
||||||
/* share memory regions */
|
/* share memory regions */
|
||||||
@ -135,20 +143,21 @@ virtio_user_start_device(struct virtio_user_dev *dev)
|
|||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
/* kick queues */
|
/* 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 -1;
|
||||||
|
|
||||||
return 0;
|
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
|
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;
|
uint16_t i;
|
||||||
|
|
||||||
dev->vhostfd = -1;
|
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);
|
snprintf(dev->path, PATH_MAX, "%s", path);
|
||||||
dev->queue_size = queue_size;
|
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");
|
SPDK_ERRLOG("backend set up fails\n");
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
@ -61,8 +61,8 @@ struct virtio_user_dev {
|
|||||||
struct virtio_user_backend_ops *ops;
|
struct virtio_user_backend_ops *ops;
|
||||||
};
|
};
|
||||||
|
|
||||||
int virtio_user_start_device(struct virtio_user_dev *dev);
|
int virtio_user_start_device(struct virtio_dev *vdev);
|
||||||
int virtio_user_stop_device(struct virtio_user_dev *dev);
|
int virtio_user_stop_device(struct virtio_dev *vdev);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Connect to a vhost-user device and create corresponding virtio_dev.
|
* Connect to a vhost-user device and create corresponding virtio_dev.
|
||||||
|
Loading…
Reference in New Issue
Block a user