27 #include "../common/dpa_initiator_target_common_defs.h"
80 goto destroy_rdma_obj;
107 DOCA_LOG_INFO(
"Destroy %s DOCA RDMA", (is_initiator ?
"Initiator" :
"Target"));
130 DOCA_LOG_INFO(
"Connect Initiator DOCA RDMA connection #1 to Target DOCA RDMA connection #1");
140 DOCA_LOG_INFO(
"Connect Target DOCA RDMA connection #1 to Initiator DOCA RDMA connection #1");
150 DOCA_LOG_INFO(
"Connect Initiator DOCA RDMA connection #2 to Target DOCA RDMA connection #2");
160 DOCA_LOG_INFO(
"Connect Target DOCA RDMA connection #2 to Initiator DOCA RDMA connection #2");
191 struct doca_sync_event *comp_event =
NULL;
193 const uint64_t wait_sync_ev_threshold = 9;
198 uint64_t send_val = 1;
201 uint32_t imm_val = 10;
202 const uint32_t test_iter = 4;
217 goto destroy_initiator_rdma_completion_obj;
220 DOCA_LOG_INFO(
"Allocate Target DPA thread #1 device argument");
224 goto destroy_initiator_rdma_obj;
230 target_thread1_obj.
arg = thread_arg_dev_ptr;
234 goto destroy_target_thread1_arg_dev_ptr;
240 target_dpa_completion_obj.
thread = target_thread1_obj.
thread;
244 goto destroy_target_thread1_obj;
251 goto destroy_target_rdma_completion_obj;
257 goto destroy_target_rdma_obj;
264 goto destroy_target_rdma_obj;
267 DOCA_LOG_INFO(
"Allocate Target DPA thread #2 device argument");
271 goto destroy_target_rdma_obj;
277 target_thread2_obj.
arg = thread2_arg_dev_ptr;
281 goto destroy_target_thread2_arg_dev_ptr;
284 DOCA_LOG_INFO(
"Create Target DOCA DPA Notification Completion");
286 target_notification_completion_obj.
thread = target_thread2_obj.
thread;
289 DOCA_LOG_ERR(
"Function dpa_notification_completion_obj_init failed (%s)",
291 goto destroy_target_thread2_obj;
298 goto destroy_target_notification_completion_obj;
307 DOCA_LOG_ERR(
"Function create_doca_dpa_completion_sync_event failed (%s)",
309 goto destroy_target_notification_completion_obj;
312 DOCA_LOG_INFO(
"Update Target DPA thread #2 device argument");
321 goto destroy_completion_sync_event;
324 DOCA_LOG_INFO(
"Create Target DOCA MMAP on DPA for Target DOCA RDMA received buffer");
328 goto destroy_completion_sync_event;
334 goto destroy_received_buf_dev_ptr;
347 goto destroy_received_buf_dev_ptr;
350 DOCA_LOG_INFO(
"Update Target DPA thread #1 device argument");
364 goto destroy_dpa_mmap_obj;
367 DOCA_LOG_INFO(
"Create Initiator DOCA MMAP for send buffer on Host");
378 goto destroy_dpa_mmap_obj;
381 DOCA_LOG_INFO(
"Trigger an RPC to prepare Target DPA receive memory");
387 received_buf_dev_ptr,
392 goto destroy_host_mmap_obj;
395 for (uint32_t i = 0; i < test_iter; i++) {
397 "Trigger an RPC to post send on Initiator DOCA RDMA connection #%u with buffer %lu and immediate value %u",
414 goto destroy_host_mmap_obj;
421 DOCA_LOG_INFO(
"Waiting for Target Thread #2 to set completion Sync Event value to be greater than %lu",
422 wait_sync_ev_threshold);
426 goto destroy_host_mmap_obj;
431 destroy_host_mmap_obj:
438 destroy_dpa_mmap_obj:
445 destroy_received_buf_dev_ptr:
452 destroy_completion_sync_event:
459 destroy_target_notification_completion_obj:
462 DOCA_LOG_ERR(
"Function dpa_notification_completion_obj_destroy failed: %s",
467 destroy_target_thread2_obj:
474 destroy_target_thread2_arg_dev_ptr:
481 destroy_target_rdma_obj:
488 destroy_target_rdma_completion_obj:
495 destroy_target_thread1_obj:
502 destroy_target_thread1_arg_dev_ptr:
509 destroy_initiator_rdma_obj:
516 destroy_initiator_rdma_completion_obj:
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_notification_completion_obj_init(struct dpa_notification_completion_obj *notification_completion_obj)
Initialize DPA notification completion.
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 dpa_notification_completion_obj_destroy(struct dpa_notification_completion_obj *notification_completion_obj)
Destroy DPA notification completion.
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_obj_create(struct dpa_resources *resources, struct dpa_completion_obj *dpa_completion_obj, struct dpa_rdma_obj *dpa_rdma_obj)
Create, attach and start DPA RDMA object.
DOCA_LOG_REGISTER(DPA_INITIATOR_TARGET::SAMPLE)
doca_dpa_func_t rdma_post_receive_rpc
doca_dpa_func_t thread1_kernel
doca_error_t dpa_initiator_target(struct dpa_resources *resources)
Sample's Logic.
static doca_error_t rdma_obj_destroy(struct dpa_rdma_obj *dpa_rdma_obj, uint8_t is_initiator)
Destroy Initiator/Target DPA RDMA object.
doca_dpa_func_t rdma_post_send_imm_rpc
static doca_error_t rdma_objs_connect(struct dpa_rdma_obj *initiator_rdma_obj, struct dpa_rdma_obj *target_rdma_obj)
RDMA Connect Initiator & Target DPA RDMA connection objects.
doca_dpa_func_t thread2_kernel
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.
#define DOCA_LOG_INFO(format,...)
Generates an INFO 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_ATOMIC
@ 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
A struct that includes all the resources needed for DPA notification completion.
struct doca_dpa_thread * thread
doca_dpa_dev_notification_completion_t handle
struct doca_dpa * doca_dpa
A struct that includes all the resources needed for DPA RDMA.
doca_dpa_dev_rdma_t dpa_rdma
struct doca_rdma_connection * connection
bool second_connection_needed
uint32_t max_connections_count
const void * connection2_details
struct doca_rdma_connection * connection2
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 #1 device argument struct.
uint64_t notification_comp_handle
uint64_t target_rdma_handle
doca_dpa_dev_t dpa_ctx_handle
DPA thread #2 device argument struct.
uint64_t sync_event_handle
uint64_t completion_count
A struct that includes all the resources needed for DPA thread.
struct doca_dpa_thread * thread
struct doca_dpa * doca_dpa