From: Ravi Kerur <rkerur@gmail.com>
To: dev@dpdk.org
Subject: [dpdk-dev] [PATCH v9 3/3] Move common functions in eal_memory.c
Date: Sat, 25 Jul 2015 12:36:29 -0700 [thread overview]
Message-ID: <1437852990-6096-3-git-send-email-rkerur@gmail.com> (raw)
In-Reply-To: <1437852990-6096-1-git-send-email-rkerur@gmail.com>
Changes in v9
Rebase to latest code.
Changes in v8
None
Changes in v7
None
Changes in v6
Removed unnecessary comments in function declaration.
Changes in v5
Rebase to latest code.
Changes in v4
Make rte_eal_hugepage_init and rte_eal_hugepage_attach as
wrapper functions for BSD.
Changes in v3
Changed subject to be more explicit on file name inclusion.
Changes in v2
Use common function names rte_eal_hugepage_init and
rte_eal_hugepage_attach for BSD and Linux. Update comments about its
actuality in function declaration.
Changes in v1
Move common functions in eal_memory.c to librte_eal/common/
eal_common_memory.c file.
Following functions are moved to eal_common_memory.c file
static int rte_eal_memdevice_init(void); int rte_eal_memory_init(void);
Fix checkpatch warnings and errors.
Signed-off-by: Ravi Kerur <rkerur@gmail.com>
---
lib/librte_eal/bsdapp/eal/eal_memory.c | 52 ++++++++++++++-----------------
lib/librte_eal/common/eal_common_memory.c | 41 ++++++++++++++++++++++--
lib/librte_eal/common/eal_private.h | 29 +++++++++++++++--
lib/librte_eal/linuxapp/eal/eal_memory.c | 52 ++++++-------------------------
4 files changed, 98 insertions(+), 76 deletions(-)
diff --git a/lib/librte_eal/bsdapp/eal/eal_memory.c b/lib/librte_eal/bsdapp/eal/eal_memory.c
index a3242a5..28231bb 100644
--- a/lib/librte_eal/bsdapp/eal/eal_memory.c
+++ b/lib/librte_eal/bsdapp/eal/eal_memory.c
@@ -59,7 +59,7 @@ rte_mem_virt2phy(const void *virtaddr)
return RTE_BAD_PHYS_ADDR;
}
-static int
+static inline int
rte_eal_contigmem_init(void)
{
struct rte_mem_config *mcfg;
@@ -132,7 +132,16 @@ rte_eal_contigmem_init(void)
return 0;
}
-static int
+/*
+ * Wrapper function to initialize contigmem.
+ */
+int
+rte_eal_hugepage_init(void)
+{
+ return rte_eal_contigmem_init();
+}
+
+static inline int
rte_eal_contigmem_attach(void)
{
const struct hugepage_info *hpi;
@@ -193,35 +202,20 @@ error:
return -1;
}
-
-static int
-rte_eal_memdevice_init(void)
+/*
+ * Wrapper function to attach contigmem.
+ */
+int
+rte_eal_hugepage_attach(void)
{
- struct rte_config *config;
-
- if (rte_eal_process_type() == RTE_PROC_SECONDARY)
- return 0;
-
- config = rte_eal_get_configuration();
- config->mem_config->nchannel = internal_config.force_nchannel;
- config->mem_config->nrank = internal_config.force_nrank;
-
- return 0;
+ return rte_eal_contigmem_attach();
}
-/* init memory subsystem */
-int
-rte_eal_memory_init(void)
+/*
+ * Wrapper function, no-op here.
+ */
+void
+test_proc_pagemap_readable(void)
{
- RTE_LOG(INFO, EAL, "Setting up physically contiguous memory...\n");
- const int retval = rte_eal_process_type() == RTE_PROC_PRIMARY ?
- rte_eal_contigmem_init() :
- rte_eal_contigmem_attach();
- if (retval < 0)
- return -1;
-
- if (internal_config.no_shconf == 0 && rte_eal_memdevice_init() < 0)
- return -1;
-
- return 0;
+ return;
}
diff --git a/lib/librte_eal/common/eal_common_memory.c b/lib/librte_eal/common/eal_common_memory.c
index 9a07b1e..95f0a50 100644
--- a/lib/librte_eal/common/eal_common_memory.c
+++ b/lib/librte_eal/common/eal_common_memory.c
@@ -45,6 +45,7 @@
#include <rte_log.h>
#include "eal_private.h"
+#include "eal_internal_cfg.h"
/*
* Return a pointer to a read-only table of struct rte_physmem_desc
@@ -69,7 +70,7 @@ rte_eal_get_physmem_size(void)
/* get pointer to global configuration */
mcfg = rte_eal_get_configuration()->mem_config;
- for (i=0; i<RTE_MAX_MEMSEG; i++) {
+ for (i = 0; i < RTE_MAX_MEMSEG; i++) {
if (mcfg->memseg[i].addr == NULL)
break;
@@ -89,7 +90,7 @@ rte_dump_physmem_layout(FILE *f)
/* get pointer to global configuration */
mcfg = rte_eal_get_configuration()->mem_config;
- for (i=0; i<RTE_MAX_MEMSEG; i++) {
+ for (i = 0; i < RTE_MAX_MEMSEG; i++) {
if (mcfg->memseg[i].addr == NULL)
break;
@@ -118,3 +119,39 @@ unsigned rte_memory_get_nrank(void)
{
return rte_eal_get_configuration()->mem_config->nrank;
}
+
+static int
+rte_eal_memdevice_init(void)
+{
+ struct rte_config *config;
+
+ if (rte_eal_process_type() == RTE_PROC_SECONDARY)
+ return 0;
+
+ config = rte_eal_get_configuration();
+ config->mem_config->nchannel = internal_config.force_nchannel;
+ config->mem_config->nrank = internal_config.force_nrank;
+
+ return 0;
+}
+
+/* init memory subsystem */
+int
+rte_eal_memory_init(void)
+{
+ RTE_LOG(INFO, EAL, "Setting up physically contiguous memory...\n");
+
+ test_proc_pagemap_readable();
+
+ const int retval = rte_eal_process_type() == RTE_PROC_PRIMARY ?
+ rte_eal_hugepage_init() :
+ rte_eal_hugepage_attach();
+
+ if (retval < 0)
+ return -1;
+
+ if (internal_config.no_shconf == 0 && rte_eal_memdevice_init() < 0)
+ return -1;
+
+ return 0;
+}
diff --git a/lib/librte_eal/common/eal_private.h b/lib/librte_eal/common/eal_private.h
index b33b701..58510ca 100644
--- a/lib/librte_eal/common/eal_private.h
+++ b/lib/librte_eal/common/eal_private.h
@@ -324,8 +324,6 @@ void set_tsc_freq(void);
/**
* This function sets TSC frequency from sysctl
* for BSD and from clock for Linux.
- * Is a wrapper function for BSD which will
- * internally call set_tsc_freq_from_sysctl.
*
* This function is private to the EAL.
*/
@@ -338,4 +336,31 @@ int set_tsc_freq_from_clock(void);
*/
void rte_set_tsc_hz(uint64_t tsc_hz);
+/**
+ * This function prepares physical memory mapping
+ * i.e. hugepages on Linux and
+ * contigmem on BSD.
+ *
+ * This function is private to the EAL.
+ */
+int rte_eal_hugepage_init(void);
+
+/**
+ * This function creates memory mapping in secondary
+ * i.e. hugepages on Linux and
+ * contigmem on BSD.
+ *
+ * This function is private to the EAL.
+ */
+int rte_eal_hugepage_attach(void);
+
+/**
+ * This function checks /proc filesystem
+ * on Linux.
+ *
+ * This function is private to the EAL.
+ */
+void
+test_proc_pagemap_readable(void);
+
#endif /* _EAL_PRIVATE_H_ */
diff --git a/lib/librte_eal/linuxapp/eal/eal_memory.c b/lib/librte_eal/linuxapp/eal/eal_memory.c
index d529016..4ac6cb2 100644
--- a/lib/librte_eal/linuxapp/eal/eal_memory.c
+++ b/lib/librte_eal/linuxapp/eal/eal_memory.c
@@ -1037,7 +1037,7 @@ calc_num_pages_per_socket(uint64_t * memory,
* 6. unmap the first mapping
* 7. fill memsegs in configuration with contiguous zones
*/
-static int
+int
rte_eal_hugepage_init(void)
{
struct rte_mem_config *mcfg;
@@ -1378,7 +1378,7 @@ getFileSize(int fd)
* configuration and finds the hugepages which form that segment, mapping them
* in order to form a contiguous block in the virtual memory space
*/
-static int
+int
rte_eal_hugepage_attach(void)
{
const struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config;
@@ -1539,55 +1539,21 @@ error:
return -1;
}
-static int
-rte_eal_memdevice_init(void)
-{
- struct rte_config *config;
-
- if (rte_eal_process_type() == RTE_PROC_SECONDARY)
- return 0;
-
- config = rte_eal_get_configuration();
- config->mem_config->nchannel = internal_config.force_nchannel;
- config->mem_config->nrank = internal_config.force_nrank;
-
- return 0;
-}
-
-static int
+void
test_proc_pagemap_readable(void)
{
int fd = open("/proc/self/pagemap", O_RDONLY);
- if (fd < 0)
- return 0;
- /* Is readable */
- close(fd);
-
- return 1;
-}
-
-/* init memory subsystem */
-int
-rte_eal_memory_init(void)
-{
- RTE_LOG(INFO, EAL, "Setting up memory...\n");
-
- proc_pagemap_readable = test_proc_pagemap_readable();
- if (!proc_pagemap_readable)
+ if (fd < 0) {
RTE_LOG(ERR, EAL,
"Cannot open /proc/self/pagemap: %s. "
"virt2phys address translation will not work\n",
strerror(errno));
+ return;
+ }
- const int retval = rte_eal_process_type() == RTE_PROC_PRIMARY ?
- rte_eal_hugepage_init() :
- rte_eal_hugepage_attach();
- if (retval < 0)
- return -1;
-
- if (internal_config.no_shconf == 0 && rte_eal_memdevice_init() < 0)
- return -1;
+ /* Is readable */
+ close(fd);
- return 0;
+ proc_pagemap_readable = 1;
}
--
1.9.1
next prev parent reply other threads:[~2015-07-25 19:36 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-25 19:34 [dpdk-dev] [PATCH v9 0/3] Move EAL common functions Ravi Kerur
2015-07-25 19:36 ` [dpdk-dev] [PATCH v9 1/3] Move common functions in eal_lcore.c Ravi Kerur
2015-07-25 19:36 ` [dpdk-dev] [PATCH v9 2/3] Move common functions in eal_timer.c Ravi Kerur
2015-07-26 23:32 ` Thomas Monjalon
2015-07-26 23:40 ` Thomas Monjalon
2015-07-25 19:36 ` Ravi Kerur [this message]
2015-07-27 0:35 ` [dpdk-dev] [PATCH v9 3/3] Move common functions in eal_memory.c Thomas Monjalon
2015-07-25 19:36 ` [dpdk-dev] [PATCH v9 0/3] Move EAL common functions Ravi Kerur
2015-07-27 0:56 ` [dpdk-dev] [PATCH v10 0/3] deduplicate " Thomas Monjalon
2015-07-27 0:56 ` [dpdk-dev] [PATCH v10 1/3] eal: deduplicate lcore initialization Thomas Monjalon
2015-07-27 0:56 ` [dpdk-dev] [PATCH v10 2/3] eal: deduplicate timer functions Thomas Monjalon
2015-07-27 0:56 ` [dpdk-dev] [PATCH v10 3/3] eal: deduplicate memory initialization Thomas Monjalon
2015-07-27 0:59 ` [dpdk-dev] [PATCH v10 0/3] deduplicate EAL common functions Thomas Monjalon
2015-07-30 8:12 ` Olivier MATZ
2015-07-30 12:15 ` Ravi Kerur
2015-07-30 13:43 ` 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=1437852990-6096-3-git-send-email-rkerur@gmail.com \
--to=rkerur@gmail.com \
--cc=dev@dpdk.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).