All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jianfeng Tan <jianfeng.tan@intel.com>
To: dev@dpdk.org
Cc: jblunck@infradead.org, bruce.richardson@intel.com,
	konstantin.ananyev@intel.com, pablo.de.lara.guarch@intel.com,
	thomas@monjalon.net, yliu@fridaylinux.org,
	maxime.coquelin@redhat.com, mtetsuyah@gmail.com,
	ferruh.yigit@intel.com, Jianfeng Tan <jianfeng.tan@intel.com>
Subject: [PATCH v7 2/4] vhost: allocate virtio_net in memzone
Date: Fri, 13 Oct 2017 02:04:10 +0000	[thread overview]
Message-ID: <1507860252-137510-3-git-send-email-jianfeng.tan@intel.com> (raw)
In-Reply-To: <1507860252-137510-1-git-send-email-jianfeng.tan@intel.com>

Instead of allocate on the stack, change to allocate in memzone
so that we can retrieve them in secondary processes.

TODO: numa awareness.

Signed-off-by: Jianfeng Tan <jianfeng.tan@intel.com>
---
 lib/librte_vhost/socket.c |  2 ++
 lib/librte_vhost/vhost.c  | 34 ++++++++++++++++++++++++++++++++--
 lib/librte_vhost/vhost.h  |  4 +++-
 3 files changed, 37 insertions(+), 3 deletions(-)

diff --git a/lib/librte_vhost/socket.c b/lib/librte_vhost/socket.c
index 41aa3f9..35b9751 100644
--- a/lib/librte_vhost/socket.c
+++ b/lib/librte_vhost/socket.c
@@ -606,6 +606,8 @@ rte_vhost_driver_register(const char *path, uint64_t flags)
 	int ret = -1;
 	struct vhost_user_socket *vsocket;
 
+	alloc_vhost_devices();
+
 	if (!path)
 		return -1;
 
diff --git a/lib/librte_vhost/vhost.c b/lib/librte_vhost/vhost.c
index 0b6aa1c..2b687ea 100644
--- a/lib/librte_vhost/vhost.c
+++ b/lib/librte_vhost/vhost.c
@@ -47,15 +47,45 @@
 #include <rte_memory.h>
 #include <rte_malloc.h>
 #include <rte_vhost.h>
+#include <rte_memzone.h>
 
 #include "vhost.h"
 
-struct virtio_net *vhost_devices[MAX_VHOST_DEVICE];
+#define MZ_VHOST_DEVICES "mz_vhost_devices"
+struct virtio_net **vhost_devices;
+
+void
+alloc_vhost_devices(void)
+{
+	const struct rte_memzone *mz;
+
+	if (vhost_devices != NULL)
+		return;
+
+	if (rte_eal_process_type() == RTE_PROC_PRIMARY) {
+		mz = rte_memzone_reserve(MZ_VHOST_DEVICES,
+				MAX_VHOST_DEVICE * sizeof(*vhost_devices),
+				rte_socket_id(), 0);
+	} else
+		mz = rte_memzone_lookup(MZ_VHOST_DEVICES);
+
+	if (mz == NULL)
+		rte_panic("Cannot allocate memzone for vhost_devices\n");
+
+	vhost_devices = mz->addr;
+	if (rte_eal_process_type() == RTE_PROC_PRIMARY)
+		memset(vhost_devices, 0,
+		       MAX_VHOST_DEVICE * sizeof(*vhost_devices));
+}
 
 struct virtio_net *
 get_device(int vid)
 {
-	struct virtio_net *dev = vhost_devices[vid];
+	struct virtio_net *dev;
+
+	alloc_vhost_devices();
+
+	dev = vhost_devices[vid];
 
 	if (unlikely(!dev)) {
 		RTE_LOG(ERR, VHOST_CONFIG,
diff --git a/lib/librte_vhost/vhost.h b/lib/librte_vhost/vhost.h
index 6fe72ae..bc1f31e 100644
--- a/lib/librte_vhost/vhost.h
+++ b/lib/librte_vhost/vhost.h
@@ -278,7 +278,7 @@ vhost_log_used_vring(struct virtio_net *dev, struct vhost_virtqueue *vq,
 
 extern uint64_t VHOST_FEATURES;
 #define MAX_VHOST_DEVICE	1024
-extern struct virtio_net *vhost_devices[MAX_VHOST_DEVICE];
+extern struct virtio_net **vhost_devices;
 
 /* Convert guest physical address to host physical address */
 static __rte_always_inline phys_addr_t
@@ -300,6 +300,8 @@ gpa_to_hpa(struct virtio_net *dev, uint64_t gpa, uint64_t size)
 	return 0;
 }
 
+
+void alloc_vhost_devices(void);
 struct virtio_net *get_device(int vid);
 
 int vhost_new_device(void);
-- 
2.7.4

  parent reply	other threads:[~2017-10-13  2:02 UTC|newest]

Thread overview: 158+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-08-25  9:40 [PATCH 00/12] support to run vdev in the secondary process Jianfeng Tan
2017-08-25  9:40 ` [PATCH 01/12] cryptodev: remove crypto vdev init Jianfeng Tan
2017-09-18 11:48   ` De Lara Guarch, Pablo
2017-08-25  9:40 ` [PATCH 02/12] eal: avoid calling rte_vdev_init() Jianfeng Tan
2017-08-29 12:50   ` Gaëtan Rivet
2017-08-29 22:25     ` Tan, Jianfeng
2017-08-25  9:40 ` [PATCH 03/12] crypto: move vdev helper functions into dedicated file Jianfeng Tan
2017-09-18 11:51   ` De Lara Guarch, Pablo
2017-08-25  9:40 ` [PATCH 04/12] vdev: move to drivers/bus Jianfeng Tan
2017-08-29 13:04   ` Gaëtan Rivet
2017-08-29 22:47     ` Tan, Jianfeng
2017-09-18 11:47       ` De Lara Guarch, Pablo
2017-09-19  6:01         ` Tan, Jianfeng
2017-08-25  9:40 ` [PATCH 05/12] bus/vdev: change log type from EAL to PMD Jianfeng Tan
2017-08-29 12:54   ` Gaëtan Rivet
2017-08-29 22:27     ` Tan, Jianfeng
2017-08-25  9:40 ` [PATCH 06/12] eal: add channel for primary/secondary communication Jianfeng Tan
2017-09-18 13:49   ` Jiayu Hu
2017-09-21  6:11     ` Tan, Jianfeng
2017-09-20  3:00   ` Jiayu Hu
2017-09-21  6:53     ` Tan, Jianfeng
2017-09-27 12:19   ` Yuanhan Liu
2017-09-28 13:50     ` Tan, Jianfeng
2017-09-29  1:24       ` Yuanhan Liu
2017-09-29 10:09         ` Burakov, Anatoly
2017-09-29 10:25           ` Yuanhan Liu
2017-08-25  9:40 ` [PATCH 07/12] bus/vdev: scan and probe vdev in secondary processes Jianfeng Tan
2017-08-25  9:40 ` [PATCH 08/12] ethdev: support attach vdev in secondary process Jianfeng Tan
2017-08-25  9:40 ` [PATCH 09/12] vhost: allocate virtio_net in memzone Jianfeng Tan
2017-08-25  9:40 ` [PATCH 10/12] vhost: support to kick in secondary process Jianfeng Tan
2017-09-21  3:33   ` Yuanhan Liu
2017-09-21  7:04     ` Tan, Jianfeng
2017-09-21  9:17       ` Yuanhan Liu
2017-09-22  2:30         ` Tan, Jianfeng
2017-09-27  9:36           ` Yuanhan Liu
2017-09-28  5:10             ` Tan, Jianfeng
2017-09-28  8:09             ` Tan, Jianfeng
2017-09-30  8:18               ` Yuanhan Liu
2017-09-30 10:50                 ` Tan, Jianfeng
2017-08-25  9:40 ` [PATCH 11/12] net/vhost: support to run in the " Jianfeng Tan
2017-09-21  4:29   ` Yuanhan Liu
2017-08-25  9:40 ` [PATCH 12/12] examples/helloworld: do not exit automatically Jianfeng Tan
2017-09-18 11:44   ` De Lara Guarch, Pablo
2017-09-19  5:07     ` Tan, Jianfeng
2017-09-28 13:55 ` [PATCH v2 00/12] support to run vdev in the secondary process Jianfeng Tan
2017-09-28 13:55   ` [PATCH v2 01/12] cryptodev: remove crypto vdev init API Jianfeng Tan
2017-09-28 13:55   ` [PATCH v2 02/12] eal: avoid calling rte_vdev_init() Jianfeng Tan
2017-09-28 13:55   ` [PATCH v2 03/12] cryptodev: avoid dependency on rte_vdev.h Jianfeng Tan
2017-10-05 13:13     ` Jan Blunck
2017-10-09  1:04       ` Tan, Jianfeng
2017-09-28 13:55   ` [PATCH v2 04/12] bus/fslmc: introduce RTE_LOGTYPE_BUS for bus drivers Jianfeng Tan
2017-09-28 13:55   ` [PATCH v2 05/12] bus/vdev: move to vdev bus to drivers/bus Jianfeng Tan
2017-09-28 13:55   ` [PATCH v2 06/12] bus/vdev: normalize log type Jianfeng Tan
2017-09-28 13:55   ` [PATCH v2 07/12] eal: add channel for primary/secondary communication Jianfeng Tan
2017-09-28 15:01     ` Ananyev, Konstantin
2017-09-28 15:29       ` Burakov, Anatoly
2017-09-29  1:03         ` Tan, Jianfeng
2017-09-29 10:00           ` Burakov, Anatoly
2017-09-30  4:07             ` Tan, Jianfeng
2017-10-02 10:08               ` Burakov, Anatoly
2017-10-05 12:01     ` Jan Blunck
2017-10-09  1:27       ` Tan, Jianfeng
2017-09-28 13:55   ` [PATCH v2 08/12] bus/vdev: scan and probe vdev in secondary processes Jianfeng Tan
2017-10-05 13:04     ` Jan Blunck
2017-10-09  1:08       ` Tan, Jianfeng
2017-09-28 13:55   ` [PATCH v2 09/12] ethdev: support attach vdev in secondary process Jianfeng Tan
2017-10-05 14:26     ` Jan Blunck
2017-10-09  0:56       ` Tan, Jianfeng
2017-09-28 13:55   ` [PATCH v2 10/12] vhost: allocate virtio_net in memzone Jianfeng Tan
2017-09-28 13:55   ` [PATCH v2 11/12] vhost: support to kick in secondary process Jianfeng Tan
2017-09-28 13:55   ` [PATCH v2 12/12] net/vhost: support to run in the " Jianfeng Tan
2017-09-29  8:28     ` Yuanhan Liu
2017-09-30  4:03       ` Tan, Jianfeng
2017-09-30  8:16         ` Yuanhan Liu
2017-09-30 10:06           ` Tan, Jianfeng
2017-09-30 11:49           ` Yuanhan Liu
2017-10-01 23:48             ` Tan, Jianfeng
2017-09-30  8:23     ` Yuanhan Liu
2017-09-30 10:53       ` Tan, Jianfeng
2017-09-30 11:34       ` Yuanhan Liu
2017-10-01 23:46         ` Tan, Jianfeng
2017-10-09  3:20 ` [PATCH v3 0/5] move vdev into drivers/bus Jianfeng Tan
2017-10-09  3:20   ` [PATCH v3 1/5] cryptodev: remove crypto vdev init API Jianfeng Tan
2017-10-09  3:20   ` [PATCH v3 2/5] eal: avoid calling rte_vdev_init() Jianfeng Tan
2017-10-09  3:20   ` [PATCH v3 3/5] bus: introduce RTE_LOGTYPE_BUS for bus drivers Jianfeng Tan
2017-10-09  3:20   ` [PATCH v3 4/5] bus/vdev: move to vdev bus to drivers/bus Jianfeng Tan
2017-10-09  3:20   ` [PATCH v3 5/5] bus/vdev: normalize log type Jianfeng Tan
2017-10-09 10:55   ` [PATCH v4 0/5] move vdev into drivers/bus Jianfeng Tan
2017-10-09 10:55     ` [PATCH v4 1/5] bus/vdev: scan and probe vdev in secondary processes Jianfeng Tan
2017-10-09 10:55     ` [PATCH v4 2/5] ethdev: support attach vdev in secondary process Jianfeng Tan
2017-10-09 10:55     ` [PATCH v4 3/5] vhost: allocate virtio_net in memzone Jianfeng Tan
2017-10-09 10:55     ` [PATCH v4 4/5] vhost: support to kick in secondary process Jianfeng Tan
2017-10-09 10:55     ` [PATCH v4 5/5] net/vhost: support to run in the " Jianfeng Tan
2017-10-09 11:08     ` [PATCH v4 0/5] move vdev into drivers/bus Tan, Jianfeng
2017-10-09 11:27   ` [PATCH v5 " Jianfeng Tan
2017-10-09 11:27     ` [PATCH v5 1/5] cryptodev: remove crypto vdev init API Jianfeng Tan
2017-10-09 11:27     ` [PATCH v5 2/5] eal: remove dependency on vdev Jianfeng Tan
2017-10-09 11:27     ` [PATCH v5 3/5] bus: introduce new log type for bus drivers Jianfeng Tan
2017-10-11  6:54       ` Shreyansh Jain
2017-10-11 10:42         ` Tan, Jianfeng
2017-10-11 11:20           ` Shreyansh Jain
2017-10-12  2:14             ` Tan, Jianfeng
2017-10-09 11:27     ` [PATCH v5 4/5] bus/vdev: move to vdev bus to drivers/bus Jianfeng Tan
2017-10-09 11:27     ` [PATCH v5 5/5] bus/vdev: normalize log type Jianfeng Tan
2017-10-12  8:46   ` [PATCH v6 0/4] move vdev into drivers/bus Jianfeng Tan
2017-10-12  8:46     ` [PATCH v6 1/4] cryptodev: remove crypto vdev init API Jianfeng Tan
2017-10-12 10:06       ` Thomas Monjalon
2017-10-12  8:46     ` [PATCH v6 2/4] eal: remove dependency on vdev Jianfeng Tan
2017-10-12  8:46     ` [PATCH v6 3/4] bus/vdev: move to vdev bus to drivers/bus Jianfeng Tan
2017-10-12  8:46     ` [PATCH v6 4/4] bus/vdev: change log type Jianfeng Tan
2017-10-13  2:04   ` [PATCH v7 0/4] move vdev into drivers/bus Jianfeng Tan
2017-10-13  2:04     ` [PATCH v7 1/4] ethdev: support attach vdev in secondary process Jianfeng Tan
2017-10-13  2:04     ` Jianfeng Tan [this message]
2017-10-13  2:04     ` [PATCH v7 3/4] vhost: support to kick " Jianfeng Tan
2017-10-13  2:04     ` [PATCH v7 4/4] net/vhost: support to run in the " Jianfeng Tan
2017-10-13  8:26     ` [PATCH v7 0/4] move vdev into drivers/bus Thomas Monjalon
2017-10-13 11:49       ` Tan, Jianfeng
2017-10-13 11:51   ` Jianfeng Tan
2017-10-13 11:51     ` [PATCH v7 1/4] cryptodev: remove crypto vdev init API Jianfeng Tan
2017-10-23 10:06       ` De Lara Guarch, Pablo
2017-10-13 11:51     ` [PATCH v7 2/4] eal: remove dependency on vdev Jianfeng Tan
2017-10-13 11:52     ` [PATCH v7 3/4] bus/vdev: move to vdev bus to drivers/bus Jianfeng Tan
2017-10-23 14:34       ` De Lara Guarch, Pablo
2017-10-13 11:52     ` [PATCH v7 4/4] bus/vdev: change log type Jianfeng Tan
2017-10-25 17:10   ` [PATCH v8 0/4] move vdev into drivers/bus Jianfeng Tan
2017-10-25 17:10     ` [PATCH v8 1/4] cryptodev: remove crypto vdev init API Jianfeng Tan
2017-10-25 17:10     ` [PATCH v8 2/4] eal: remove dependency on vdev Jianfeng Tan
2017-10-25 17:10     ` [PATCH v8 3/4] bus/vdev: move to vdev bus to drivers/bus Jianfeng Tan
2017-10-25 21:32       ` De Lara Guarch, Pablo
2017-10-25 23:03       ` Gaëtan Rivet
2017-10-25 17:10     ` [PATCH v8 4/4] bus/vdev: change log type Jianfeng Tan
2017-10-27  1:06   ` [PATCH v0 0/4] move vdev into drivers/bus Jianfeng Tan
2017-10-27  1:06     ` [PATCH v9 1/4] cryptodev: remove crypto vdev init API Jianfeng Tan
2017-10-27  1:06     ` [PATCH v9 2/4] eal: remove dependency on vdev Jianfeng Tan
2017-10-27  1:06     ` [PATCH v9 3/4] bus/vdev: move to vdev bus to drivers/bus Jianfeng Tan
2017-10-27  7:56       ` Thomas Monjalon
2017-10-27  8:19         ` Tan, Jianfeng
2017-10-27  8:53           ` Thomas Monjalon
2017-10-27 16:57             ` Gaëtan Rivet
2017-10-27  1:06     ` [PATCH v9 4/4] bus/vdev: change log type Jianfeng Tan
2017-10-27  3:23   ` [PATCH v10 0/4] move vdev into drivers/bus Jianfeng Tan
2017-10-27  3:23     ` [PATCH v10 1/4] cryptodev: remove crypto vdev init API Jianfeng Tan
2017-10-27  3:23     ` [PATCH v10 2/4] eal: remove dependency on vdev Jianfeng Tan
2017-10-27  3:23     ` [PATCH v10 3/4] bus/vdev: move to vdev bus to drivers/bus Jianfeng Tan
2017-10-27  3:23     ` [PATCH v10 4/4] bus/vdev: change log type Jianfeng Tan
2017-10-30  8:28   ` [PATCH v11 0/4] move vdev into drivers/bus Jianfeng Tan
2017-10-30  8:28     ` [PATCH v11 1/4] cryptodev: remove crypto vdev init API Jianfeng Tan
2017-10-30  8:28     ` [PATCH v11 2/4] eal: remove dependency on vdev Jianfeng Tan
2017-10-30  8:28     ` [PATCH v11 3/4] bus/vdev: move to vdev bus to drivers/bus Jianfeng Tan
2017-11-07  2:43       ` Thomas Monjalon
2017-11-07  6:21         ` Tan, Jianfeng
2017-10-30  8:28     ` [PATCH v11 4/4] bus/vdev: change log type Jianfeng Tan
2017-11-07  6:54   ` [PATCH v12 0/4] move vdev into drivers/bus Jianfeng Tan
2017-11-07  6:54     ` [PATCH v12 1/4] cryptodev: remove crypto vdev init API Jianfeng Tan
2017-11-07  6:54     ` [PATCH v12 2/4] eal: remove dependency on vdev Jianfeng Tan
2017-11-07  6:54     ` [PATCH v12 3/4] bus/vdev: move to vdev bus to drivers/bus Jianfeng Tan
2017-11-07  6:54     ` [PATCH v12 4/4] bus/vdev: change log type Jianfeng Tan
2017-11-07 15:43     ` [PATCH v12 0/4] move vdev into drivers/bus Thomas Monjalon

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=1507860252-137510-3-git-send-email-jianfeng.tan@intel.com \
    --to=jianfeng.tan@intel.com \
    --cc=bruce.richardson@intel.com \
    --cc=dev@dpdk.org \
    --cc=ferruh.yigit@intel.com \
    --cc=jblunck@infradead.org \
    --cc=konstantin.ananyev@intel.com \
    --cc=maxime.coquelin@redhat.com \
    --cc=mtetsuyah@gmail.com \
    --cc=pablo.de.lara.guarch@intel.com \
    --cc=thomas@monjalon.net \
    --cc=yliu@fridaylinux.org \
    /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
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.