From: Adrian Moreno <amorenoz@redhat.com> To: dev@dpdk.org, chenbo.xia@intel.com, xiaolong.ye@intel.com, shahafs@mellanox.com, matan@mellanox.com, maxime.coquelin@redhat.com, xiao.w.wang@intel.com, viacheslavo@mellanox.com Cc: jasowang@redhat.com, lulu@redhat.com Subject: [dpdk-dev] [PATCH v3 3/8] vhost: make some vDPA callbacks mandatory Date: Mon, 6 Jul 2020 13:24:47 +0200 Message-ID: <20200706112452.1474533-4-amorenoz@redhat.com> (raw) In-Reply-To: <20200706112452.1474533-1-amorenoz@redhat.com> From: Maxime Coquelin <maxime.coquelin@redhat.com> Some of the vDPA callbacks have to be implemented for vDPA to work properly. This patch marks them as mandatory in the API doc and simplify code calling these ops with removing unnecessary checks that are now done at registration time. Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com> --- lib/librte_vhost/rte_vdpa_dev.h | 14 ++++++++------ lib/librte_vhost/socket.c | 6 +++--- lib/librte_vhost/vdpa.c | 10 ++++++++++ lib/librte_vhost/vhost.c | 2 +- lib/librte_vhost/vhost_user.c | 6 ++---- 5 files changed, 24 insertions(+), 14 deletions(-) diff --git a/lib/librte_vhost/rte_vdpa_dev.h b/lib/librte_vhost/rte_vdpa_dev.h index 65557cb05..89444c2ea 100644 --- a/lib/librte_vhost/rte_vdpa_dev.h +++ b/lib/librte_vhost/rte_vdpa_dev.h @@ -15,24 +15,26 @@ * vdpa device operations */ struct rte_vdpa_dev_ops { - /** Get capabilities of this device */ + /** Get capabilities of this device (Mandatory) */ int (*get_queue_num)(struct rte_vdpa_device *dev, uint32_t *queue_num); - /** Get supported features of this device */ + /** Get supported features of this device (Mandatory) */ int (*get_features)(struct rte_vdpa_device *dev, uint64_t *features); - /** Get supported protocol features of this device */ + /** Get supported protocol features of this device (Mandatory) */ int (*get_protocol_features)(struct rte_vdpa_device *dev, uint64_t *protocol_features); - /** Driver configure/close the device */ + /** Driver configure the device (Mandatory) */ int (*dev_conf)(int vid); + + /** Driver close the device (Mandatory) */ int (*dev_close)(int vid); - /** Enable/disable this vring */ + /** Enable/disable this vring (Mandatory) */ int (*set_vring_state)(int vid, int vring, int state); - /** Set features when changed */ + /** Set features when changed (Mandatory) */ int (*set_features)(int vid); /** Destination operations when migration done */ diff --git a/lib/librte_vhost/socket.c b/lib/librte_vhost/socket.c index 49267cebf..047d9395d 100644 --- a/lib/librte_vhost/socket.c +++ b/lib/librte_vhost/socket.c @@ -701,7 +701,7 @@ rte_vhost_driver_get_features(const char *path, uint64_t *features) } vdpa_dev = vsocket->vdpa_dev; - if (!vdpa_dev || !vdpa_dev->ops->get_features) { + if (!vdpa_dev) { *features = vsocket->features; goto unlock_exit; } @@ -754,7 +754,7 @@ rte_vhost_driver_get_protocol_features(const char *path, } vdpa_dev = vsocket->vdpa_dev; - if (!vdpa_dev || !vdpa_dev->ops->get_protocol_features) { + if (!vdpa_dev) { *protocol_features = vsocket->protocol_features; goto unlock_exit; } @@ -794,7 +794,7 @@ rte_vhost_driver_get_queue_num(const char *path, uint32_t *queue_num) } vdpa_dev = vsocket->vdpa_dev; - if (!vdpa_dev || !vdpa_dev->ops->get_queue_num) { + if (!vdpa_dev) { *queue_num = VHOST_MAX_QUEUE_PAIRS; goto unlock_exit; } diff --git a/lib/librte_vhost/vdpa.c b/lib/librte_vhost/vdpa.c index ef21ca2a1..ae6fdd24e 100644 --- a/lib/librte_vhost/vdpa.c +++ b/lib/librte_vhost/vdpa.c @@ -77,6 +77,16 @@ rte_vdpa_register_device(struct rte_device *rte_dev, if (ops == NULL) return NULL; + /* Check mandatory ops are implemented */ + if (!ops->get_queue_num || !ops->get_features || + !ops->get_protocol_features || !ops->dev_conf || + !ops->dev_close || !ops->set_vring_state || + !ops->set_features) { + VHOST_LOG_CONFIG(ERR, + "Some mandatory vDPA ops aren't implemented\n"); + return NULL; + } + rte_spinlock_lock(&vdpa_device_list_lock); /* Check the device hasn't been register already */ dev = __vdpa_find_device_by_name(rte_dev->name); diff --git a/lib/librte_vhost/vhost.c b/lib/librte_vhost/vhost.c index aa1424261..da461e843 100644 --- a/lib/librte_vhost/vhost.c +++ b/lib/librte_vhost/vhost.c @@ -646,7 +646,7 @@ vhost_destroy_device_notify(struct virtio_net *dev) if (dev->flags & VIRTIO_DEV_RUNNING) { vdpa_dev = dev->vdpa_dev; - if (vdpa_dev && vdpa_dev->ops->dev_close) + if (vdpa_dev) vdpa_dev->ops->dev_close(dev->vid); dev->flags &= ~VIRTIO_DEV_RUNNING; dev->notify_ops->destroy_device(dev->vid); diff --git a/lib/librte_vhost/vhost_user.c b/lib/librte_vhost/vhost_user.c index ff8b1752b..6be5c771b 100644 --- a/lib/librte_vhost/vhost_user.c +++ b/lib/librte_vhost/vhost_user.c @@ -398,7 +398,7 @@ vhost_user_set_features(struct virtio_net **pdev, struct VhostUserMsg *msg, } vdpa_dev = dev->vdpa_dev; - if (vdpa_dev && vdpa_dev->ops->set_features) + if (vdpa_dev) vdpa_dev->ops->set_features(dev->vid); return RTE_VHOST_MSG_RESULT_OK; @@ -2849,9 +2849,7 @@ vhost_user_msg_handler(int vid, int fd) goto out; if (!(dev->flags & VIRTIO_DEV_VDPA_CONFIGURED)) { - if (vdpa_dev->ops->dev_conf) - vdpa_dev->ops->dev_conf(dev->vid); - + vdpa_dev->ops->dev_conf(dev->vid); dev->flags |= VIRTIO_DEV_VDPA_CONFIGURED; } -- 2.26.2
next prev parent reply other threads:[~2020-07-06 11:25 UTC|newest] Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-07-06 11:24 [dpdk-dev] [PATCH (v20.08) v3 0/8] vhost: improve Vhost/vDPA device init Adrian Moreno 2020-07-06 11:24 ` [dpdk-dev] [PATCH v3 1/8] vhost: fix virtio ready flag check Adrian Moreno 2020-07-07 3:21 ` Xia, Chenbo 2020-07-08 14:22 ` [dpdk-dev] [dpdk-stable] " Ferruh Yigit 2020-07-06 11:24 ` [dpdk-dev] [PATCH v3 2/8] vhost: refactor Virtio ready check Adrian Moreno 2020-07-07 3:21 ` Xia, Chenbo 2020-07-06 11:24 ` Adrian Moreno [this message] 2020-07-07 3:21 ` [dpdk-dev] [PATCH v3 3/8] vhost: make some vDPA callbacks mandatory Xia, Chenbo 2020-07-06 11:24 ` [dpdk-dev] [PATCH v3 4/8] vhost: check vDPA configuration succeed Adrian Moreno 2020-07-07 3:22 ` Xia, Chenbo 2020-07-08 13:20 ` Ferruh Yigit 2020-07-06 11:24 ` [dpdk-dev] [PATCH v3 5/8] vhost: add support for virtio status Adrian Moreno 2020-07-07 3:22 ` Xia, Chenbo 2020-07-06 11:24 ` [dpdk-dev] [PATCH v3 6/8] vhost: add support for virtio get status message Adrian Moreno 2020-07-07 3:22 ` Xia, Chenbo 2020-07-06 11:24 ` [dpdk-dev] [PATCH v3 7/8] vdpa/ifc: enable status protocol feature Adrian Moreno 2020-07-07 3:22 ` Xia, Chenbo 2020-07-06 11:24 ` [dpdk-dev] [PATCH v3 8/8] vdpa/mlx5: " Adrian Moreno 2020-07-07 3:23 ` Xia, Chenbo
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20200706112452.1474533-4-amorenoz@redhat.com \ --to=amorenoz@redhat.com \ --cc=chenbo.xia@intel.com \ --cc=dev@dpdk.org \ --cc=jasowang@redhat.com \ --cc=lulu@redhat.com \ --cc=matan@mellanox.com \ --cc=maxime.coquelin@redhat.com \ --cc=shahafs@mellanox.com \ --cc=viacheslavo@mellanox.com \ --cc=xiao.w.wang@intel.com \ --cc=xiaolong.ye@intel.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
DPDK patches and discussions This inbox may be cloned and mirrored by anyone: git clone --mirror https://inbox.dpdk.org/dev/0 dev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 dev dev/ https://inbox.dpdk.org/dev \ dev@dpdk.org public-inbox-index dev Example config snippet for mirrors. Newsgroup available over NNTP: nntp://inbox.dpdk.org/inbox.dpdk.dev AGPL code for this site: git clone https://public-inbox.org/public-inbox.git