From 146061e9c6386b0a2b0cc43b5ebd3740ff10c4c5 Mon Sep 17 00:00:00 2001 From: Dariusz Stojaczyk Date: Mon, 4 Sep 2017 14:29:06 +0200 Subject: [PATCH] rte_virtio: don't negotiate features twice for virtio-user Moved negotiation to virtio_init_device. This patch also cleans up feature negotiation a bit. Change-Id: Ia67e8d694a5acebcbe37679a657d68d6c46979db Signed-off-by: Dariusz Stojaczyk Reviewed-on: https://review.gerrithub.io/377089 Tested-by: SPDK Automated Test System Reviewed-by: Tomasz Zawadzki Reviewed-by: Jim Harris --- lib/bdev/virtio/bdev_virtio.c | 2 +- lib/bdev/virtio/rte_virtio/virtio_dev.c | 4 +--- lib/bdev/virtio/rte_virtio/virtio_dev.h | 9 +++------ lib/bdev/virtio/rte_virtio/virtio_pci.c | 2 +- lib/bdev/virtio/rte_virtio/virtio_user.c | 2 +- lib/bdev/virtio/rte_virtio/virtio_user/virtio_user_dev.c | 7 ------- 6 files changed, 7 insertions(+), 19 deletions(-) diff --git a/lib/bdev/virtio/bdev_virtio.c b/lib/bdev/virtio/bdev_virtio.c index f8d1d7fe4..8350dd5dc 100644 --- a/lib/bdev/virtio/bdev_virtio.c +++ b/lib/bdev/virtio/bdev_virtio.c @@ -506,7 +506,7 @@ bdev_virtio_initialize(void) } /* TODO check rc, add virtio_dev_deinit() */ - virtio_init_device(vdev, VIRTIO_PMD_DEFAULT_GUEST_FEATURES); + virtio_init_device(vdev, VIRTIO_SCSI_DEV_SUPPORTED_FEATURES); virtio_dev_start(vdev); base->vdev = vdev; diff --git a/lib/bdev/virtio/rte_virtio/virtio_dev.c b/lib/bdev/virtio/rte_virtio/virtio_dev.c index dc249fffa..1b273db03 100644 --- a/lib/bdev/virtio/rte_virtio/virtio_dev.c +++ b/lib/bdev/virtio/rte_virtio/virtio_dev.c @@ -261,7 +261,7 @@ virtio_negotiate_features(struct virtio_dev *dev, uint64_t req_features) * Negotiate features: Subset of device feature bits are written back * guest feature bits. */ - dev->guest_features = req_features; + dev->req_guest_features = req_features; dev->guest_features = vtpci_negotiate_features(dev, host_features); PMD_INIT_LOG(DEBUG, "features after negotiate = %" PRIx64, dev->guest_features); @@ -280,8 +280,6 @@ virtio_negotiate_features(struct virtio_dev *dev, uint64_t req_features) } } - dev->req_guest_features = req_features; - return 0; } diff --git a/lib/bdev/virtio/rte_virtio/virtio_dev.h b/lib/bdev/virtio/rte_virtio/virtio_dev.h index c590c6500..217b12472 100644 --- a/lib/bdev/virtio/rte_virtio/virtio_dev.h +++ b/lib/bdev/virtio/rte_virtio/virtio_dev.h @@ -62,14 +62,11 @@ struct virtio_req { }; /* Features desired/implemented by this driver. */ -#define VIRTIO_PMD_DEFAULT_GUEST_FEATURES \ - (1u << VIRTIO_SCSI_F_INOUT | \ - 1ULL << VIRTIO_F_VERSION_1 | \ +#define VIRTIO_SCSI_DEV_SUPPORTED_FEATURES \ + (1ULL << VIRTIO_SCSI_F_INOUT | \ + 1ULL << VIRTIO_F_VERSION_1 | \ 1ULL << VIRTIO_F_IOMMU_PLATFORM) -#define VIRTIO_PMD_SUPPORTED_GUEST_FEATURES \ - (VIRTIO_PMD_DEFAULT_GUEST_FEATURES) - uint16_t virtio_recv_pkts(struct virtqueue *vq, struct virtio_req **reqs, uint16_t nb_pkts); diff --git a/lib/bdev/virtio/rte_virtio/virtio_pci.c b/lib/bdev/virtio/rte_virtio/virtio_pci.c index 285088157..fab668b10 100644 --- a/lib/bdev/virtio/rte_virtio/virtio_pci.c +++ b/lib/bdev/virtio/rte_virtio/virtio_pci.c @@ -530,7 +530,7 @@ vtpci_negotiate_features(struct virtio_dev *dev, uint64_t host_features) * Limit negotiated features to what the driver, virtqueue, and * host all support. */ - features = host_features & dev->guest_features; + features = host_features & dev->req_guest_features; VTPCI_OPS(dev)->set_features(dev, features); return features; diff --git a/lib/bdev/virtio/rte_virtio/virtio_user.c b/lib/bdev/virtio/rte_virtio/virtio_user.c index 08364f886..9861db57e 100644 --- a/lib/bdev/virtio/rte_virtio/virtio_user.c +++ b/lib/bdev/virtio/rte_virtio/virtio_user.c @@ -105,7 +105,7 @@ virtio_user_get_features(struct virtio_dev *vdev) struct virtio_user_dev *dev = virtio_dev_get_user_dev(vdev); /* unmask feature bits defined in vhost user protocol */ - return dev->device_features & VIRTIO_PMD_SUPPORTED_GUEST_FEATURES; + return dev->device_features; } static void diff --git a/lib/bdev/virtio/rte_virtio/virtio_user/virtio_user_dev.c b/lib/bdev/virtio/rte_virtio/virtio_user/virtio_user_dev.c index 7d3243692..aa6ec5568 100644 --- a/lib/bdev/virtio/rte_virtio/virtio_user/virtio_user_dev.c +++ b/lib/bdev/virtio/rte_virtio/virtio_user/virtio_user_dev.c @@ -228,11 +228,6 @@ virtio_user_dev_setup(struct virtio_user_dev *dev) return 0; } -/* Use below macro to filter features from vhost backend */ -#define VIRTIO_USER_SUPPORTED_FEATURES \ - (1ULL << VIRTIO_SCSI_F_INOUT | \ - 1ULL << VIRTIO_F_VERSION_1) - struct virtio_dev * virtio_user_dev_init(char *path, int queues, int queue_size) { @@ -277,8 +272,6 @@ virtio_user_dev_init(char *path, int queues, int queue_size) goto err; } - dev->device_features &= VIRTIO_USER_SUPPORTED_FEATURES; - return vdev; err: