dpdk/0009-dpdk-support-gazelle-07-eal-add-sec-attach.patch
wu-changsheng 8a5e80b3c6 add support for gazelle
Signed-off-by: wu-changsheng <851744572@qq.com>
2021-04-06 18:46:52 +08:00

153 lines
4.1 KiB
Diff

From 036103c944eac5c6c50e68fc1dad9d72a00b5c2c Mon Sep 17 00:00:00 2001
From: wuchangsheng <wuchangsheng2@huawei.com>
Date: Tue, 30 Mar 2021 17:02:45 +0800
Subject: [PATCH] dpdk-support-gazelle-07-eal-add-sec-attach
---
lib/librte_eal/linux/eal/eal.c | 66 ++++++++++++++++++++++++++--------
1 file changed, 52 insertions(+), 14 deletions(-)
diff --git a/lib/librte_eal/linux/eal/eal.c b/lib/librte_eal/linux/eal/eal.c
index 8bb1842..735afcd 100644
--- a/lib/librte_eal/linux/eal/eal.c
+++ b/lib/librte_eal/linux/eal/eal.c
@@ -103,6 +103,12 @@ static char runtime_dir[PATH_MAX];
static const char *default_runtime_dir = "/var/run";
+/****** APIs for libnet ******/
+static unsigned int sec_count = 0;
+static struct rte_config sec_rte_config[RTE_MAX_SECONDARY];
+static struct internal_config sec_internal_config[RTE_MAX_SECONDARY];
+static char sec_runtime_dir[RTE_MAX_SECONDARY][PATH_MAX];
+
static bool master_set_affinity = true;
bool
eal_is_master_set_affinity(void)
@@ -111,7 +117,8 @@ eal_is_master_set_affinity(void)
}
int
-eal_create_runtime_dir(void)
+eal_create_runtime_dir(char *runtime_dir, const int buflen,
+ const struct internal_config *conf)
{
const char *directory = default_runtime_dir;
const char *xdg_runtime_dir = getenv("XDG_RUNTIME_DIR");
@@ -134,8 +141,8 @@ eal_create_runtime_dir(void)
}
/* create prefix-specific subdirectory under DPDK runtime dir */
- ret = snprintf(runtime_dir, sizeof(runtime_dir), "%s/%s",
- tmp, eal_get_hugefile_prefix());
+ ret = snprintf(runtime_dir, buflen, "%s/%s",
+ tmp, conf->hugefile_prefix);
if (ret < 0 || ret == sizeof(runtime_dir)) {
RTE_LOG(ERR, EAL, "Error creating prefix-specific runtime path name\n");
return -1;
@@ -246,12 +253,18 @@ eal_clean_runtime_dir(void)
return -1;
}
-const char *
+char *
rte_eal_get_runtime_dir(void)
{
return runtime_dir;
}
+char *
+rte_eal_sec_get_runtime_dir(const int sec_idx)
+{
+ return sec_runtime_dir[sec_idx];
+}
+
/* Return user provided mbuf pool ops name */
const char *
rte_eal_mbuf_user_pool_ops(void)
@@ -266,6 +279,18 @@ rte_eal_get_configuration(void)
return &rte_config;
}
+struct rte_config *
+rte_eal_sec_get_configuration(const int sec_idx)
+{
+ return &sec_rte_config[sec_idx];
+}
+
+struct internal_config *
+rte_eal_sec_get_internal_config(const int sec_idx)
+{
+ return &sec_internal_config[sec_idx];
+}
+
enum rte_iova_mode
rte_eal_iova_mode(void)
{
@@ -395,18 +420,22 @@ rte_eal_config_create(void)
/* attach to an existing shared memory config */
static int
-rte_eal_config_attach(void)
+__rte_eal_config_attach(const int mmap_flags, int *mem_cfg_fd,
+ const char *runtime_dir,
+ const struct internal_config *internal_cfg,
+ struct rte_config *rte_cfg)
{
struct rte_mem_config *mem_config;
+ int mcfg_fd = *mem_cfg_fd;
- const char *pathname = eal_runtime_config_path();
+ const char *pathname = eal_sec_runtime_config_path(runtime_dir);
- if (internal_config.no_shconf)
+ if (internal_cfg->no_shconf)
return 0;
- if (mem_cfg_fd < 0){
- mem_cfg_fd = open(pathname, O_RDWR);
- if (mem_cfg_fd < 0) {
+ if (mcfg_fd < 0){
+ mcfg_fd = open(pathname, O_RDWR);
+ if (mcfg_fd < 0) {
RTE_LOG(ERR, EAL, "Cannot open '%s' for rte_mem_config\n",
pathname);
return -1;
@@ -415,20 +444,29 @@ rte_eal_config_attach(void)
/* map it as read-only first */
mem_config = (struct rte_mem_config *) mmap(NULL, sizeof(*mem_config),
- PROT_READ, MAP_SHARED, mem_cfg_fd, 0);
+ mmap_flags, MAP_SHARED, mcfg_fd, 0);
if (mem_config == MAP_FAILED) {
- close(mem_cfg_fd);
- mem_cfg_fd = -1;
+ close(mcfg_fd);
+ mcfg_fd = -1;
RTE_LOG(ERR, EAL, "Cannot mmap memory for rte_config! error %i (%s)\n",
errno, strerror(errno));
return -1;
}
- rte_config.mem_config = mem_config;
+ rte_cfg->mem_config = mem_config;
+ *mem_cfg_fd = mcfg_fd;
return 0;
}
+static int
+rte_eal_config_attach(void)
+{
+ return __rte_eal_config_attach(PROT_READ, &mem_cfg_fd,
+ rte_eal_get_runtime_dir(), &internal_config,
+ rte_eal_get_configuration());
+}
+
/* reattach the shared config at exact memory location primary process has it */
static int
rte_eal_config_reattach(void)
--
2.23.0