On Thu, Nov 17, 2022 at 10:40 AM Zhirun Yan <zhirun....@intel.com> wrote: > > It is common to walk on graph circular buffer and use macro to make > it reusable for other worker models. > > Signed-off-by: Haiyue Wang <haiyue.w...@intel.com> > Signed-off-by: Cunming Liang <cunming.li...@intel.com> > Signed-off-by: Zhirun Yan <zhirun....@intel.com> > --- > lib/graph/rte_graph_model_rtc.h | 23 ++--------------------- > lib/graph/rte_graph_worker_common.h | 23 +++++++++++++++++++++++ > 2 files changed, 25 insertions(+), 21 deletions(-)
> +/** > + * Macro to walk on the source node(s) ((cir_start - head) -> cir_start) > + * and then on the pending streams > + * (cir_start -> (cir_start + mask) -> cir_start) > + * in a circular buffer fashion. > + * > + * +-----+ <= cir_start - head [number of source nodes] > + * | | > + * | ... | <= source nodes > + * | | > + * +-----+ <= cir_start [head = 0] [tail = 0] > + * | | > + * | ... | <= pending streams > + * | | > + * +-----+ <= cir_start + mask > + */ > +#define rte_graph_walk_node(graph, head, node) > \ > + for ((node) = RTE_PTR_ADD((graph), > (graph)->cir_start[(int32_t)(head)]); \ > + likely((head) != (graph)->tail); > \ > + (head)++, > \ > + (node) = RTE_PTR_ADD((graph), > (graph)->cir_start[(int32_t)(head)]), \ This is an additional assignment compare to original while() based version. Right? No need to generalize with performance impact. > + (head) = likely((int32_t)(head) > 0) ? (head) & > (graph)->cir_mask : (head)) > + > /** > * @internal > * > -- > 2.25.1 >