intrte_mem_lock_page(constvoid*virt)
Lock page in physical memory and prevent from swapping.
Parametersvirt The virtual address.
Returns
0 on success, negative on error.
phys_addr_trte_mem_virt2phy(constvoid*virt)
Get physical address of any mapped virtual address in the current process. It is found by browsing the
/proc/self/pagemap special file. The page must be locked.
Parametersvirt The virtual address.
Returns
The physical address or RTE_BAD_IOVA on error.
rte_iova_trte_mem_virt2iova(constvoid*virt)
Get IO virtual address of any mapped virtual address in the current process.
Note
This function will not check internal page table. Instead, in IOVA as PA mode, it will fall back to
getting real physical address (which may not match the expected IOVA, such as what was specified for
external memory).
Parametersvirt The virtual address.
Returns
The IO address or RTE_BAD_IOVA on error.
void*rte_mem_iova2virt(rte_iova_tiova)
Get virtual memory address corresponding to iova address.
Note
This function read-locks the memory hotplug subsystem, and thus cannot be used within memory-related
callback functions.
Parametersiova The iova address.
Returns
Virtual address corresponding to iova address (or NULL if address does not exist within DPDK memory
map).
structrte_memseg*rte_mem_virt2memseg(constvoid*virt,conststructrte_memseg_list*msl)
Get memseg to which a particular virtual address belongs.
Parametersvirt The virtual address.
msl The memseg list in which to look up based on virt address (can be NULL).
Returns
Memseg pointer on success, or NULL on error.
structrte_memseg_list*rte_mem_virt2memseg_list(constvoid*virt)
Get memseg list corresponding to virtual memory address.
Parametersvirt The virtual address.
Returns
Memseg list to which this virtual address belongs to.
intrte_memseg_walk(rte_memseg_walk_tfunc,void*arg)
Walk list of all memsegs.
Note
This function read-locks the memory hotplug subsystem, and thus cannot be used within memory-related
callback functions.
This function will also walk through externally allocated segments. It is up to the user to decide
whether to skip through these segments.
Parametersfunc Iterator function
arg Argument passed to iterator
Returns
0 if walked over the entire list 1 if stopped by the user -1 if user function reported error
intrte_memseg_contig_walk(rte_memseg_contig_walk_tfunc,void*arg)
Walk each VA-contiguous area.
Note
This function read-locks the memory hotplug subsystem, and thus cannot be used within memory-related
callback functions.
This function will also walk through externally allocated segments. It is up to the user to decide
whether to skip through these segments.
Parametersfunc Iterator function
arg Argument passed to iterator
Returns
0 if walked over the entire list 1 if stopped by the user -1 if user function reported error
intrte_memseg_list_walk(rte_memseg_list_walk_tfunc,void*arg)
Walk each allocated memseg list.
Note
This function read-locks the memory hotplug subsystem, and thus cannot be used within memory-related
callback functions.
This function will also walk through externally allocated segments. It is up to the user to decide
whether to skip through these segments.
Parametersfunc Iterator function
arg Argument passed to iterator
Returns
0 if walked over the entire list 1 if stopped by the user -1 if user function reported error
intrte_memseg_walk_thread_unsafe(rte_memseg_walk_tfunc,void*arg)
Walk list of all memsegs without performing any locking.
Note
This function does not perform any locking, and is only safe to call from within memory-related
callback functions.
Parametersfunc Iterator function
arg Argument passed to iterator
Returns
0 if walked over the entire list 1 if stopped by the user -1 if user function reported error
intrte_memseg_contig_walk_thread_unsafe(rte_memseg_contig_walk_tfunc,void*arg)
Walk each VA-contiguous area without performing any locking.
Note
This function does not perform any locking, and is only safe to call from within memory-related
callback functions.
Parametersfunc Iterator function
arg Argument passed to iterator
Returns
0 if walked over the entire list 1 if stopped by the user -1 if user function reported error
intrte_memseg_list_walk_thread_unsafe(rte_memseg_list_walk_tfunc,void*arg)
Walk each allocated memseg list without performing any locking.
Note
This function does not perform any locking, and is only safe to call from within memory-related
callback functions.
Parametersfunc Iterator function
arg Argument passed to iterator
Returns
0 if walked over the entire list 1 if stopped by the user -1 if user function reported error
intrte_memseg_get_fd(conststructrte_memseg*ms)
Return file descriptor associated with a particular memseg (if available).
Note
This function read-locks the memory hotplug subsystem, and thus cannot be used within memory-related
callback functions.
This returns an internal file descriptor. Performing any operations on this file descriptor is
inherently dangerous, so it should be treated as read-only for all intents and purposes.
Parametersms A pointer to memseg for which to get file descriptor.
Returns
Valid file descriptor in case of success. -1 in case of error, with rte_errno set to the following
values:
• EINVAL - ms pointer was NULL or did not point to a valid memseg
• ENODEV - ms fd is not available
• ENOENT - ms is an unused segment
• ENOTSUP - segment fd's are not supported
intrte_memseg_get_fd_thread_unsafe(conststructrte_memseg*ms)
Return file descriptor associated with a particular memseg (if available).
Note
This function does not perform any locking, and is only safe to call from within memory-related
callback functions.
This returns an internal file descriptor. Performing any operations on this file descriptor is
inherently dangerous, so it should be treated as read-only for all intents and purposes.
Parametersms A pointer to memseg for which to get file descriptor.
Returns
Valid file descriptor in case of success. -1 in case of error, with rte_errno set to the following
values:
• EINVAL - ms pointer was NULL or did not point to a valid memseg
• ENODEV - ms fd is not available
• ENOENT - ms is an unused segment
• ENOTSUP - segment fd's are not supported
intrte_memseg_get_fd_offset(conststructrte_memseg*ms,size_t*offset)
Get offset into segment file descriptor associated with a particular memseg (if available).
Note
This function read-locks the memory hotplug subsystem, and thus cannot be used within memory-related
callback functions.
Parametersms A pointer to memseg for which to get file descriptor.
offset A pointer to offset value where the result will be stored.
Returns
Valid file descriptor in case of success. -1 in case of error, with rte_errno set to the following
values:
• EINVAL - ms pointer was NULL or did not point to a valid memseg
• EINVAL - offset pointer was NULL
• ENODEV - ms fd is not available
• ENOENT - ms is an unused segment
• ENOTSUP - segment fd's are not supported
intrte_memseg_get_fd_offset_thread_unsafe(conststructrte_memseg*ms,size_t*offset)
Get offset into segment file descriptor associated with a particular memseg (if available).
Note
This function does not perform any locking, and is only safe to call from within memory-related
callback functions.
Parametersms A pointer to memseg for which to get file descriptor.
offset A pointer to offset value where the result will be stored.
Returns
Valid file descriptor in case of success. -1 in case of error, with rte_errno set to the following
values:
• EINVAL - ms pointer was NULL or did not point to a valid memseg
• EINVAL - offset pointer was NULL
• ENODEV - ms fd is not available
• ENOENT - ms is an unused segment
• ENOTSUP - segment fd's are not supported
intrte_extmem_register(void*va_addr,size_tlen,rte_iova_tiova_addrs[],unsignedintn_pages,size_tpage_sz)
Register external memory chunk with DPDK.
Note
Using this API is mutually exclusive with rte_malloc family of API's.
This API will not perform any DMA mapping. It is expected that user will do that themselves.
Before accessing this memory in other processes, it needs to be attached in each of those processes
by calling rte_extmem_attach in each other process.
Parametersva_addr Start of virtual area to register. Must be aligned by page_sz.
len Length of virtual area to register. Must be aligned by page_sz.
iova_addrs Array of page IOVA addresses corresponding to each page in this memory area. Can be NULL,
in which case page IOVA addresses will be set to RTE_BAD_IOVA.
n_pages Number of elements in the iova_addrs array. Ignored if iova_addrs is NULL.
page_sz Page size of the underlying memory
Returns
• 0 on success
• -1 in case of error, with rte_errno set to one of the following: EINVAL - one of the parameters was
invalid EEXIST - memory chunk is already registered ENOSPC - no more space in internal config to
store a new memory chunk
intrte_extmem_unregister(void*va_addr,size_tlen)
Unregister external memory chunk with DPDK.
Note
Using this API is mutually exclusive with rte_malloc family of API's.
This API will not perform any DMA unmapping. It is expected that user will do that themselves.
Before calling this function, all other processes must call rte_extmem_detach to detach from the
memory area.
Parametersva_addr Start of virtual area to unregister
len Length of virtual area to unregister
Returns
• 0 on success
• -1 in case of error, with rte_errno set to one of the following: EINVAL - one of the parameters was
invalid ENOENT - memory chunk was not found
intrte_extmem_attach(void*va_addr,size_tlen)
Attach to external memory chunk registered in another process.
Note
Using this API is mutually exclusive with rte_malloc family of API's.
This API will not perform any DMA mapping. It is expected that user will do that themselves.
Parametersva_addr Start of virtual area to register
len Length of virtual area to register
Returns
• 0 on success
• -1 in case of error, with rte_errno set to one of the following: EINVAL - one of the parameters was
invalid ENOENT - memory chunk was not found
intrte_extmem_detach(void*va_addr,size_tlen)
Detach from external memory chunk registered in another process.
Note
Using this API is mutually exclusive with rte_malloc family of API's.
This API will not perform any DMA unmapping. It is expected that user will do that themselves.
Parametersva_addr Start of virtual area to unregister
len Length of virtual area to unregister
Returns
• 0 on success
• -1 in case of error, with rte_errno set to one of the following: EINVAL - one of the parameters was
invalid ENOENT - memory chunk was not found
voidrte_dump_physmem_layout(FILE*f)
Dump the physical memory layout to a file.
Note
This function read-locks the memory hotplug subsystem, and thus cannot be used within memory-related
callback functions.
Parametersf A pointer to a file for output
uint64_trte_eal_get_physmem_size(void)
Get the total amount of available physical memory.
Note
This function read-locks the memory hotplug subsystem, and thus cannot be used within memory-related
callback functions.
Returns
The total amount of available physical memory in bytes.
unsignedrte_memory_get_nchannel(void)
Get the number of memory channels.
Returns
The number of memory channels on the system. The value is 0 if unknown or not the same on all
devices.
unsignedrte_memory_get_nrank(void)
Get the number of memory ranks.
Returns
The number of memory ranks on the system. The value is 0 if unknown or not the same on all devices.
intrte_mem_check_dma_mask(uint8_tmaskbits)
Check if all currently allocated memory segments are compliant with supplied DMA address width.
Parametersmaskbits Address width to check against.
intrte_mem_check_dma_mask_thread_unsafe(uint8_tmaskbits)
Check if all currently allocated memory segments are compliant with supplied DMA address width. This
function will use rte_memseg_walk_thread_unsafe instead of rte_memseg_walk implying memory_hotplug_lock
will not be acquired avoiding deadlock during memory initialization.
This function is just for EAL core memory internal use. Drivers should use the previous
rte_mem_check_dma_mask.
Parametersmaskbits Address width to check against.
voidrte_mem_set_dma_mask(uint8_tmaskbits)
Set dma mask to use once memory initialization is done. Previous functions rte_mem_check_dma_mask and
rte_mem_check_dma_mask_thread_unsafe can not be used safely until memory has been initialized.
intrte_eal_using_phys_addrs(void)
Drivers based on uio will not load unless physical addresses are obtainable. It is only possible to get
physical addresses when running as a privileged user.
Returns
1 if the system is able to obtain physical addresses. 0 if using DMA addresses through an IOMMU.
intrte_mem_event_callback_register(constchar*name,rte_mem_event_callback_tclb,void*arg)
Function used to register callbacks for memory events.
Note
callbacks will happen while memory hotplug subsystem is write-locked, therefore some functions (e.g.
rte_memseg_walk())willcauseadeadlockwhencalledfromwithinsuchcallbacks.
mem event callbacks not being supported is an expected error condition, so user code needs to handle
this situation. In these cases, return value will be -1, and rte_errno will be set to ENOTSUP.
Parametersname Name associated with specified callback to be added to the list.
clb Callback function pointer.
arg Argument to pass to the callback.
Returns
0 on successful callback register -1 on unsuccessful callback register, with rte_errno value
indicating reason for failure.
intrte_mem_event_callback_unregister(constchar*name,void*arg)
Function used to unregister callbacks for memory events.
Parametersname Name associated with specified callback to be removed from the list.
arg Argument to look for among callbacks with specified callback name.
Returns
0 on successful callback unregister -1 on unsuccessful callback unregister, with rte_errno value
indicating reason for failure.
intrte_mem_alloc_validator_register(constchar*name,rte_mem_alloc_validator_tclb,intsocket_id,size_tlimit)
Register validator callback for memory allocations. Callbacks registered by this function will be called
right before memory allocator is about to trigger allocation of more pages from the system if said
allocation will bring total memory usage above specified limit on specified socket. User will be able to
cancel pending allocation if callback returns -1.
Note
callbacks will happen while memory hotplug subsystem is write-locked, therefore some functions (e.g.
rte_memseg_walk())willcauseadeadlockwhencalledfromwithinsuchcallbacks.
validator callbacks not being supported is an expected error condition, so user code needs to handle
this situation. In these cases, return value will be -1, and rte_errno will be set to ENOTSUP.
Parametersname Name associated with specified callback to be added to the list.
clb Callback function pointer.
socket_id Socket ID on which to watch for allocations.
limit Limit above which to trigger callbacks.
Returns
0 on successful callback register -1 on unsuccessful callback register, with rte_errno value
indicating reason for failure.
intrte_mem_alloc_validator_unregister(constchar*name,intsocket_id)
Unregister validator callback for memory allocations.
Parametersname Name associated with specified callback to be removed from the list.
socket_id Socket ID on which to watch for allocations.
Returns
0 on successful callback unregister -1 on unsuccessful callback unregister, with rte_errno value
indicating reason for failure.