/* Error strings indexed by error code for this node. */
char **error_strings;
+ vl_counter_t *error_counters;
/* Buffer format/unformat for this node. */
format_function_t *format_buffer;
u64 calls, vectors, clocks, suspends;
u64 max_clock;
u64 max_clock_n;
- u64 perf_counter0_ticks;
- u64 perf_counter1_ticks;
- u64 perf_counter_vectors;
} vlib_node_stats_t;
#define foreach_vlib_node_state \
u32 error_heap_handle;
u32 error_heap_index;
- /* Error strings indexed by error code for this node. */
- char **error_strings;
+ /* Counter structures indexed by counter code for this node. */
+ vl_counter_t *error_counters;
/* Vector of next node names.
Only used before next_nodes array is initialized. */
vlib_error_t *errors; /**< Vector of errors for this node. */
-#if __SIZEOF_POINTER__ == 4
- u8 pad[8];
-#endif
-
u32 clocks_since_last_overflow; /**< Number of clock cycles. */
u32 max_clock; /**< Maximum clock cycle for an
u32 vectors_since_last_overflow; /**< Number of vector elements
processed by this node. */
- u32 perf_counter0_ticks_since_last_overflow; /**< Perf counter 0 ticks */
- u32 perf_counter1_ticks_since_last_overflow; /**< Perf counter 1 ticks */
- u32 perf_counter_vectors_since_last_overflow; /**< Perf counter vectors */
-
u32 next_frame_index; /**< Start of next frames for this
node. */
vlib_node_runtime_t *nodes_by_type[VLIB_N_NODE_TYPE];
/* Node runtime indices for input nodes with pending interrupts. */
- u32 *pending_interrupt_node_runtime_indices;
- clib_spinlock_t pending_interrupt_lock;
+ void *interrupts;
+ volatile u32 *pending_interrupts;
/* Input nodes are switched from/to interrupt to/from polling mode
when average vector length goes above/below polling/interrupt