From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <dev-bounces@dpdk.org>
Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124])
	by inbox.dpdk.org (Postfix) with ESMTP id DB74FA0547;
	Fri, 10 Sep 2021 15:38:59 +0200 (CEST)
Received: from [217.70.189.124] (localhost [127.0.0.1])
	by mails.dpdk.org (Postfix) with ESMTP id 780F3411A4;
	Fri, 10 Sep 2021 15:37:37 +0200 (CEST)
Received: from mga09.intel.com (mga09.intel.com [134.134.136.24])
 by mails.dpdk.org (Postfix) with ESMTP id 3C7554116C
 for <dev@dpdk.org>; Fri, 10 Sep 2021 15:37:29 +0200 (CEST)
X-IronPort-AV: E=McAfee;i="6200,9189,10102"; a="221113301"
X-IronPort-AV: E=Sophos;i="5.85,283,1624345200"; d="scan'208";a="221113301"
Received: from fmsmga002.fm.intel.com ([10.253.24.26])
 by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;
 10 Sep 2021 06:37:28 -0700
X-ExtLoop1: 1
X-IronPort-AV: E=Sophos;i="5.85,283,1624345200"; d="scan'208";a="549328563"
Received: from silpixa00400573.ir.intel.com (HELO
 silpixa00400573.ger.corp.intel.com) ([10.237.223.107])
 by fmsmga002.fm.intel.com with ESMTP; 10 Sep 2021 06:37:27 -0700
From: Cristian Dumitrescu <cristian.dumitrescu@intel.com>
To: dev@dpdk.org
Date: Fri, 10 Sep 2021 14:37:05 +0100
Message-Id: <20210910133713.93103-16-cristian.dumitrescu@intel.com>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20210910133713.93103-1-cristian.dumitrescu@intel.com>
References: <20210910123003.85448-1-cristian.dumitrescu@intel.com>
 <20210910133713.93103-1-cristian.dumitrescu@intel.com>
Subject: [dpdk-dev] [PATCH V2 16/24] pipeline: enable persistent instruction
 meta-data
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: DPDK patches and discussions <dev.dpdk.org>
List-Unsubscribe: <https://mails.dpdk.org/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://mails.dpdk.org/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <https://mails.dpdk.org/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
Errors-To: dev-bounces@dpdk.org
Sender: "dev" <dev-bounces@dpdk.org>

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 --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;
-- 
2.17.1