From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id C234CA04B8; Tue, 5 May 2020 18:09:05 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id A74561D64D; Tue, 5 May 2020 18:09:05 +0200 (CEST) Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by dpdk.org (Postfix) with ESMTP id B76681D64C for ; Tue, 5 May 2020 18:09:03 +0200 (CEST) IronPort-SDR: 4aXptTtD6GW07S3kOBnISNPSyhT/brK3HJ0q+60uv1KBIxGV07+41SoOIKNPnugmAuNFJBRqGj 1x2o7BFId3Ug== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 05 May 2020 09:09:02 -0700 IronPort-SDR: kC+yyOEki87RZLCD6G7L2bSHwz5qJreTq4NgjFw49i0z5C78nAWs48QhiQbrONeVz3scUvhLkr vMFrj0p7P5mg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.73,355,1583222400"; d="scan'208";a="304519099" Received: from aburakov-mobl.ger.corp.intel.com (HELO [10.213.197.31]) ([10.213.197.31]) by FMSMGA003.fm.intel.com with ESMTP; 05 May 2020 09:09:00 -0700 To: Dmitry Kozlyuk , dev@dpdk.org Cc: "Dmitry Malloy (MESHCHANINOV)" , Narcisa Ana Maria Vasile , Fady Bader , Tal Shnaiderman , Bruce Richardson References: <20200410164342.1194634-1-dmitry.kozliuk@gmail.com> <20200428235015.2820677-1-dmitry.kozliuk@gmail.com> <20200428235015.2820677-5-dmitry.kozliuk@gmail.com> From: "Burakov, Anatoly" Message-ID: <971e5bc3-6be8-7ce3-5306-5958f62c5fe4@intel.com> Date: Tue, 5 May 2020 17:08:59 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Thunderbird/68.7.0 MIME-Version: 1.0 In-Reply-To: <20200428235015.2820677-5-dmitry.kozliuk@gmail.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Subject: Re: [dpdk-dev] [PATCH v4 4/8] eal: extract common code for memseg list initialization 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" On 29-Apr-20 12:50 AM, Dmitry Kozlyuk wrote: > All supported OS create memory segment lists (MSL) and reserve VA space > for them in a nearly identical way. Move common code into EAL private > functions to reduce duplication. > > Signed-off-by: Dmitry Kozlyuk > --- Would it be possible to extract all similar code and make it use eal_memseg_list_init? For example, in FreeBSD eal_memory.c in nohuge mode (or in Linux legacy mem) the code remains untouched. I wonder if it can be ported to using this function. > lib/librte_eal/common/eal_common_memory.c | 54 ++++++++++++++++++ > lib/librte_eal/common/eal_private.h | 36 ++++++++++++ > lib/librte_eal/freebsd/eal_memory.c | 57 +++---------------- > lib/librte_eal/linux/eal_memory.c | 68 +++++------------------ > 4 files changed, 113 insertions(+), 102 deletions(-) > > diff --git a/lib/librte_eal/common/eal_common_memory.c b/lib/librte_eal/common/eal_common_memory.c > index 1196a8037..56eff0acb 100644 > --- a/lib/librte_eal/common/eal_common_memory.c > +++ b/lib/librte_eal/common/eal_common_memory.c > @@ -24,6 +24,7 @@ > #include "eal_private.h" > #include "eal_internal_cfg.h" > #include "eal_memcfg.h" > +#include "eal_options.h" > #include "malloc_heap.h" > > /* > @@ -181,6 +182,59 @@ eal_get_virtual_area(void *requested_addr, size_t *size, > return aligned_addr; > } > > +int > +eal_memseg_list_init(struct rte_memseg_list *msl, uint64_t page_sz, > + int n_segs, int socket_id, int type_msl_idx, bool heap) > +{ > + char name[RTE_FBARRAY_NAME_LEN]; > + > + snprintf(name, sizeof(name), MEMSEG_LIST_FMT, page_sz >> 10, socket_id, > + type_msl_idx); > + if (rte_fbarray_init(&msl->memseg_arr, name, n_segs, > + sizeof(struct rte_memseg))) { > + RTE_LOG(ERR, EAL, "Cannot allocate memseg list: %s\n", > + rte_strerror(rte_errno)); > + return -1; > + } > + > + msl->page_sz = page_sz; > + msl->socket_id = socket_id; > + msl->base_va = NULL; > + msl->heap = heap; > + > + RTE_LOG(DEBUG, EAL, "Memseg list allocated: 0x%zxkB at socket %i\n", > + (size_t)page_sz >> 10, socket_id); The log message looks odd here. Maybe change it to indicate that the kB value is the page size, not the size of the memory? > + > + return 0; > +} > + > +int > +eal_memseg_list_alloc(struct rte_memseg_list *msl, int reserve_flags) > +{ > + uint64_t page_sz; > + size_t mem_sz; > + void *addr; > + > + page_sz = msl->page_sz; > + mem_sz = page_sz * msl->memseg_arr.len; > + > + addr = eal_get_virtual_area( > + msl->base_va, &mem_sz, page_sz, 0, reserve_flags); > + if (addr == NULL) { > + if (rte_errno == EADDRNOTAVAIL) > + RTE_LOG(ERR, EAL, "Cannot reserve %llu bytes at [%p] - " > + "please use '--" OPT_BASE_VIRTADDR "' option\n", > + (unsigned long long)mem_sz, msl->base_va); > + else > + RTE_LOG(ERR, EAL, "Cannot reserve memory\n"); > + return -1; > + } > + msl->base_va = addr; > + msl->len = mem_sz; Perhaps add a log message saying that space was allocated for this memseg list? -- Thanks, Anatoly