Skip to contentSkip to conversation

app/testpmd: fix async indirect list action creation

PATCH Applied Gregory Etelson 2 participants 2 messages Mar 7, 2024 – Mar 11, 2024

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 app/testpmd: fix async indirect list action creation

Testpmd calls the same function to create legacy indirect action and indirect list action.
The function did not identify required action correctly.

The patch adds the indirect_list boolean function parameter that is derived from the action type.

Fixes ee752a734d14 ("app/testpmd: add INDIRECT_LIST flow action support")
---
 app/test-pmd/cmdline_flow.c | 1 +
 app/test-pmd/config.c       | 5 ++---
 app/test-pmd/testpmd.h      | 1 +
 3 files changed, 4 insertions(+), 3 deletions(-)
app/test-pmd/cmdline_flow.c +1 -0
index 5f761903c1..fd6c51f72d 100644
@@ -13237,6 +13237,7 @@ cmd_flow_parsed(const struct buffer *in)
 		port_queue_action_handle_create(
 				in->port, in->queue, in->postpone,
 				in->args.vc.attr.group,
+				in->command == QUEUE_INDIRECT_ACTION_LIST_CREATE,
 				&((const struct rte_flow_indir_action_conf) {
 					.ingress = in->args.vc.attr.ingress,
 					.egress = in->args.vc.attr.egress,
app/test-pmd/config.c +2 -3
index 968d2164ab..ba1007ace6 100644
@@ -3099,6 +3099,7 @@ port_queue_flow_update(portid_t port_id, queueid_t queue_id,
 int
 port_queue_action_handle_create(portid_t port_id, uint32_t queue_id,
 				bool postpone, uint32_t id,
+				bool indirect_list,
 				const struct rte_flow_indir_action_conf *conf,
 				const struct rte_flow_action *action)
 {
@@ -3108,8 +3109,6 @@ port_queue_action_handle_create(portid_t port_id, uint32_t queue_id,
 	int ret;
 	struct rte_flow_error error;
 	struct queue_job *job;
-	bool is_indirect_list = action[1].type != RTE_FLOW_ACTION_TYPE_END;
-
 
 	ret = action_alloc(port_id, id, &pia);
 	if (ret)
@@ -3131,7 +3130,7 @@ port_queue_action_handle_create(portid_t port_id, uint32_t queue_id,
 	/* Poisoning to make sure PMDs update it in case of error. */
 	memset(&error, 0x88, sizeof(error));
 
-	if (is_indirect_list)
+	if (indirect_list)
 		queue_action_list_handle_create(port_id, queue_id, pia, job,
 						&attr, conf, action, &error);
 	else
app/test-pmd/testpmd.h +1 -0
index 55df12033a..0afae7d771 100644
@@ -1002,6 +1002,7 @@ int port_queue_flow_update(portid_t port_id, queueid_t queue_id,
 			   const struct rte_flow_action *actions);
 int port_queue_action_handle_create(portid_t port_id, uint32_t queue_id,
 			bool postpone, uint32_t id,
+			bool indirect_list,
 			const struct rte_flow_indir_action_conf *conf,
 			const struct rte_flow_action *action);
 int port_queue_action_handle_destroy(portid_t port_id,
Signature · 1 line
2.39.2
Applied
#1 lore raw
Quoted 11 lines · Gregory Etelson

Testpmd calls the same function to create legacy indirect action and indirect list action.
The function did not identify required action correctly.

The patch adds the indirect_list boolean function parameter that is derived from the action type.

Fixes ee752a734d14 ("app/testpmd: add INDIRECT_LIST flow action support")

Applied to dpdk-next-net/main, thanks.