NVIDIA DOCA SDK Data Center on a Chip Framework Documentation
pe_polling_sample.c File Reference
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <doca_mmap.h>
#include <doca_buf.h>
#include <doca_buf_inventory.h>
#include <doca_ctx.h>
#include <doca_dma.h>
#include <doca_types.h>
#include <doca_log.h>
#include <doca_pe.h>
#include <samples/common.h>
#include "pe_common.h"
Include dependency graph for pe_polling_sample.c:

Go to the source code of this file.

Data Structures

struct  pe_polling_sample_state
 

Macros

#define EXIT_ON_FAILURE(_expression_)
 
#define NUM_TASKS   (16)
 
#define DMA_BUFFER_SIZE   (1024)
 
#define BUFFER_SIZE   (DMA_BUFFER_SIZE * 2 * NUM_TASKS)
 
#define BUF_INVENTORY_SIZE   (NUM_TASKS * 2)
 

Functions

 DOCA_LOG_REGISTER (PE_POLLING::SAMPLE)
 
static void dma_memcpy_completed_callback (struct doca_dma_task_memcpy *dma_task, union doca_data task_user_data, union doca_data ctx_user_data)
 
static void dma_memcpy_error_callback (struct doca_dma_task_memcpy *dma_task, union doca_data task_user_data, union doca_data ctx_user_data)
 
doca_error_t create_dma (struct pe_polling_sample_state *state)
 
void cleanup (struct pe_polling_sample_state *state)
 
doca_error_t run (struct pe_polling_sample_state *state)
 
doca_error_t run_pe_polling_sample (void)
 

Macro Definition Documentation

◆ BUF_INVENTORY_SIZE

#define BUF_INVENTORY_SIZE   (NUM_TASKS * 2)

Definition at line 68 of file pe_polling_sample.c.

◆ BUFFER_SIZE

#define BUFFER_SIZE   (DMA_BUFFER_SIZE * 2 * NUM_TASKS)

Definition at line 67 of file pe_polling_sample.c.

◆ DMA_BUFFER_SIZE

#define DMA_BUFFER_SIZE   (1024)

Definition at line 66 of file pe_polling_sample.c.

◆ EXIT_ON_FAILURE

#define EXIT_ON_FAILURE (   _expression_)
Value:
{ \
doca_error_t _status_ = _expression_; \
if (_status_ != DOCA_SUCCESS) { \
DOCA_LOG_ERR("%s failed with status %s", __func__, doca_error_get_descr(_status_)); \
return _status_; \
} \
}
if(bitoffset % 64+bitlength > 64) result|
DOCA_STABLE const char * doca_error_get_descr(doca_error_t error)
Returns the description string of an error code.
@ DOCA_SUCCESS
Definition: doca_error.h:38

This sample demonstrates how to use DOCA PE (progress engine) in polling mode. This is the most basic PE sample. Diff between this sample and other sample to see their unique features. The sample uses DOCA_DMA context as an example (DOCA PE can run any library that abides to the PE context API). The sample runs 16 DMA memcpy tasks. This macro is used to minimize code size. The macro runs an expression and returns error if the expression status is not DOCA_SUCCESS

Definition at line 55 of file pe_polling_sample.c.

◆ NUM_TASKS

#define NUM_TASKS   (16)

Definition at line 65 of file pe_polling_sample.c.

Function Documentation

◆ cleanup()

void cleanup ( struct pe_polling_sample_state state)

This method cleans up the sample resources in reverse order of their creation. This method does not check for destroy return values for simplify. Real code should check the return value and act accordingly (e.g. if doca_ctx_stop failed with DOCA_ERROR_IN_PROGRESS it means that some contexts are still added or even that there are still in flight tasks in the progress engine).

@state [in]: sample state

Definition at line 174 of file pe_polling_sample.c.

◆ create_dma()

doca_error_t create_dma ( struct pe_polling_sample_state state)

Create DMA

@state [in]: sample state

Returns
: DOCA_SUCCESS on success and DOCA_ERROR otherwise

The ctx user data is received in the task completion callback. Setting the state to the user data binds the program to the callback. See dma_memcpy_completed_callback for usage.

Definition at line 138 of file pe_polling_sample.c.

◆ dma_memcpy_completed_callback()

static void dma_memcpy_completed_callback ( struct doca_dma_task_memcpy *  dma_task,
union doca_data  task_user_data,
union doca_data  ctx_user_data 
)
static

process_completed_dma_memcpy_task returns doca_error_t to be able to use EXIT_ON_FAILURE, but there is nothing to do with the return value.

Definition at line 88 of file pe_polling_sample.c.

◆ dma_memcpy_error_callback()

static void dma_memcpy_error_callback ( struct doca_dma_task_memcpy *  dma_task,
union doca_data  task_user_data,
union doca_data  ctx_user_data 
)
static

Definition at line 114 of file pe_polling_sample.c.

◆ DOCA_LOG_REGISTER()

DOCA_LOG_REGISTER ( PE_POLLING::SAMPLE  )

◆ run()

doca_error_t run ( struct pe_polling_sample_state state)

Run the sample The method (and the method it calls) does not cleanup anything in case of failures. It assumes that cleanup is called after it at any case.

@state [in]: sample state

Returns
: DOCA_SUCCESS on success and DOCA_ERROR otherwise

Definition at line 195 of file pe_polling_sample.c.

◆ run_pe_polling_sample()

doca_error_t run_pe_polling_sample ( void  )

Run the PE polling sample

Returns
: DOCA_SUCCESS on success and DOCA_ERROR otherwise

Definition at line 221 of file pe_polling_sample.c.