From patchwork Mon Mar 6 09:59:59 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Blunck X-Patchwork-Id: 21435 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id E609BF928; Mon, 6 Mar 2017 11:01:33 +0100 (CET) Received: from mail-wr0-f193.google.com (mail-wr0-f193.google.com [209.85.128.193]) by dpdk.org (Postfix) with ESMTP id 065F1952 for ; Mon, 6 Mar 2017 11:00:53 +0100 (CET) Received: by mail-wr0-f193.google.com with SMTP id l37so20982724wrc.3 for ; Mon, 06 Mar 2017 02:00:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:subject:date:message-id:in-reply-to:references; bh=auj2rMGinToCfG7chcys4eDGZk2KkNHnuThkK64q/tM=; b=gYL2XsOpwkiEIYYIW7bGALUTMnTdmB9f6DF6Jn9Fldtivg3tyaoydiR/Ov/IyU5Q4n 0UQa+tOaBGTXNvdCJLDGHad8AwC58JQY+zJIxbW1KqgvmHq/PmxlKNXxNJ3W0ASm6cw5 NW7oYSp809rRqpvBAwA32v3c5oieOXyKkLnOoLtK4zl7eUfj8sTAZqXKIBaj6+fWO0Og SDVlaxSgkrgqc8+8DPffkMaoNO9GgbciB0+kRHw2ZJLKWTOuJNghpMMGz/vEXQVQuBPU Fl9ATTbJTh0YQnE1mqSg6Y1bdG+vLzzxyH+GzkJ8XhbosP/CgHqPaAUtuRwy67jNbk7D O3NQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:subject:date:message-id :in-reply-to:references; bh=auj2rMGinToCfG7chcys4eDGZk2KkNHnuThkK64q/tM=; b=SZAtiRxr2AmVTBw68ClisMdDdvolAoUBR8p6uYGDp169fwo0pGuJ9Bgaow5K+tc8x5 PFGW9DdlORSJf6gkXX5dVgxU0bQka+odtfdapEvUGuStKO1CDFeDnRFwSYdifb/7zqsE G1B4yRt+P4MjfZsyirs5CmGPUmxED0gkHiUFmlXvqra3+tB6OaAe4C2dk/f2HS8YKrLN YiGEAIN7Xo3rlZpAz2HYpPg0YkoZAzRLI1X0b8cC+dhsSNg9bxgyhm/+FKStY5i1Vy0s PzQz8LAPl4Pdfq2T7DIpl9IpZu96nsDZ7juRl9joM/8LikFux3dIvI8yP3PQeGcvOOR9 ZaxQ== X-Gm-Message-State: AMke39nm0dBhUSwmX/UR1Iyl+sZNuplW9EDxntHwV5It/aNvVuaZRoFZxpBYv9n9uO91ng== X-Received: by 10.223.164.150 with SMTP id g22mr15034046wrb.92.1488794452565; Mon, 06 Mar 2017 02:00:52 -0800 (PST) Received: from weierstrass.local.net ([91.200.109.169]) by smtp.gmail.com with ESMTPSA id u145sm3829237wmu.1.2017.03.06.02.00.51 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 06 Mar 2017 02:00:51 -0800 (PST) From: Jan Blunck To: dev@dpdk.org Date: Mon, 6 Mar 2017 10:59:59 +0100 Message-Id: <1488794430-25179-8-git-send-email-jblunck@infradead.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1488794430-25179-1-git-send-email-jblunck@infradead.org> References: <1488794430-25179-1-git-send-email-jblunck@infradead.org> Subject: [dpdk-dev] [PATCH 07/38] net/vhost: use ethdev allocation helper for virtual devices 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" Signed-off-by: Jan Blunck --- drivers/net/vhost/rte_eth_vhost.c | 54 +++++++++++++++++++-------------------- 1 file changed, 26 insertions(+), 28 deletions(-) diff --git a/drivers/net/vhost/rte_eth_vhost.c b/drivers/net/vhost/rte_eth_vhost.c index d0d0474..e2dae6f 100644 --- a/drivers/net/vhost/rte_eth_vhost.c +++ b/drivers/net/vhost/rte_eth_vhost.c @@ -39,6 +39,7 @@ #include #include +#include #include #include #include @@ -1012,9 +1013,10 @@ static const struct eth_dev_ops ops = { static struct rte_vdev_driver pmd_vhost_drv; static int -eth_dev_vhost_create(const char *name, char *iface_name, int16_t queues, - const unsigned numa_node, uint64_t flags) +eth_dev_vhost_create(struct rte_vdev_device *dev, char *iface_name, + int16_t queues, const unsigned int numa_node, uint64_t flags) { + const char *name = rte_vdev_device_name(dev); struct rte_eth_dev_data *data = NULL; struct pmd_internal *internal = NULL; struct rte_eth_dev *eth_dev = NULL; @@ -1025,23 +1027,19 @@ eth_dev_vhost_create(const char *name, char *iface_name, int16_t queues, RTE_LOG(INFO, PMD, "Creating VHOST-USER backend on numa socket %u\n", numa_node); - /* now do all data allocation - for eth_dev structure, dummy pci driver - * and internal (private) data + /* now do all data allocation - for eth_dev structure and internal + * (private) data */ data = rte_zmalloc_socket(name, sizeof(*data), 0, numa_node); if (data == NULL) goto error; - internal = rte_zmalloc_socket(name, sizeof(*internal), 0, numa_node); - if (internal == NULL) - goto error; - list = rte_zmalloc_socket(name, sizeof(*list), 0, numa_node); if (list == NULL) goto error; /* reserve an ethdev entry */ - eth_dev = rte_eth_dev_allocate(name); + eth_dev = rte_eth_vdev_allocate(dev, sizeof(*internal)); if (eth_dev == NULL) goto error; @@ -1058,10 +1056,10 @@ eth_dev_vhost_create(const char *name, char *iface_name, int16_t queues, /* now put it all together * - store queue data in internal, - * - store numa_node info in ethdev data * - point eth_dev_data to internals * - and point eth_dev structure to new eth_dev_data structure */ + internal = eth_dev->data->dev_private; internal->dev_name = strdup(name); if (internal->dev_name == NULL) goto error; @@ -1077,26 +1075,21 @@ eth_dev_vhost_create(const char *name, char *iface_name, int16_t queues, rte_spinlock_init(&vring_state->lock); vring_states[eth_dev->data->port_id] = vring_state; - data->dev_private = internal; - data->port_id = eth_dev->data->port_id; - memmove(data->name, eth_dev->data->name, sizeof(data->name)); + /* We'll replace the 'data' originally allocated by eth_dev. So the + * vhost PMD resources won't be shared between multi processes. + */ + rte_memcpy(data, eth_dev->data, sizeof(*data)); + eth_dev->data = data; + data->nb_rx_queues = queues; data->nb_tx_queues = queues; internal->max_queues = queues; data->dev_link = pmd_link; data->mac_addrs = eth_addr; - - /* We'll replace the 'data' originally allocated by eth_dev. So the - * vhost PMD resources won't be shared between multi processes. - */ - eth_dev->data = data; - eth_dev->dev_ops = &ops; - eth_dev->driver = NULL; data->dev_flags = RTE_ETH_DEV_DETACHABLE | RTE_ETH_DEV_INTR_LSC; - data->kdrv = RTE_KDRV_NONE; - data->drv_name = pmd_vhost_drv.driver.name; - data->numa_node = numa_node; + + eth_dev->dev_ops = &ops; /* finally assign rx and tx ops */ eth_dev->rx_pkt_burst = eth_vhost_rx; @@ -1114,8 +1107,10 @@ eth_dev_vhost_create(const char *name, char *iface_name, int16_t queues, return data->port_id; error: - if (internal) + if (internal) { + free(internal->iface_name); free(internal->dev_name); + } rte_free(vring_state); rte_free(eth_addr); if (eth_dev) @@ -1158,7 +1153,6 @@ open_int(const char *key __rte_unused, const char *value, void *extra_args) static int rte_pmd_vhost_probe(struct rte_vdev_device *dev) { - const char *name; struct rte_kvargs *kvlist = NULL; int ret = 0; char *iface_name; @@ -1167,8 +1161,8 @@ rte_pmd_vhost_probe(struct rte_vdev_device *dev) int client_mode = 0; int dequeue_zero_copy = 0; - name = rte_vdev_device_name(dev); - RTE_LOG(INFO, PMD, "Initializing pmd_vhost for %s\n", name); + RTE_LOG(INFO, PMD, "Initializing pmd_vhost for %s\n", + rte_vdev_device_name(dev)); kvlist = rte_kvargs_parse(rte_vdev_device_args(dev), valid_arguments); if (kvlist == NULL) @@ -1213,7 +1207,11 @@ rte_pmd_vhost_probe(struct rte_vdev_device *dev) flags |= RTE_VHOST_USER_DEQUEUE_ZERO_COPY; } - eth_dev_vhost_create(name, iface_name, queues, rte_socket_id(), flags); + if (dev->device.numa_node == SOCKET_ID_ANY) + dev->device.numa_node = rte_socket_id(); + + eth_dev_vhost_create(dev, iface_name, queues, dev->device.numa_node, + flags); out_free: rte_kvargs_free(kvlist);