27 #include "../common/dpa_ping_pong_common_defs.h"
82 goto destroy_ping_rdma_obj;
88 goto destroy_pong_rdma_obj;
94 goto destroy_pong_rdma_obj;
103 goto destroy_pong_rdma_obj;
112 goto destroy_pong_rdma_obj;
117 destroy_pong_rdma_obj:
124 destroy_ping_rdma_obj:
184 struct doca_sync_event *ping_comp_se =
NULL;
186 struct doca_sync_event *pong_comp_se =
NULL;
188 const uint64_t wait_sync_ev_threshold = 9;
209 goto destroy_ping_thread_arg_dev_ptr;
215 goto destroy_ping_thread_arg_dev_ptr;
219 &ping_recv_arr_dev_ptr);
222 goto destroy_ping_tls_dev_ptr;
233 goto destroy_ping_recv_arr_dev_ptr;
239 goto destroy_ping_recv_arr_dev_ptr;
244 goto destroy_pong_thread_arg_dev_ptr;
250 goto destroy_pong_thread_arg_dev_ptr;
254 &pong_recv_arr_dev_ptr);
257 goto destroy_pong_tls_dev_ptr;
268 goto destroy_pong_recv_arr_dev_ptr;
273 ping_thread_obj.
arg = ping_thread_arg_dev_ptr;
278 goto destroy_pong_recv_arr_dev_ptr;
282 pong_thread_obj.
arg = pong_thread_arg_dev_ptr;
287 goto destroy_ping_thread_obj;
292 ping_dpa_completion_obj.
thread = ping_thread_obj.
thread;
296 goto destroy_pong_thread_obj;
300 pong_dpa_completion_obj.
thread = pong_thread_obj.
thread;
304 goto destroy_ping_dpa_completion_obj;
308 &ping_dpa_completion_obj,
309 &pong_dpa_completion_obj,
314 goto destroy_pong_dpa_completion_obj;
320 goto destroy_rdma_objs;
325 goto destroy_rdma_objs;
331 &ping_comp_se_handle);
333 DOCA_LOG_ERR(
"Function create_doca_dpa_completion_sync_event failed (%s)",
335 goto destroy_rdma_objs;
340 &pong_comp_se_handle);
342 DOCA_LOG_ERR(
"Function create_doca_dpa_completion_sync_event failed (%s)",
344 goto destroy_ping_completion_sync_event;
350 goto destroy_pong_completion_sync_event;
356 goto destroy_ping_receive_buf_dev_ptr;
364 ping_receive_mmap_obj.
memrange_addr = (
void *)ping_receive_buf_dev_ptr;
369 goto destroy_ping_receive_buf_dev_ptr;
375 goto destroy_ping_receive_mmap_obj;
381 goto destroy_pong_receive_buf_dev_ptr;
389 pong_receive_mmap_obj.
memrange_addr = (
void *)pong_receive_buf_dev_ptr;
394 goto destroy_pong_receive_buf_dev_ptr;
400 goto destroy_pong_receive_mmap_obj;
406 goto destroy_ping_send_buf_dev_ptr;
414 ping_send_mmap_obj.
memrange_addr = (
void *)ping_send_buf_dev_ptr;
419 goto destroy_ping_send_buf_dev_ptr;
425 goto destroy_ping_send_mmap_obj;
431 goto destroy_pong_send_buf_dev_ptr;
439 pong_send_mmap_obj.
memrange_addr = (
void *)pong_send_buf_dev_ptr;
444 goto destroy_pong_send_buf_dev_ptr;
450 ping_thread_arg.
recv_addr = ping_receive_buf_dev_ptr;
453 ping_thread_arg.
send_addr = ping_send_buf_dev_ptr;
459 ping_thread_arg_dev_ptr,
464 goto destroy_pong_send_mmap_obj;
470 pong_thread_arg.
recv_addr = pong_receive_buf_dev_ptr;
473 pong_thread_arg.
send_addr = pong_send_buf_dev_ptr;
479 pong_thread_arg_dev_ptr,
484 goto destroy_pong_send_mmap_obj;
495 goto destroy_pong_send_mmap_obj;
501 goto destroy_pong_send_mmap_obj;
507 goto destroy_pong_send_mmap_obj;
510 destroy_pong_send_mmap_obj:
517 destroy_pong_send_buf_dev_ptr:
524 destroy_ping_send_mmap_obj:
531 destroy_ping_send_buf_dev_ptr:
538 destroy_pong_receive_mmap_obj:
545 destroy_pong_receive_buf_dev_ptr:
552 destroy_ping_receive_mmap_obj:
559 destroy_ping_receive_buf_dev_ptr:
566 destroy_pong_completion_sync_event:
573 destroy_ping_completion_sync_event:
587 destroy_pong_dpa_completion_obj:
594 destroy_ping_dpa_completion_obj:
601 destroy_pong_thread_obj:
608 destroy_ping_thread_obj:
615 destroy_pong_recv_arr_dev_ptr:
622 destroy_pong_tls_dev_ptr:
629 destroy_pong_thread_arg_dev_ptr:
636 destroy_ping_recv_arr_dev_ptr:
643 destroy_ping_tls_dev_ptr:
650 destroy_ping_thread_arg_dev_ptr:
static doca_error_t create_doca_dpa_completion_sync_event(struct doca_dpa *doca_dpa, struct doca_dev *doca_device, struct doca_sync_event **comp_event)
#define SYNC_EVENT_MASK_FFS
doca_error_t dpa_rdma_obj_destroy(struct dpa_rdma_obj *dpa_rdma_obj)
Destroy DPA RDMA.
doca_error_t dpa_rdma_obj_start(struct dpa_rdma_obj *dpa_rdma_obj)
Start DPA RDMA.
doca_error_t dpa_thread_obj_init(struct dpa_thread_obj *dpa_thread_obj)
Initialize DPA thread.
doca_error_t doca_mmap_obj_destroy(struct doca_mmap_obj *doca_mmap_obj)
Destroy DOCA Mmap.
doca_error_t dpa_completion_obj_init(struct dpa_completion_obj *dpa_completion_obj)
Initialize DPA completion.
doca_error_t dpa_rdma_obj_init(struct dpa_rdma_obj *dpa_rdma_obj)
Initialize DPA RDMA without starting it.
doca_error_t doca_mmap_obj_init(struct doca_mmap_obj *doca_mmap_obj)
Initialize DOCA Mmap.
doca_error_t dpa_completion_obj_destroy(struct dpa_completion_obj *dpa_completion_obj)
Destroy DPA completion.
doca_error_t dpa_thread_obj_destroy(struct dpa_thread_obj *dpa_thread_obj)
Destroy DPA thread.
#define RDMA_DEVICE_DEFAULT_GID_INDEX
default RDMA device GID index
#define RDMA_DEFAULT_BUF_LIST_LEN
default RDMA connection receive buffer length
#define EXPECTED_NUM_RECEIVES
Number of expected receive completions.
static doca_error_t rdma_objs_destroy(struct dpa_rdma_obj *ping_dpa_rdma_obj, struct dpa_rdma_obj *pong_dpa_rdma_obj)
Destroy DPA RDMA objects.
doca_dpa_func_t thread_kernel
static doca_error_t rdma_objs_init(struct dpa_resources *resources, struct dpa_completion_obj *ping_dpa_completion_obj, struct dpa_completion_obj *pong_dpa_completion_obj, struct dpa_rdma_obj *ping_dpa_rdma_obj, struct dpa_rdma_obj *pong_dpa_rdma_obj)
Create, attach, start and connect DPA RDMA objects.
DOCA_LOG_REGISTER(DPA_PING_PONG::SAMPLE)
doca_dpa_func_t trigger_first_iteration_rpc
doca_error_t dpa_ping_pong(struct dpa_resources *resources)
Sample's Logic.
struct rdma_resources resources
DOCA_EXPERIMENTAL doca_error_t doca_dpa_thread_run(struct doca_dpa_thread *dpa_thread)
Run DPA thread.
DOCA_EXPERIMENTAL doca_error_t doca_dpa_mem_alloc(struct doca_dpa *dpa, size_t size, doca_dpa_dev_uintptr_t *dev_ptr)
Allocate DPA heap memory.
DOCA_EXPERIMENTAL doca_error_t doca_dpa_mem_free(struct doca_dpa *dpa, doca_dpa_dev_uintptr_t dev_ptr)
Free the previously allocated DPA memory.
DOCA_EXPERIMENTAL doca_error_t doca_dpa_rpc(struct doca_dpa *dpa, doca_dpa_func_t *func, uint64_t *retval,...)
RPC to run DPA kernel.
void() doca_dpa_func_t(void)
Generic function pointer type.
DOCA_EXPERIMENTAL doca_error_t doca_dpa_h2d_memcpy(struct doca_dpa *dpa, doca_dpa_dev_uintptr_t dst_ptr, void *src_ptr, size_t size)
Copy from host memory to DPA Heap.
uint64_t doca_dpa_dev_uintptr_t
DPA pointer type definition.
DOCA_EXPERIMENTAL doca_error_t doca_dpa_memset(struct doca_dpa *dpa, doca_dpa_dev_uintptr_t dev_ptr, int value, size_t size)
Set DPA Heap memory to a value.
#define DOCA_ERROR_PROPAGATE(r, t)
Save the first encountered doca_error_t.
enum doca_error doca_error_t
DOCA API return codes.
DOCA_STABLE const char * doca_error_get_descr(doca_error_t error)
Returns the description string of an error code.
#define DOCA_LOG_ERR(format,...)
Generates an ERROR application log message.
DOCA_EXPERIMENTAL doca_error_t doca_rdma_connect(struct doca_rdma *rdma, const void *remote_rdma_conn_details, size_t remote_rdma_conn_details_size, struct doca_rdma_connection *rdma_connection)
Connect to remote doca_rdma peer. Can only be called when the ctx is in DOCA_CTX_STATE_STARTING state...
uint64_t doca_dpa_dev_sync_event_t
DOCA Sync Event DPA handle.
DOCA_EXPERIMENTAL doca_error_t doca_sync_event_wait_gt(struct doca_sync_event *event, uint64_t value, uint64_t mask)
Wait for the value of a Sync Event to be grater than some threshold value synchronously in a polling ...
DOCA_EXPERIMENTAL doca_error_t doca_sync_event_destroy(struct doca_sync_event *event)
Destroy a Sync Event instance.
@ DOCA_ACCESS_FLAG_LOCAL_READ_WRITE
@ DOCA_ACCESS_FLAG_RDMA_READ
@ DOCA_ACCESS_FLAG_RDMA_WRITE
A struct that includes all the resources needed for DOCA Mmap.
struct doca_dev * doca_device
struct doca_dpa * doca_dpa
doca_dpa_dev_mmap_t dpa_mmap_handle
A struct that includes all the resources needed for DPA completion.
struct doca_dpa_thread * thread
doca_dpa_dev_completion_t handle
struct doca_dpa_completion * dpa_comp
struct doca_dpa * doca_dpa
DPA Thread local storage struct.
uint64_t received_values_arr_ptr
A struct that includes all the resources needed for DPA RDMA.
doca_dpa_dev_rdma_t dpa_rdma
struct doca_rdma_connection * connection
struct doca_dev * doca_device
struct doca_dpa_completion * dpa_comp
struct doca_dpa * doca_dpa
const void * connection_details
A struct that includes all the resources needed for DPA.
DPA thread device argument struct.
doca_dpa_dev_t dpa_ctx_handle
uint32_t recv_addr_mmap_handle
uint64_t comp_sync_event_val
uint32_t send_addr_mmap_handle
uint64_t comp_sync_event_handle
A struct that includes all the resources needed for DPA thread.
struct doca_dpa_thread * thread
doca_dpa_dev_uintptr_t tls_dev_ptr
struct doca_dpa * doca_dpa