rte_gpudev.h(3)
๐ rte_gpudev.h โ Library Functions Manual ๐ฆ
okay bestie, sit DOWN. this is the manpage that ships in the Library Functions Manual and it's basically the group chat between your CPU and your GPU. it is long so we're doing it in parts, and this is part 1. grab a snack. ๐
โจ NAME โจ
rte_gpudev.h โ that's it, that's the name. the whole generic GPU interaction header. no notes. ๐
๐ธ SYNOPSIS ๐ธ
#include <stddef.h>
#include <stdint.h>
#include <stdbool.h>
#include <rte_mbuf.h>
#include <rte_bitops.h>
#include <rte_compat.h>
๐ง Data Structures
struct rte_gpu_infostruct rte_gpu_comm_flagstruct rte_gpu_comm_pktstruct rte_gpu_comm_list
๐ Macros
#define RTE_GPU_DEFAULT_MAX 32
#define RTE_GPU_ID_NONE -1
#define RTE_GPU_ID_ANY INT16_MIN
#define RTE_GPU_CALLBACK_ANY_DATA ((void *)-1)
#define RTE_GPU_VOLATILE(x)
#define RTE_GPU_COMM_LIST_PKTS_MAX 1024
#define RTE_GPU_FOREACH(dev_id)
#define RTE_GPU_FOREACH_PARENT(dev_id)
#define RTE_GPU_FOREACH_CHILD(dev_id, parent)
๐ Typedefs
typedef void rte_gpu_callback_t(int16_t dev_id, enum rte_gpu_event
event, void *user_data)
๐ Enumerations
enum rte_gpu_event { RTE_GPU_EVENT_NEW, RTE_GPU_EVENT_DEL }
enum rte_gpu_comm_flag_type { RTE_GPU_COMM_FLAG_CPU = 0 }
enum rte_gpu_comm_list_status { RTE_GPU_COMM_LIST_FREE = 0,
RTE_GPU_COMM_LIST_READY, RTE_GPU_COMM_LIST_DONE,
RTE_GPU_COMM_LIST_ERROR }
โญ Functions
__rte_experimental int rte_gpu_init (size_t dev_max)
__rte_experimental uint16_t rte_gpu_count_avail (void)
__rte_experimental bool rte_gpu_is_valid (int16_t dev_id)
__rte_experimental int16_t rte_gpu_add_child (const char *name, int16_t
parent, uint64_t child_context)
__rte_experimental int16_t rte_gpu_find_next (int16_t dev_id, int16_t
parent)
__rte_experimental int rte_gpu_close (int16_t dev_id)
__rte_experimental int rte_gpu_callback_register (int16_t dev_id, enum
rte_gpu_event event, rte_gpu_callback_t *function, void *user_data)
__rte_experimental int rte_gpu_callback_unregister (int16_t dev_id, enum
rte_gpu_event event, rte_gpu_callback_t *function, void *user_data)
__rte_experimental int rte_gpu_info_get (int16_t dev_id, struct
rte_gpu_info *info)
__rte_experimental void * rte_gpu_mem_alloc (int16_t dev_id, size_t
size, unsigned int align) __rte_alloc_size(2)
__rte_experimental int rte_gpu_mem_free (int16_t dev_id, void *ptr)
__rte_experimental int rte_gpu_mem_register (int16_t dev_id, size_t
size, void *ptr)
__rte_experimental int rte_gpu_mem_unregister (int16_t dev_id, void
*ptr)
__rte_experimental void * rte_gpu_mem_cpu_map (int16_t dev_id, size_t
size, void *ptr)
__rte_experimental int rte_gpu_mem_cpu_unmap (int16_t dev_id, void *ptr)
__rte_experimental int rte_gpu_wmb (int16_t dev_id)
__rte_experimental int rte_gpu_comm_create_flag (uint16_t dev_id, struct
rte_gpu_comm_flag *devflag, enum rte_gpu_comm_flag_type mtype)
__rte_experimental int rte_gpu_comm_destroy_flag (struct
rte_gpu_comm_flag *devflag)
__rte_experimental int rte_gpu_comm_set_flag (struct rte_gpu_comm_flag
*devflag, uint32_t val)
__rte_experimental int rte_gpu_comm_get_flag_value (struct
rte_gpu_comm_flag *devflag, uint32_t *val)
__rte_experimental struct rte_gpu_comm_list * rte_gpu_comm_create_list
(uint16_t dev_id, uint32_t num_comm_items)
__rte_experimental int rte_gpu_comm_destroy_list (struct
rte_gpu_comm_list *comm_list, uint32_t num_comm_items)
__rte_experimental int rte_gpu_comm_populate_list_pkts (struct
rte_gpu_comm_list *comm_list_item, struct rte_mbuf **mbufs, uint32_t
num_mbufs)
__rte_experimental int rte_gpu_comm_set_status (struct rte_gpu_comm_list
*comm_list_item, enum rte_gpu_comm_list_status status)
__rte_experimental int rte_gpu_comm_get_status (struct rte_gpu_comm_list
*comm_list_item, enum rte_gpu_comm_list_status *status)
__rte_experimental int rte_gpu_comm_cleanup_list (struct
rte_gpu_comm_list *comm_list_item)
๐ซถ Detailed Description ๐ซถ
it's the generic library to interact with GPU computing device. ๐ปโจ
ngl the thing you GOTTA internalize: the API is not thread-safe. Device management must be done by a single thread. one thread. that's the vibe. don't multitask it, bestie, it will not slay. ๐ญ
Warning โ EXPERIMENTAL: this API may change without prior notice. (translation: it's giving "we might redo this", so don't build your whole personality on it ๐ฅ)
Definition in file rte_gpudev.h.
๐ฅ Macro Definition Documentation ๐ฅ
#define RTE_GPU_DEFAULT_MAX 32
Maximum number of devices if rte_gpu_init() is not called. so if you never bother calling init, you get 32 slots, and that's the defaults doing their job ๐
Definition at line 32 of file rte_gpudev.h.
#define RTE_GPU_ID_NONE -1
Empty device ID. the "nobody's home" ID ๐ช
Definition at line 35 of file rte_gpudev.h.
#define RTE_GPU_ID_ANY INT16_MIN
Catch-all device ID. it catches all of them, periodt.
Definition at line 37 of file rte_gpudev.h.
#define RTE_GPU_CALLBACK_ANY_DATA ((void *)-1)
Catch-all callback data. same energy, but for the data blob you hand to a callback ๐
Definition at line 40 of file rte_gpudev.h.
#define RTE_GPU_VOLATILE( x)
Value:
(*(volatile typeof(x) *)&(x))
Access variable as volatile. this is the "hey compiler, do NOT get clever with this one" button ๐
Definition at line 43 of file rte_gpudev.h.
#define RTE_GPU_COMM_LIST_PKTS_MAX 1024
Max number of packets per communication list. 1024 packets, that's the ceiling โจ
Definition at line 46 of file rte_gpudev.h.
#define RTE_GPU_FOREACH( dev_id)
Value:
RTE_GPU_FOREACH_CHILD(dev_id, RTE_GPU_ID_ANY)
Warning โ EXPERIMENTAL: this API may change without prior notice.
Macro to iterate over all valid GPU devices. it's the "for every one of you" loop ๐
Parameters
dev_idโ The ID of the next possible valid device, usually 0 to iterate all.
Definition at line 238 of file rte_gpudev.h.
#define RTE_GPU_FOREACH_PARENT( dev_id)
Value:
RTE_GPU_FOREACH_CHILD(dev_id, RTE_GPU_ID_NONE)
Warning โ EXPERIMENTAL: this API may change without prior notice.
Macro to iterate over all valid computing devices having no parent. the parentless ones, the independents, the main characters ๐
Parameters
dev_idโ The ID of the next possible valid device, usually 0 to iterate all.
Definition at line 250 of file rte_gpudev.h.
#define RTE_GPU_FOREACH_CHILD( dev_id, parent)
Value:
for (dev_id = rte_gpu_find_next(0, parent); \
dev_id >= 0; \
dev_id = rte_gpu_find_next(dev_id + 1, parent))
Warning โ EXPERIMENTAL: this API may change without prior notice.
Macro to iterate over all valid children of a computing device parent. yes, it literally just loops rte_gpu_find_next() until it hits -1. iconic behavior ๐ฆ
Parameters
dev_idโ The ID of the next possible valid device, usually 0 to iterate all.parentโ The device ID of the parent.
Definition at line 264 of file rte_gpudev.h.
๐ Typedef Documentation ๐
typedef void rte_gpu_callback_t(int16_t dev_id, enum rte_gpu_event event, void *user_data)
Prototype of event callback function. this is the shape your function has to take if you wanna be notified when stuff happens ๐ฃ
Definition at line 77 of file rte_gpudev.h.
๐ Enumeration Type Documentation ๐
enum rte_gpu_event
Flags passed in notification callback. your "what just happened" menu ๐ซ
Enumerator
RTE_GPU_EVENT_NEWโ Device is just initialized. (baby device!! ๐ถ)RTE_GPU_EVENT_DELโ Device is going to be released. (saying goodbye ๐ญ)
Definition at line 69 of file rte_gpudev.h.
enum rte_gpu_comm_flag_type
Memory where communication flag is allocated. where's the flag living, bestie ๐
Enumerator
RTE_GPU_COMM_FLAG_CPUโ Allocate flag on CPU memory visible from device.
Definition at line 81 of file rte_gpudev.h.
enum rte_gpu_comm_list_status
Possible status for the list of packets shared among CPU and device. it's the relationship status of your packet list ๐๐
Enumerator
RTE_GPU_COMM_LIST_FREEโ Packet list can be filled with new mbufs, no one is using it.RTE_GPU_COMM_LIST_READYโ Packet list has been filled with new mbufs and it's ready to be used .RTE_GPU_COMM_LIST_DONEโ Packet list has been processed, it's ready to be freed.RTE_GPU_COMM_LIST_ERRORโ Some error occurred during packet list processing.
Definition at line 105 of file rte_gpudev.h.
โญ Function Documentation โญ
__rte_experimental int rte_gpu_init (size_t dev_max)
Warning โ EXPERIMENTAL: this API may change without prior notice.
Initialize the device array before probing devices. If not called, the maximum of probed devices is RTE_GPU_DEFAULT_MAX.
Parameters
dev_maxโ Maximum number of devices.
Returns
0 on success, -rte_errno otherwise:
ENOMEMif out of memoryEINVALif 0 sizeEBUSYif already initialized
__rte_experimental uint16_t rte_gpu_count_avail (void )
Warning โ EXPERIMENTAL: this API may change without prior notice.
Return the number of GPU detected and associated to DPDK. headcount time ๐งฎโจ
Returns
The number of available computing devices.
__rte_experimental bool rte_gpu_is_valid (int16_t dev_id)
Warning โ EXPERIMENTAL: this API may change without prior notice.
Check if the device is valid and initialized in DPDK. the vibe check function ๐ต๏ธโ๏ธ
Parameters
dev_idโ The input device ID.
Returns
- True if
dev_idis a valid and initialized computing device. - False otherwise.
__rte_experimental int16_t rte_gpu_add_child (const char * name, int16_t parent, uint64_t child_context)
Warning โ EXPERIMENTAL: this API may change without prior notice.
Create a virtual device representing a context in the parent device. it's giving "the parent device had a baby device" ๐ผ
Parameters
nameโ Unique string to identify the device.parentโ Device ID of the parent.child_contextโ Opaque context handler.
Returns
Device ID of the new created child, -rte_errno otherwise:
EINVALif empty nameENAMETOOLONGif long nameEEXISTif existing device nameENODEVif invalid parentEPERMif secondary processENOENTif too many devicesENOMEMif out of space
__rte_experimental int16_t rte_gpu_find_next (int16_t dev_id, int16_t parent)
Warning โ EXPERIMENTAL: this API may change without prior notice.
Get the ID of the next valid GPU initialized in DPDK. it's the "who's next" of GPU device IDs ๐
Parameters
dev_idโ The initial device ID to start the research.parentโ The device ID of the parent.RTE_GPU_ID_NONEmeans no parent.RTE_GPU_ID_ANYmeans no or any parent.
Returns
Next device ID corresponding to a valid and initialized computing device, RTE_GPU_ID_NONE if there is none.
__rte_experimental int rte_gpu_close (int16_t dev_id)
Warning โ EXPERIMENTAL: this API may change without prior notice.
Close device or child context. All resources are released. everything gets cleaned up, no crumbs left behind ๐งนโจ
Parameters
dev_idโ Device ID to close.
Returns
0 on success, -rte_errno otherwise:
ENODEVif invaliddev_idEPERMif driver error
__rte_experimental int rte_gpu_callback_register (int16_t dev_id, enum rte_gpu_event event, rte_gpu_callback_t * function, void * user_data)
Warning โ EXPERIMENTAL: this API may change without prior notice.
Register a function as event callback. A function may be registered multiple times for different events. no cap, the same function can show up for multiple events ๐
Parameters
dev_idโ Device ID to get notified about.RTE_GPU_ID_ANYmeans all devices.eventโ Device event to be registered for.functionโ Callback function to be called on event.user_dataโ Optional parameter passed in the callback.
Returns
0 on success, -rte_errno otherwise:
ENODEVif invaliddev_idEINVALifNULLfunction- ENOMEM if out of memory ๐
๐
rte_gpu_callback_unregister
__rte_experimental int rte_gpu_callback_unregister (int16_t dev_id, enum rte_gpu_event event, rte_gpu_callback_t * function, void * user_data)
โ ๏ธ EXPERIMENTAL: this API may change without prior notice. It's giving "don't get attached, bestie".
Unregister for an event. Basically it's the breakup text for a callback you set up earlier โ you want it gone, it's gone. โจ
Parameters
dev_idโ device ID to be silenced.RTE_GPU_ID_ANYmeans all devices, aka "silence everyone, I can't do this rn".eventโ registered event.functionโ registered function.user_dataโ optional parameter as registered.RTE_GPU_CALLBACK_ANY_DATAis a catch-all, so it matches literally everything, lowkey iconic.
Returns
0 on success, -rte_errno otherwise:
ENODEVif invaliddev_idEINVALifNULLfunction
๐ง rte_gpu_info_get
__rte_experimental int rte_gpu_info_get (int16_t dev_id, struct rte_gpu_info * info)
โ ๏ธ EXPERIMENTAL: this API may change without prior notice.
Return device specific info. It's the "tell me everything about yourself" function. ๐
Parameters
dev_idโ device ID to get info.infoโ memory structure to fill with the info. You hand it a struct, it fills it up, no cap.
Returns
0 on success, -rte_errno otherwise:
ENODEVif invaliddev_idEINVALifNULLinfoEPERMif driver error
๐ rte_gpu_mem_alloc
__rte_experimental void * rte_gpu_mem_alloc (int16_t dev_id, size_t size, unsigned int align)
โ ๏ธ EXPERIMENTAL: this API may change without prior notice.
Allocate a chunk of memory in the device. Getting that bag of bytes, as one does. ๐
Parameters
dev_idโ device ID requiring allocated memory.sizeโ number of bytes to allocate. Requesting0will do nothing. (Zero effort behavior, honestly relatable, but be serious.)alignโ if0, the return is a pointer that is suitably aligned for any kind of variable (in the same manner asmalloc()). Otherwise, the return is a pointer that is a multiple ofalign. In this case, it must obviously be a power of two โ bestie, do not test it, it will simply say no.
Returns
A pointer to the allocated memory, otherwise NULL and rte_errno is set:
ENODEVif invaliddev_idEINVALifalignis not a power of twoENOTSUPif operation not supported by the driverE2BIGifsizeis higher than limitENOMEMif out of spaceEPERMif driver error
๐ซถ rte_gpu_mem_free
__rte_experimental int rte_gpu_mem_free (int16_t dev_id, void * ptr)
โ ๏ธ EXPERIMENTAL: this API may change without prior notice.
Deallocate a chunk of memory allocated with rte_gpu_mem_alloc(). Let it go, it's not yours anymore. ๐ฆ
Parameters
dev_idโ reference device ID.ptrโ pointer to the memory area to be deallocated.NULLis a no-op accepted value, so you can pass nothing and it's chill.
Returns
0 on success, -rte_errno otherwise:
ENODEVif invaliddev_idENOTSUPif operation not supported by the driverEPERMif driver error
๐ธ rte_gpu_mem_register
__rte_experimental int rte_gpu_mem_register (int16_t dev_id, size_t size, void * ptr)
โ ๏ธ EXPERIMENTAL: this API may change without prior notice.
Register a chunk of memory on the CPU usable by the device. It's like introducing your CPU memory to the GPU so they can hang out. ๐
Parameters
dev_idโ device ID requiring allocated memory.sizeโ number of bytes to allocate. Requesting0will do nothing.ptrโ pointer to the memory area to be registered.NULLis a no-op accepted value.
Returns
A pointer to the allocated memory, otherwise NULL and rte_errno is set:
ENODEVif invaliddev_idEINVALif reserved flagsENOTSUPif operation not supported by the driverE2BIGifsizeis higher than limitENOMEMif out of spaceEPERMif driver error
๐ rte_gpu_mem_unregister
__rte_experimental int rte_gpu_mem_unregister (int16_t dev_id, void * ptr)
โ ๏ธ EXPERIMENTAL: this API may change without prior notice.
Deregister a chunk of memory previously registered with rte_gpu_mem_register(). It's over, no hard feelings. โจ
Parameters
dev_idโ reference device ID.ptrโ pointer to the memory area to be unregistered.NULLis a no-op accepted value.
Returns
0 on success, -rte_errno otherwise:
ENODEVif invaliddev_idENOTSUPif operation not supported by the driverEPERMif driver error
๐ซ rte_gpu_mem_cpu_map
__rte_experimental void * rte_gpu_mem_cpu_map (int16_t dev_id, size_t size, void * ptr)
โ ๏ธ EXPERIMENTAL: this API may change without prior notice.
Map a chunk of GPU memory to make it accessible from the CPU using the memory pointer returned by the function. GPU memory has to be allocated via rte_gpu_mem_alloc(). So the CPU finally gets the aux, but only if you did the alloc first โ prerequisites, bestie, always. ๐ฅ
Parameters
dev_idโ device ID requiring mapped memory.sizeโ number of bytes to map. Requesting0will do nothing.ptrโ pointer to the GPU memory area to be mapped.NULLis a no-op accepted value.
Returns
A pointer to the mapped GPU memory usable by the CPU, otherwise NULL and rte_errno is set:
ENODEVif invaliddev_idENOTSUPif operation not supported by the driverE2BIGifsizeis higher than limitENOMEMif out of spaceEPERMif driver error
๐ง rte_gpu_mem_cpu_unmap
__rte_experimental int rte_gpu_mem_cpu_unmap (int16_t dev_id, void * ptr)
โ ๏ธ EXPERIMENTAL: this API may change without prior notice.
Unmap a chunk of GPU memory previously mapped with rte_gpu_mem_cpu_map(). Undoing the access, respectfully. ๐
Parameters
dev_idโ reference device ID.ptrโ pointer to the GPU memory area to be unmapped.NULLis a no-op accepted value.
Returns
0 on success, -rte_errno otherwise:
ENODEVif invaliddev_idENOTSUPif operation not supported by the driverEPERMif driver error
โก rte_gpu_wmb
__rte_experimental int rte_gpu_wmb (int16_t dev_id)
โ ๏ธ EXPERIMENTAL: this API may change without prior notice.
Enforce a GPU write memory barrier. It's giving "no, you wait your turn" to all the pending writes. Main character energy for ordering. ๐
Parameters
dev_idโ reference device ID.
Returns
0 on success, -rte_errno otherwise:
ENODEVif invaliddev_idENOTSUPif operation not supported by the driverEPERMif driver error
๐ฉ rte_gpu_comm_create_flag
__rte_experimental int rte_gpu_comm_create_flag (uint16_t dev_id, struct rte_gpu_comm_flag * devflag, enum rte_gpu_comm_flag_type mtype)
โ ๏ธ EXPERIMENTAL: this API may change without prior notice.
Create a communication flag that can be shared between CPU threads and device workload to exchange some status info (e.g. work is done, processing can start, etc..). It's the group chat of "u up? work's done" between your CPU and your GPU. ๐ฌ
Parameters
dev_idโ reference device ID.devflagโ pointer to the memory area of the devflag structure.mtypeโ type of memory to allocate the communication flag.
Returns
0 on success, -rte_errno otherwise:
ENODEVif invaliddev_idEINVALif invalid inputsENOTSUPif operation not supported by the driverENOMEMif out of spaceEPERMif driver error
๐๏ธ rte_gpu_comm_destroy_flag
__rte_experimental int rte_gpu_comm_destroy_flag (struct rte_gpu_comm_flag * devflag)
โ ๏ธ EXPERIMENTAL: this API may change without prior notice.
Deallocate a communication flag. And I oop โ it's gone. ๐
Parameters
devflagโ pointer to the memory area of the devflag structure.
Returns
0 on success, -rte_errno otherwise:
ENODEVif invaliddev_idEINVALifNULLdevflagENOTSUPif operation not supported by the driverEPERMif driver error
๐ฏ rte_gpu_comm_set_flag
__rte_experimental int rte_gpu_comm_set_flag (struct rte_gpu_comm_flag * devflag, uint32_t val)
โ ๏ธ EXPERIMENTAL: this API may change without prior notice.
Set the value of a communication flag as the input value. Flag memory area is treated as volatile. The flag must have been allocated with RTE_GPU_COMM_FLAG_CPU. Respect the vibes, respect the requirement. โจ
Parameters
devflagโ pointer to the memory area of the devflag structure.valโ value to set in the flag.
Returns
0 on success, -rte_errno otherwise:
EINVALif invalid input params
๐ rte_gpu_comm_get_flag_value
__rte_experimental int rte_gpu_comm_get_flag_value (struct rte_gpu_comm_flag * devflag, uint32_t * val)
โ ๏ธ EXPERIMENTAL: this API may change without prior notice.
Get the value of the communication flag. Flag memory area is treated as volatile. The flag must have been allocated with RTE_GPU_COMM_FLAG_CPU. Yes, same rules as before, they're consistent like that. ๐
Parameters
devflagโ pointer to the memory area of the devflag structure.valโ flag output value.
Returns
0 on success, -rte_errno otherwise:
EINVALif invalid input params
๐ rte_gpu_comm_create_list
__rte_experimental struct rte_gpu_comm_list * rte_gpu_comm_create_list (uint16_t dev_id, uint32_t num_comm_items)
โ ๏ธ EXPERIMENTAL: this API may change without prior notice.
Create a communication list that can be used to share packets between CPU and device. A whole little shared workspace. ๐
Each element of the list contains:
- a packet list of
RTE_GPU_COMM_LIST_PKTS_MAXelements - number of packets in the list
- a status flag to communicate if the packet list is
FREE,READYto be processed,DONEwith processing.
The list is allocated in CPU-visible memory. At creation time, every list is in FREE state. Fresh start, clean slate, we love to see it. ๐ฆ
Parameters
dev_idโ reference device ID.num_comm_itemsโ number of items in the communication list.
Returns
A pointer to the allocated list, otherwise NULL and rte_errno is set:
EINVALif invalid input params
๐งน rte_gpu_comm_destroy_list
__rte_experimental int rte_gpu_comm_destroy_list (struct rte_gpu_comm_list * comm_list, uint32_t num_comm_items)
โ ๏ธ EXPERIMENTAL: this API may change without prior notice.
Destroy a communication list. Cleanup era. โจ
Parameters
comm_listโ communication list to be destroyed.num_comm_itemsโ number of items in the communication list.
Returns
0 on success, -rte_errno otherwise:
EINVALif invalid input params
๐ฆ rte_gpu_comm_populate_list_pkts
__rte_experimental int rte_gpu_comm_populate_list_pkts (struct rte_gpu_comm_list * comm_list_item, struct rte_mbuf ** mbufs, uint32_t num_mbufs)
โ ๏ธ EXPERIMENTAL: this API may change without prior notice.
Populate the packets list of the communication item with info from a list of mbufs. Status flag of that packet list is set to READY. Loading complete, bestie, it's ready to go. ๐ฅ
Parameters
comm_list_itemโ communication list item to fill.mbufsโ list of mbufs.num_mbufsโ number of mbufs.
Returns
0 on success, -rte_errno otherwise:
EINVALif invalid input paramsENOTSUPif mbufs are chained (multiple segments) โ so no multi-segment shenanigans, chained mbufs are simply not it.
๐ rte_gpu_comm_set_status
__rte_experimental int rte_gpu_comm_set_status (struct rte_gpu_comm_list * comm_list_item, enum rte_gpu_comm_list_status status)
โ ๏ธ EXPERIMENTAL: this API may change without prior notice.
Set status flag value of a communication list item. Update the mood, keep everyone posted. ๐
Parameters
comm_list_itemโ communication list item to query.statusโ status value to set.
Returns
0 on success, -rte_errno otherwise:
EINVALif invalid input params
rte_gpu_comm_get_status ๐
__rte_experimental int rte_gpu_comm_get_status (struct rte_gpu_comm_list *
comm_list_item, enum rte_gpu_comm_list_status * status)
Warning EXPERIMENTAL: this API may change without prior notice. ๐ง
okay so this one is literally just the little spy that peeks at the status flag of a communication list item ๐ like "bestie what is your current vibe" and it tells you.
Parameters
comm_list_itemโ the communication list item you're querying. This is an input parameter ๐ซถstatusโ the communication list item status flag value. This one is an output parameter, so that's where the answer gets dropped. โจ
Returns
0on success, or-rte_errnoif it's not gonna happen ๐:EINVALif invalid input params ๐
rte_gpu_comm_cleanup_list ๐งน
__rte_experimental int rte_gpu_comm_cleanup_list (struct rte_gpu_comm_list *
comm_list_item)
Warning EXPERIMENTAL: this API may change without prior notice. ๐ง
this is the glow-up-reset button, fr fr ๐ธ it resets a communication list item back to its OG state. The status flag gets set to FREE and the mbufs get returned to the pool. it's giving responsible, it's giving tidy, we love to see it ๐
Parameters
comm_list_itemโ the communication list item to reset. ๐
Returns
0on success, or-rte_errnoif it's not gonna happen ๐:EINVALif invalid input params ๐
Author ๐
Generated automatically by Doxygen for DPDK from the source code. ๐คโจ (yes bestie, a robot wrote this and it ate, no notes ๐ )
aaaand that's the whole page, we made it to the end ๐ฆ๐ซถ this was DPDK Version 25.11.3, and the page you're reading is rte_gpudev.h(3) โ go forth and communicate between your GPU and CPU, you absolute icon ๐๐ periodt โจ
๐ฆ where this page comes from
- ubuntu resolute: dpdk-doc 25.11.3-0ubuntu0.26.04.1 ยท BSD-3-Clause
- ubuntu stonking: dpdk-doc 25.11.3-1 ยท BSD-3-Clause
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms