5#ifndef _RTE_GRAPH_MODEL_MCORE_DISPATCH_H_
6#define _RTE_GRAPH_MODEL_MCORE_DISPATCH_H_
26#define RTE_GRAPH_SCHED_WQ_SIZE_MULTIPLIER 8
27#define RTE_GRAPH_SCHED_WQ_SIZE(nb_nodes) \
28 ((typeof(nb_nodes))((nb_nodes) * RTE_GRAPH_SCHED_WQ_SIZE_MULTIPLIER))
47bool __rte_noinline __rte_graph_mcore_dispatch_sched_node_enqueue(
struct rte_node *node,
48 struct rte_graph_rq_head *rq);
62void __rte_graph_mcore_dispatch_sched_wq_process(
struct rte_graph *graph);
77 unsigned int lcore_id);
95 const uint16_t nwords = graph->nb_sched_words;
96 struct rte_node *node;
99 if (graph->dispatch.wq != NULL)
100 __rte_graph_mcore_dispatch_sched_wq_process(graph);
103 for (word = 0; word < nwords; word++)
104 graph->pending[word] |= graph->src_pending[word];
108 for (word = 0; word < nwords; word++)
109 if (graph->pending[word])
115 graph->pending[word] &= ~(1ULL << bit);
116 node = __rte_graph_pending_node(graph, word, bit);
119 if (node->dispatch.lcore_id != RTE_MAX_LCORE &&
120 graph->dispatch.lcore_id != node->dispatch.lcore_id &&
121 graph->dispatch.rq != NULL &&
122 __rte_graph_mcore_dispatch_sched_node_enqueue(node, graph->dispatch.rq))
125 __rte_node_process(graph, node);
static unsigned int rte_ctz64(uint64_t v)
int rte_graph_model_mcore_dispatch_node_lcore_affinity_set(const char *name, unsigned int lcore_id)
static void rte_graph_walk_mcore_dispatch(struct rte_graph *graph)