From fb7c00169d49a99ea2d14dae05bf0c8190f0971c Mon Sep 17 00:00:00 2001 From: David Gibson Date: Tue, 16 Jan 2024 11:50:40 +1100 Subject: flow: Move flow_count from context structure to a global In general, the passt code is a bit haphazard about what's a true global variable and what's in the quasi-global 'context structure'. The flow_count field is one such example: it's in the context structure, although it's really part of the same data structure as flowtab[], which is a genuine global. Move flow_count to be a regular global to match. For now it needs to be public, rather than static, but we expect to be able to change that in future. Signed-off-by: David Gibson Signed-off-by: Stefano Brivio --- flow.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'flow.c') diff --git a/flow.c b/flow.c index a710e50..64de75c 100644 --- a/flow.c +++ b/flow.c @@ -26,6 +26,7 @@ static_assert(ARRAY_SIZE(flow_type_str) == FLOW_NUM_TYPES, "flow_type_str[] doesn't match enum flow_type"); /* Global Flow Table */ +unsigned flow_count; union flow flowtab[FLOW_MAX]; /* Last time the flow timers ran */ @@ -54,18 +55,18 @@ void flow_log_(const struct flow_common *f, int pri, const char *fmt, ...) * @c: Execution context * @hole: Pointer to recently closed flow */ -void flow_table_compact(struct ctx *c, union flow *hole) +void flow_table_compact(const struct ctx *c, union flow *hole) { union flow *from; - if (FLOW_IDX(hole) == --c->flow_count) { + if (FLOW_IDX(hole) == --flow_count) { debug("flow: table compaction: maximum index was %u (%p)", FLOW_IDX(hole), (void *)hole); memset(hole, 0, sizeof(*hole)); return; } - from = flowtab + c->flow_count; + from = flowtab + flow_count; memcpy(hole, from, sizeof(*hole)); switch (from->f.type) { @@ -93,7 +94,7 @@ void flow_table_compact(struct ctx *c, union flow *hole) * @c: Execution context * @now: Current timestamp */ -void flow_defer_handler(struct ctx *c, const struct timespec *now) +void flow_defer_handler(const struct ctx *c, const struct timespec *now) { bool timer = false; union flow *flow; @@ -103,7 +104,7 @@ void flow_defer_handler(struct ctx *c, const struct timespec *now) flow_timer_run = *now; } - for (flow = flowtab + c->flow_count - 1; flow >= flowtab; flow--) { + for (flow = flowtab + flow_count - 1; flow >= flowtab; flow--) { switch (flow->f.type) { case FLOW_TCP: tcp_flow_defer(c, flow); -- cgit v1.2.3