From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by dpdk.org (Postfix) with ESMTP id 7A1781B465 for ; Thu, 27 Sep 2018 15:22:06 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga002.jf.intel.com ([10.7.209.21]) by fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 27 Sep 2018 06:22:05 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.54,310,1534834800"; d="scan'208";a="95353045" Received: from aburakov-mobl1.ger.corp.intel.com (HELO [10.237.220.55]) ([10.237.220.55]) by orsmga002.jf.intel.com with ESMTP; 27 Sep 2018 06:21:57 -0700 To: Alejandro Lucero Cc: dev , "Mcnamara, John" , marko.kovacevic@intel.com, laszlo.madarassy@ericsson.com, laszlo.vadkerti@ericsson.com, andras.kovacs@ericsson.com, winnie.tian@ericsson.com, daniel.andrasi@ericsson.com, janos.kobor@ericsson.com, geza.koblo@ericsson.com, srinath.mannam@broadcom.com, scott.branden@broadcom.com, Ajit Khaparde , "Wiles, Keith" , Bruce Richardson , Thomas Monjalon , Shreyansh Jain , Shahaf Shuler , Andrew Rybchenko References: From: "Burakov, Anatoly" Message-ID: <0b8c2280-f627-87b2-0768-0a4b26b69186@intel.com> Date: Thu, 27 Sep 2018 14:21:56 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Subject: Re: [dpdk-dev] [PATCH v6 04/21] mem: do not check for invalid socket ID 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: , X-List-Received-Date: Thu, 27 Sep 2018 13:22:07 -0000 On 27-Sep-18 2:14 PM, Alejandro Lucero wrote: > On Thu, Sep 27, 2018 at 11:41 AM Anatoly Burakov > wrote: > >> We will be assigning "invalid" socket ID's to external heap, and >> malloc will now be able to verify if a supplied socket ID is in >> fact a valid one, rendering parameter checks for sockets >> obsolete. >> >> This changes the semantics of what we understand by "socket ID", >> so document the change in the release notes. >> >> Signed-off-by: Anatoly Burakov >> --- >> doc/guides/rel_notes/release_18_11.rst | 7 +++++++ >> lib/librte_eal/common/eal_common_memzone.c | 8 +++++--- >> lib/librte_eal/common/malloc_heap.c | 2 +- >> lib/librte_eal/common/rte_malloc.c | 4 ---- >> 4 files changed, 13 insertions(+), 8 deletions(-) >> >> diff --git a/doc/guides/rel_notes/release_18_11.rst >> b/doc/guides/rel_notes/release_18_11.rst >> index 5fc71e208..6ee236302 100644 >> --- a/doc/guides/rel_notes/release_18_11.rst >> +++ b/doc/guides/rel_notes/release_18_11.rst >> @@ -98,6 +98,13 @@ API Changes >> users of memseg-walk-related functions, as they will now have to skip >> externally allocated segments in most cases if the intent is to only >> iterate >> over internal DPDK memory. >> + - ``socket_id`` parameter across the entire DPDK has gained additional >> + meaning, as some socket ID's will now be representing externally >> allocated >> + memory. No changes will be required for existing code as backwards >> + compatibility will be kept, and those who do not use this feature >> will not >> + see these extra socket ID's. Any new API's must not check socket ID >> + parameters themselves, and must instead leave it to the memory >> subsystem to >> + decide whether socket ID is a valid one. >> >> ABI Changes >> ----------- >> diff --git a/lib/librte_eal/common/eal_common_memzone.c >> b/lib/librte_eal/common/eal_common_memzone.c >> index 7300fe05d..b7081afbf 100644 >> --- a/lib/librte_eal/common/eal_common_memzone.c >> +++ b/lib/librte_eal/common/eal_common_memzone.c >> @@ -120,13 +120,15 @@ memzone_reserve_aligned_thread_unsafe(const char >> *name, size_t len, >> return NULL; >> } >> >> - if ((socket_id != SOCKET_ID_ANY) && >> - (socket_id >= RTE_MAX_NUMA_NODES || socket_id < 0)) { >> + if ((socket_id != SOCKET_ID_ANY) && socket_id < 0) { >> > > Should not it be better to use RTE_MAX_HEAP instead of removing the check? First of all, maximum number of heaps should not concern the rest of the code - this is purely internal detail of rte_malloc. More importantly, socket ID is completely independent from number of heaps. Socket ID is incremented each time a new heap is created, and they are not reused. If you create and destroy a heap 100 times - you'll get 100 different socket ID's, even though max number of heaps is less than that. > > > >> rte_errno = EINVAL; >> return NULL; >> } >> >> - if (!rte_eal_has_hugepages()) >> + /* only set socket to SOCKET_ID_ANY if we aren't allocating for an >> + * external heap. >> + */ >> + if (!rte_eal_has_hugepages() && socket_id < RTE_MAX_NUMA_NODES) >> socket_id = SOCKET_ID_ANY; >> >> contig = (flags & RTE_MEMZONE_IOVA_CONTIG) != 0; >> diff --git a/lib/librte_eal/common/malloc_heap.c >> b/lib/librte_eal/common/malloc_heap.c >> index 1d1e35708..73e478076 100644 >> --- a/lib/librte_eal/common/malloc_heap.c >> +++ b/lib/librte_eal/common/malloc_heap.c >> @@ -647,7 +647,7 @@ malloc_heap_alloc(const char *type, size_t size, int >> socket_arg, >> if (size == 0 || (align && !rte_is_power_of_2(align))) >> return NULL; >> >> - if (!rte_eal_has_hugepages()) >> + if (!rte_eal_has_hugepages() && socket_arg < RTE_MAX_NUMA_NODES) >> socket_arg = SOCKET_ID_ANY; >> >> if (socket_arg == SOCKET_ID_ANY) >> diff --git a/lib/librte_eal/common/rte_malloc.c >> b/lib/librte_eal/common/rte_malloc.c >> index 73d6df31d..9ba1472c3 100644 >> --- a/lib/librte_eal/common/rte_malloc.c >> +++ b/lib/librte_eal/common/rte_malloc.c >> @@ -47,10 +47,6 @@ rte_malloc_socket(const char *type, size_t size, >> unsigned int align, >> if (!rte_eal_has_hugepages()) >> socket_arg = SOCKET_ID_ANY; >> >> - /* Check socket parameter */ >> - if (socket_arg >= RTE_MAX_NUMA_NODES) >> - return NULL; >> - >> > > Sane than before. Better to keep the sanity check using RTE_MAX_HEAPS. same as above :) -- Thanks, Anatoly