From patchwork Sat Jul 25 19:36:29 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ravi Kerur X-Patchwork-Id: 6598 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 BE384C4BE; Sat, 25 Jul 2015 21:36:42 +0200 (CEST) Received: from mail-pd0-f179.google.com (mail-pd0-f179.google.com [209.85.192.179]) by dpdk.org (Postfix) with ESMTP id 5BCD5C482 for ; Sat, 25 Jul 2015 21:36:39 +0200 (CEST) Received: by pdjr16 with SMTP id r16so30286928pdj.3 for ; Sat, 25 Jul 2015 12:36:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=JCfmltk7LWCV/QmvE8Mbn7G2vOXSpVYQ6HoAfrOMDfo=; b=vJLYNr3ZoNOSQdzwbCtWi7sh+mHTzHH4HBAnzpHgHC+vFEV5188xj+h/G9A7s8THLT wjUVAB0DRwY1P2stQx188uigz+vZqbPCHRuVCdP/vrtrkqSPVLl+dwwacqSMBCrpwBsh M2GJT6uH+AmB7QVaEGa4o4wwyc0g8XEy2Kn6uRuAMCsMAEE3C+HUZ0TKWsWF7vENcdFG kvAhPSVa/Zq0s8JdUeq5CoGW92U/98bqJz5kmxCaV615XyhDOFfw5askptT2xEK4qHNf u7grUutPw1cA6otfrK32CHwGw9jIQxDIiIUgEDk35F7eW2PMtAKlWkhJVT89kGTcnabN edaA== X-Received: by 10.70.87.195 with SMTP id ba3mr47689394pdb.154.1437852998761; Sat, 25 Jul 2015 12:36:38 -0700 (PDT) Received: from user-PC.hsd1.ca.comcast.net (c-98-234-176-9.hsd1.ca.comcast.net. [98.234.176.9]) by smtp.gmail.com with ESMTPSA id u16sm10325066pdl.71.2015.07.25.12.36.37 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sat, 25 Jul 2015 12:36:38 -0700 (PDT) From: Ravi Kerur To: dev@dpdk.org Date: Sat, 25 Jul 2015 12:36:29 -0700 Message-Id: <1437852990-6096-3-git-send-email-rkerur@gmail.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1437852990-6096-1-git-send-email-rkerur@gmail.com> References: <1437852868-6031-1-git-send-email-rkerur@gmail.com> <1437852990-6096-1-git-send-email-rkerur@gmail.com> Subject: [dpdk-dev] [PATCH v9 3/3] Move common functions in eal_memory.c X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" 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 --- 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 #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; imemseg[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; imemseg[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; }