DPDK  25.11.0
rte_tailq.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2010-2014 Intel Corporation
3  */
4 
5 #ifndef _RTE_TAILQ_H_
6 #define _RTE_TAILQ_H_
7 
13 #include <stdio.h>
14 #include <rte_debug.h>
15 
16 #ifdef __cplusplus
17 extern "C" {
18 #endif
19 
23  void *data;
24 };
26 RTE_TAILQ_HEAD(rte_tailq_entry_head, rte_tailq_entry);
27 
28 #define RTE_TAILQ_NAMESIZE 32
29 
39  struct rte_tailq_entry_head tailq_head;
40  char name[RTE_TAILQ_NAMESIZE];
41 };
42 
43 struct rte_tailq_elem {
48  struct rte_tailq_head *head;
49  RTE_TAILQ_ENTRY(rte_tailq_elem) next;
50  const char name[RTE_TAILQ_NAMESIZE];
51 };
52 
56 #define RTE_TAILQ_CAST(tailq_entry, struct_name) \
57  (struct struct_name *)&(tailq_entry)->tailq_head
58 
74 #define RTE_TAILQ_LOOKUP(name, struct_name) __extension__ ({ \
75  struct rte_tailq_head *head = rte_eal_tailq_lookup(name); \
76  head == NULL ? NULL : RTE_TAILQ_CAST(head, struct_name); \
77 })
78 
85 void rte_dump_tailq(FILE *f);
86 
100 struct rte_tailq_head *rte_eal_tailq_lookup(const char *name);
101 
118 int rte_eal_tailq_register(struct rte_tailq_elem *t);
119 
120 #define EAL_REGISTER_TAILQ(t) \
121 RTE_INIT(tailqinitfn_ ##t) \
122 { \
123  if (rte_eal_tailq_register(&t) < 0) \
124  rte_panic("Cannot initialize tailq: %s\n", t.name); \
125 }
126 
127 /* This macro permits both remove and free var within the loop safely.*/
128 #define RTE_TAILQ_FOREACH_SAFE(var, head, field, tvar) \
129  for ((var) = RTE_TAILQ_FIRST((head)); \
130  (var) && ((tvar) = RTE_TAILQ_NEXT((var), field), 1); \
131  (var) = (tvar))
132 
133 #ifdef __cplusplus
134 }
135 #endif
136 
137 #endif /* _RTE_TAILQ_H_ */
void rte_dump_tailq(FILE *f)
int rte_eal_tailq_register(struct rte_tailq_elem *t)
struct rte_tailq_head * rte_eal_tailq_lookup(const char *name)
RTE_TAILQ_HEAD(rte_tailq_entry_head, rte_tailq_entry)
Definition: rte_tailq.h:21
RTE_TAILQ_ENTRY(rte_tailq_entry) next
void * data
Definition: rte_tailq.h:23
struct rte_tailq_entry_head tailq_head
Definition: rte_tailq.h:39