From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 30063A00C3; Thu, 14 May 2020 10:03:35 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 715C01D6C8; Thu, 14 May 2020 10:02:55 +0200 (CEST) Received: from us-smtp-delivery-1.mimecast.com (us-smtp-1.mimecast.com [207.211.31.81]) by dpdk.org (Postfix) with ESMTP id 72D1A1D6C9 for ; Thu, 14 May 2020 10:02:53 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1589443372; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Uy9TjvAJ14wqsJkkwW/+la6q7yIoIFQXKBW9vxgtO/Y=; b=Lo9iXCGyuRRrWQzNyOVt4M8SJZMHwisbC+x/f3kj2q7HSRxKH8EpRaHVeTyzc4yn17rriN hyTs+Rsl6PXOkOdvEUO+u7YK0CauU+j8zAmVPvnQEKOR2vn+4LX99eF3RQaCmnV/f9CxD3 uxI1Uby1YRZHoVgXAXd3UgvvSzqvgZM= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-283-nLCkAVjtOVKSVAwr5PDLdA-1; Thu, 14 May 2020 04:02:49 -0400 X-MC-Unique: nLCkAVjtOVKSVAwr5PDLdA-1 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 0A7E8801503; Thu, 14 May 2020 08:02:48 +0000 (UTC) Received: from localhost.localdomain (unknown [10.36.110.30]) by smtp.corp.redhat.com (Postfix) with ESMTP id 8B9576E6F4; Thu, 14 May 2020 08:02:45 +0000 (UTC) From: Maxime Coquelin To: xiaolong.ye@intel.com, shahafs@mellanox.com, matan@mellanox.com, amorenoz@redhat.com, xiao.w.wang@intel.com, viacheslavo@mellanox.com, dev@dpdk.org Cc: jasowang@redhat.com, lulu@redhat.com, Maxime Coquelin Date: Thu, 14 May 2020 10:02:13 +0200 Message-Id: <20200514080218.1435344-5-maxime.coquelin@redhat.com> In-Reply-To: <20200514080218.1435344-1-maxime.coquelin@redhat.com> References: <20200514080218.1435344-1-maxime.coquelin@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 8bit Subject: [dpdk-dev] [PATCH 4/9] vhost: make some vDPA callbacks mandatory X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" 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 --- lib/librte_vhost/rte_vdpa.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 | 7 +++---- 5 files changed, 25 insertions(+), 14 deletions(-) diff --git a/lib/librte_vhost/rte_vdpa.h b/lib/librte_vhost/rte_vdpa.h index 3c400ee79b..a4f74211db 100644 --- a/lib/librte_vhost/rte_vdpa.h +++ b/lib/librte_vhost/rte_vdpa.h @@ -41,23 +41,25 @@ struct rte_vdpa_dev_addr { * vdpa device operations */ struct rte_vdpa_dev_ops { - /** Get capabilities of this device */ + /** Get capabilities of this device (Mandatory) */ int (*get_queue_num)(int did, uint32_t *queue_num); - /** Get supported features of this device */ + /** Get supported features of this device (Mandatory) */ int (*get_features)(int did, uint64_t *features); - /** Get supported protocol features of this device */ + /** Get supported protocol features of this device (Mandatory) */ int (*get_protocol_features)(int did, 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 bb8d0d7801..23f3448d2c 100644 --- a/lib/librte_vhost/socket.c +++ b/lib/librte_vhost/socket.c @@ -707,7 +707,7 @@ rte_vhost_driver_get_features(const char *path, uint64_t *features) did = vsocket->vdpa_dev_id; vdpa_dev = rte_vdpa_get_device(did); - if (!vdpa_dev || !vdpa_dev->ops->get_features) { + if (!vdpa_dev) { *features = vsocket->features; goto unlock_exit; } @@ -762,7 +762,7 @@ rte_vhost_driver_get_protocol_features(const char *path, did = vsocket->vdpa_dev_id; vdpa_dev = rte_vdpa_get_device(did); - if (!vdpa_dev || !vdpa_dev->ops->get_protocol_features) { + if (!vdpa_dev) { *protocol_features = vsocket->protocol_features; goto unlock_exit; } @@ -804,7 +804,7 @@ rte_vhost_driver_get_queue_num(const char *path, uint32_t *queue_num) did = vsocket->vdpa_dev_id; vdpa_dev = rte_vdpa_get_device(did); - 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 b2b2a105f1..e5e949f6d3 100644 --- a/lib/librte_vhost/vdpa.c +++ b/lib/librte_vhost/vdpa.c @@ -66,6 +66,16 @@ rte_vdpa_register_device(struct rte_vdpa_dev_addr *addr, if (i == MAX_VHOST_DEVICE) return -1; + /* 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 -1; + } + snprintf(device_name, sizeof(device_name), "vdpa-dev-%d", i); dev = rte_zmalloc(device_name, sizeof(struct rte_vdpa_device), RTE_CACHE_LINE_SIZE); diff --git a/lib/librte_vhost/vhost.c b/lib/librte_vhost/vhost.c index fd8ba1be2d..7b5c9b3537 100644 --- a/lib/librte_vhost/vhost.c +++ b/lib/librte_vhost/vhost.c @@ -649,7 +649,7 @@ vhost_destroy_device_notify(struct virtio_net *dev) if (dev->flags & VIRTIO_DEV_RUNNING) { did = dev->vdpa_dev_id; vdpa_dev = rte_vdpa_get_device(did); - 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 f5800bd9c1..7a43c2fae7 100644 --- a/lib/librte_vhost/vhost_user.c +++ b/lib/librte_vhost/vhost_user.c @@ -386,7 +386,7 @@ vhost_user_set_features(struct virtio_net **pdev, struct VhostUserMsg *msg, did = dev->vdpa_dev_id; vdpa_dev = rte_vdpa_get_device(did); - if (vdpa_dev && vdpa_dev->ops->set_features) + if (vdpa_dev) vdpa_dev->ops->set_features(dev->vid); return RTE_VHOST_MSG_RESULT_OK; @@ -1972,7 +1972,7 @@ vhost_user_set_vring_enable(struct virtio_net **pdev, did = dev->vdpa_dev_id; vdpa_dev = rte_vdpa_get_device(did); - if (vdpa_dev && vdpa_dev->ops->set_vring_state) + if (vdpa_dev) vdpa_dev->ops->set_vring_state(dev->vid, index, enable); if (dev->notify_ops->vring_state_changed) @@ -2809,8 +2809,7 @@ vhost_user_msg_handler(int vid, int fd) if (!(dev->flags & VIRTIO_DEV_VDPA_CONFIGURED) && request == VHOST_USER_SET_VRING_CALL) { - 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.25.4