DPDK 25.07.0
Data Structures | Macros | Typedefs | Functions | Variables
rte_graph_feature_arc_worker.h File Reference
#include <stddef.h>
#include <rte_graph_feature_arc.h>
#include <rte_bitops.h>
#include <rte_mbuf.h>
#include <rte_mbuf_dyn.h>

Go to the source code of this file.

Data Structures

struct  rte_graph_feature_arc
 
struct  rte_feature_arc_main
 
struct  rte_graph_feature_data
 
struct  rte_graph_feature_arc_mbuf_dynfields
 

Macros

#define RTE_GRAPH_FEATURE_ARC_DYNFIELD_NAME   "__rte_graph_feature_arc_mbuf_dynfield"
 
#define RTE_GRAPH_FEATURE_DATA_SIZE_LOG2   3
 
#define RTE_GRAPH_FEATURE_DATA_NUM_PER_FEATURE(arc)    (arc->feature_size >> RTE_GRAPH_FEATURE_DATA_SIZE_LOG2)
 
#define RTE_GRAPH_FEATURE_TO_FEATURE_DATA(arc, feature, index)
 

Typedefs

typedef struct rte_feature_arc_main rte_graph_feature_arc_main_t
 

Functions

static __rte_experimental __rte_always_inline struct rte_graph_feature_arc_mbuf_dynfieldsrte_graph_feature_arc_mbuf_dynfields_get (struct rte_mbuf *mbuf, const int dyn_offset)
 
static __rte_experimental __rte_always_inline int rte_graph_feature_is_valid (rte_graph_feature_t feature)
 
static __rte_experimental __rte_always_inline int rte_graph_feature_data_is_valid (rte_graph_feature_data_t feature_data)
 
static __rte_experimental __rte_always_inline struct rte_graph_feature_arcrte_graph_feature_arc_get (rte_graph_feature_arc_t arc)
 
static __rte_experimental __rte_always_inline struct rte_graph_feature_data__rte_graph_feature_data_get (struct rte_graph_feature_arc *arc, rte_graph_feature_data_t fdata)
 
static __rte_experimental __rte_always_inline rte_edge_t __rte_graph_feature_data_edge_get (struct rte_graph_feature_data *fdata)
 
static __rte_experimental __rte_always_inline uint16_t __rte_graph_feature_data_app_cookie_get (struct rte_graph_feature_data *fdata)
 
static __rte_experimental __rte_always_inline rte_graph_feature_data_t __rte_graph_feature_data_next_feature_get (struct rte_graph_feature_data *fdata)
 
static __rte_experimental __rte_always_inline uint16_t rte_graph_feature_data_app_cookie_get (struct rte_graph_feature_arc *arc, rte_graph_feature_data_t fdata)
 
static __rte_experimental __rte_always_inline int rte_graph_feature_data_next_feature_get (struct rte_graph_feature_arc *arc, rte_graph_feature_data_t *fdata, rte_edge_t *next_edge)
 
static __rte_experimental __rte_always_inline struct rte_graph_feature_datarte_graph_feature_data_get (struct rte_graph_feature_arc *arc, rte_graph_feature_data_t fdata)
 
static __rte_experimental __rte_always_inline int rte_graph_feature_data_first_feature_get (struct rte_graph_feature_arc *arc, uint32_t index, rte_graph_feature_data_t *fdata, rte_edge_t *edge)
 
static __rte_experimental __rte_always_inline uint64_t rte_graph_feature_arc_is_any_feature_enabled (struct rte_graph_feature_arc *arc)
 
static __rte_experimental __rte_always_inline void rte_graph_feature_arc_prefetch (struct rte_graph_feature_arc *arc)
 
static __rte_experimental __rte_always_inline void rte_graph_feature_arc_feature_data_prefetch (struct rte_graph_feature_arc *arc, rte_graph_feature_data_t fdata)
 

Variables

rte_graph_feature_arc_main_t__rte_graph_feature_arc_main
 

Detailed Description

Warning
EXPERIMENTAL: All functions in this file may be changed or removed without prior notice.

Fast path Graph feature arc API

Definition in file rte_graph_feature_arc_worker.h.

Macro Definition Documentation

◆ RTE_GRAPH_FEATURE_ARC_DYNFIELD_NAME

#define RTE_GRAPH_FEATURE_ARC_DYNFIELD_NAME   "__rte_graph_feature_arc_mbuf_dynfield"

Name of dynamic mbuf field offset registered in rte_graph_feature_arc_init()

Definition at line 262 of file rte_graph_feature_arc_worker.h.

◆ RTE_GRAPH_FEATURE_DATA_SIZE_LOG2

#define RTE_GRAPH_FEATURE_DATA_SIZE_LOG2   3

log2(sizeof (struct rte_graph_feature_data))

Definition at line 265 of file rte_graph_feature_arc_worker.h.

◆ RTE_GRAPH_FEATURE_DATA_NUM_PER_FEATURE

#define RTE_GRAPH_FEATURE_DATA_NUM_PER_FEATURE (   arc)     (arc->feature_size >> RTE_GRAPH_FEATURE_DATA_SIZE_LOG2)

Number of struct rte_graph_feature_data per feature

Definition at line 268 of file rte_graph_feature_arc_worker.h.

◆ RTE_GRAPH_FEATURE_TO_FEATURE_DATA

#define RTE_GRAPH_FEATURE_TO_FEATURE_DATA (   arc,
  feature,
  index 
)
Value:
((RTE_GRAPH_FEATURE_DATA_NUM_PER_FEATURE(arc) * (feature)) + (index)))
uint32_t rte_graph_feature_data_t
#define RTE_GRAPH_FEATURE_DATA_NUM_PER_FEATURE(arc)

Get rte_graph_feature_data_t from rte_graph_feature_t

Definition at line 272 of file rte_graph_feature_arc_worker.h.

Typedef Documentation

◆ rte_graph_feature_arc_main_t

Feature arc main object

Holds all feature arcs created by application

Function Documentation

◆ rte_graph_feature_arc_mbuf_dynfields_get()

static __rte_experimental __rte_always_inline struct rte_graph_feature_arc_mbuf_dynfields * rte_graph_feature_arc_mbuf_dynfields_get ( struct rte_mbuf mbuf,
const int  dyn_offset 
)
static

Get dynfield offset to feature arc specific fields in mbuf

Feature arc mbuf dynamic field is separate to utilize mbuf->dynfield2 instead of dynfield1

This arc specific dynamic offset is registered as part of rte_graph_feature_arc_init() and copied in each arc for fast path access. This avoids node maintaining dynamic offset for feature arc and if we are lucky, field would be allocated from mbuf->dynfield2. Otherwise each node has to maintain at least two dynamic offset in fast path

Parameters
mbufPointer to mbuf
dyn_offsetRetrieved from arc->mbuf_dyn_offset
Returns
NULL: On Failure Non-NULL pointer on Success

Definition at line 307 of file rte_graph_feature_arc_worker.h.

◆ rte_graph_feature_is_valid()

static __rte_experimental __rte_always_inline int rte_graph_feature_is_valid ( rte_graph_feature_t  feature)
static

API to know if feature is valid or not

Parameters
featurerte_graph_feature_t
Returns
1: If feature is valid 0: If feature is invalid

Definition at line 326 of file rte_graph_feature_arc_worker.h.

◆ rte_graph_feature_data_is_valid()

static __rte_experimental __rte_always_inline int rte_graph_feature_data_is_valid ( rte_graph_feature_data_t  feature_data)
static

API to know if feature data is valid or not

Parameters
feature_datarte_graph_feature_data_t
Returns
1: If feature data is valid 0: If feature data is invalid

Definition at line 343 of file rte_graph_feature_arc_worker.h.

◆ rte_graph_feature_arc_get()

static __rte_experimental __rte_always_inline struct rte_graph_feature_arc * rte_graph_feature_arc_get ( rte_graph_feature_arc_t  arc)
static

Get pointer to feature arc object from rte_graph_feature_arc_t

Parameters
arcfeature arc
Returns
NULL: On Failure Non-NULL pointer on Success

Definition at line 360 of file rte_graph_feature_arc_worker.h.

◆ __rte_graph_feature_data_get()

static __rte_experimental __rte_always_inline struct rte_graph_feature_data * __rte_graph_feature_data_get ( struct rte_graph_feature_arc arc,
rte_graph_feature_data_t  fdata 
)
static

Get rte_graph_feature_t from feature arc object without any checks

Parameters
arcfeature arc
fdatafeature data object
Returns
Pointer to feature data object

Definition at line 387 of file rte_graph_feature_arc_worker.h.

◆ __rte_graph_feature_data_edge_get()

static __rte_experimental __rte_always_inline rte_edge_t __rte_graph_feature_data_edge_get ( struct rte_graph_feature_data fdata)
static

Get next edge from feature data pointer, without any check

Parameters
fdatafeature data object
Returns
next edge

Definition at line 405 of file rte_graph_feature_arc_worker.h.

◆ __rte_graph_feature_data_app_cookie_get()

static __rte_experimental __rte_always_inline uint16_t __rte_graph_feature_data_app_cookie_get ( struct rte_graph_feature_data fdata)
static

Get app_cookie from feature data pointer, without any check

Parameters
fdatafeature data object
Returns
app_cookie set by caller in rte_graph_feature_enable() API

Definition at line 421 of file rte_graph_feature_arc_worker.h.

◆ __rte_graph_feature_data_next_feature_get()

static __rte_experimental __rte_always_inline rte_graph_feature_data_t __rte_graph_feature_data_next_feature_get ( struct rte_graph_feature_data fdata)
static

Get next_enabled_feature_data from pointer to feature data, without any check

Parameters
fdatafeature data object
Returns
next enabled feature data from this feature data

Definition at line 437 of file rte_graph_feature_arc_worker.h.

◆ rte_graph_feature_data_app_cookie_get()

static __rte_experimental __rte_always_inline uint16_t rte_graph_feature_data_app_cookie_get ( struct rte_graph_feature_arc arc,
rte_graph_feature_data_t  fdata 
)
static

Get app_cookie from feature data object with checks

Parameters
arcfeature arc
fdatafeature data object
Returns
app_cookie set by caller in rte_graph_feature_enable() API

Definition at line 456 of file rte_graph_feature_arc_worker.h.

◆ rte_graph_feature_data_next_feature_get()

static __rte_experimental __rte_always_inline int rte_graph_feature_data_next_feature_get ( struct rte_graph_feature_arc arc,
rte_graph_feature_data_t fdata,
rte_edge_t next_edge 
)
static

Get next_enabled_feature_data from current feature data object with checks

Parameters
arcfeature arc
fdataPointer to feature data object
[out]next_edgenext_edge from current feature to next enabled feature
Returns
1: if next feature enabled on index 0: if no feature is enabled on index

Definition at line 483 of file rte_graph_feature_arc_worker.h.

◆ rte_graph_feature_data_get()

static __rte_experimental __rte_always_inline struct rte_graph_feature_data * rte_graph_feature_data_get ( struct rte_graph_feature_arc arc,
rte_graph_feature_data_t  fdata 
)
static

Get struct rte_graph_feature_data from rte_graph_feature_dat_t

Parameters
arcfeature arc
fdatafeature data object
Returns
NULL: On Failure Non-NULL pointer on Success

Definition at line 511 of file rte_graph_feature_arc_worker.h.

◆ rte_graph_feature_data_first_feature_get()

static __rte_experimental __rte_always_inline int rte_graph_feature_data_first_feature_get ( struct rte_graph_feature_arc arc,
uint32_t  index,
rte_graph_feature_data_t fdata,
rte_edge_t edge 
)
static

Get feature data corresponding to first enabled feature on index

Parameters
arcfeature arc
indexInterface index
[out]fdatafeature data object
[out]edgerte_edge object
Returns
1: if any feature enabled on index, return corresponding valid feature data 0: if no feature is enabled on index

Definition at line 539 of file rte_graph_feature_arc_worker.h.

◆ rte_graph_feature_arc_is_any_feature_enabled()

static __rte_experimental __rte_always_inline uint64_t rte_graph_feature_arc_is_any_feature_enabled ( struct rte_graph_feature_arc arc)
static

Fast path API to check if any feature enabled on a feature arc Typically from arc->start_node process function

Parameters
arcFeature arc object
Returns
0: If no feature enabled Non-Zero: Bitmask of features enabled.

Definition at line 580 of file rte_graph_feature_arc_worker.h.

◆ rte_graph_feature_arc_prefetch()

static __rte_experimental __rte_always_inline void rte_graph_feature_arc_prefetch ( struct rte_graph_feature_arc arc)
static

Prefetch feature arc fast path cache line

Parameters
arcRTE_GRAPH feature arc object

Definition at line 597 of file rte_graph_feature_arc_worker.h.

◆ rte_graph_feature_arc_feature_data_prefetch()

static __rte_experimental __rte_always_inline void rte_graph_feature_arc_feature_data_prefetch ( struct rte_graph_feature_arc arc,
rte_graph_feature_data_t  fdata 
)
static

Prefetch feature data related fast path cache line

Parameters
arcRTE_GRAPH feature arc object
fdataPointer to feature data object

Definition at line 612 of file rte_graph_feature_arc_worker.h.

Variable Documentation

◆ __rte_graph_feature_arc_main

rte_graph_feature_arc_main_t* __rte_graph_feature_arc_main
extern

extern variables