mem: do not check for invalid socket ID

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 <anatoly.burakov@intel.com>
This commit is contained in:
Anatoly Burakov 2018-10-02 14:34:42 +01:00 committed by Thomas Monjalon
parent 72cf92b318
commit f473b6d191
4 changed files with 13 additions and 8 deletions

View File

@ -123,6 +123,13 @@ API Changes
for any 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.
* mbuf: The ``__rte_mbuf_raw_free()`` and ``__rte_pktmbuf_prefree_seg()``
functions were deprecated since 17.05 and are replaced by

View File

@ -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) {
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;

View File

@ -651,7 +651,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)

View File

@ -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;
return malloc_heap_alloc(type, size, socket_arg, 0,
align == 0 ? 1 : align, 0, false);
}