diff mbox series

[V3,16/24] pipeline: enable persistent instruction meta-data

Message ID 20210913164443.16875-16-cristian.dumitrescu@intel.com (mailing list archive)
State New
Delegated to: Thomas Monjalon
Headers show
Series [V3,01/24] pipeline: move data structures to internal header file | expand

Checks

Context Check Description
ci/checkpatch success coding style OK

Commit Message

Dumitrescu, Cristian Sept. 13, 2021, 4:44 p.m. UTC
Save the instruction meta-data for later use instead of freeing it up
once the instruction translation is completed.

Signed-off-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>
---
 lib/pipeline/rte_swx_pipeline.c          | 9 ++++++---
 lib/pipeline/rte_swx_pipeline_internal.h | 2 ++
 2 files changed, 8 insertions(+), 3 deletions(-)
diff mbox series

Patch

diff --git a/lib/pipeline/rte_swx_pipeline.c b/lib/pipeline/rte_swx_pipeline.c
index 8b64c57652..4099e364f5 100644
--- a/lib/pipeline/rte_swx_pipeline.c
+++ b/lib/pipeline/rte_swx_pipeline.c
@@ -6456,13 +6456,14 @@  instruction_config(struct rte_swx_pipeline *p,
 
 	if (a) {
 		a->instructions = instr;
+		a->instruction_data = data;
 		a->n_instructions = n_instructions;
 	} else {
 		p->instructions = instr;
+		p->instruction_data = data;
 		p->n_instructions = n_instructions;
 	}
 
-	free(data);
 	return 0;
 
 error:
@@ -6811,8 +6812,8 @@  action_build(struct rte_swx_pipeline *p)
 {
 	struct action *action;
 
-	p->action_instructions = calloc(p->n_actions,
-					sizeof(struct instruction *));
+	/* p->action_instructions. */
+	p->action_instructions = calloc(p->n_actions, sizeof(struct instruction *));
 	CHECK(p->action_instructions, ENOMEM);
 
 	TAILQ_FOREACH(action, &p->actions, node)
@@ -6841,6 +6842,7 @@  action_free(struct rte_swx_pipeline *p)
 			break;
 
 		TAILQ_REMOVE(&p->actions, action, node);
+		free(action->instruction_data);
 		free(action->instructions);
 		free(action);
 	}
@@ -8777,6 +8779,7 @@  rte_swx_pipeline_free(struct rte_swx_pipeline *p)
 	if (!p)
 		return;
 
+	free(p->instruction_data);
 	free(p->instructions);
 
 	metarray_free(p);
diff --git a/lib/pipeline/rte_swx_pipeline_internal.h b/lib/pipeline/rte_swx_pipeline_internal.h
index efd136196f..7a02d6cb5f 100644
--- a/lib/pipeline/rte_swx_pipeline_internal.h
+++ b/lib/pipeline/rte_swx_pipeline_internal.h
@@ -693,6 +693,7 @@  struct action {
 	struct struct_type *st;
 	int *args_endianness; /* 0 = Host Byte Order (HBO); 1 = Network Byte Order (NBO). */
 	struct instruction *instructions;
+	struct instruction_data *instruction_data;
 	uint32_t n_instructions;
 	uint32_t id;
 };
@@ -1388,6 +1389,7 @@  struct rte_swx_pipeline {
 	struct regarray_runtime *regarray_runtime;
 	struct metarray_runtime *metarray_runtime;
 	struct instruction *instructions;
+	struct instruction_data *instruction_data;
 	struct thread threads[RTE_SWX_PIPELINE_THREADS_MAX];
 
 	uint32_t n_structs;