DPDK-dev Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Stephen Hemminger <stephen@networkplumber.org>
To: dev@dpdk.org
Cc: Stephen Hemminger <stephen@networkplumber.org>,
	Ori Kam <orika@nvidia.com>, Thomas Monjalon <thomas@monjalon.net>,
	Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
Subject: [PATCH 10/22] ethdev: promote indirect action API to stable
Date: Tue,  1 Sep 2026 13:23:09 -0700	[thread overview]
Message-ID: <20260901203217.1485915-11-stephen@networkplumber.org> (raw)
In-Reply-To: <20260901203217.1485915-1-stephen@networkplumber.org>

Indirect (shared) flow actions were introduced in v21.05 and have
been extended twice since, without any change to the original
prototypes:

  21.05  rte_flow_action_handle_create, _destroy, _update, _query
  23.03  rte_flow_action_handle_query_update
  23.07  rte_flow_action_list_handle_create, _destroy,
         _query_update

The synchronous side of the interface is promoted here; the
matching rte_flow_async_action_handle_* calls belong to the async
flow API and are promoted with it.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
 doc/guides/rel_notes/release_26_11.rst |  1 +
 lib/ethdev/rte_flow.c                  | 16 ++++++------
 lib/ethdev/rte_flow.h                  | 35 --------------------------
 3 files changed, 9 insertions(+), 43 deletions(-)

diff --git a/doc/guides/rel_notes/release_26_11.rst b/doc/guides/rel_notes/release_26_11.rst
index 6956417ad9..bc33582126 100644
--- a/doc/guides/rel_notes/release_26_11.rst
+++ b/doc/guides/rel_notes/release_26_11.rst
@@ -115,6 +115,7 @@ API Changes
     ``rte_flow_tunnel_action_decap_release`` and
     ``rte_flow_get_restore_info``
   * flow age: ``rte_flow_get_aged_flows`` and ``rte_flow_get_q_aged_flows``
+  * flow action: ``rte_flow_action_handle_*`` and ``rte_flow_action_list_handle_*``
 
 
 ABI Changes
diff --git a/lib/ethdev/rte_flow.c b/lib/ethdev/rte_flow.c
index e90f93ebcd..aa6f198b65 100644
--- a/lib/ethdev/rte_flow.c
+++ b/lib/ethdev/rte_flow.c
@@ -1322,7 +1322,7 @@ rte_flow_get_q_aged_flows(uint16_t port_id, uint32_t queue_id, void **contexts,
 				  NULL, rte_strerror(ENOTSUP));
 }
 
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_action_handle_create, 21.05)
+RTE_EXPORT_SYMBOL(rte_flow_action_handle_create)
 struct rte_flow_action_handle *
 rte_flow_action_handle_create(uint16_t port_id,
 			      const struct rte_flow_indir_action_conf *conf,
@@ -1350,7 +1350,7 @@ rte_flow_action_handle_create(uint16_t port_id,
 	return handle;
 }
 
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_action_handle_destroy, 21.05)
+RTE_EXPORT_SYMBOL(rte_flow_action_handle_destroy)
 int
 rte_flow_action_handle_destroy(uint16_t port_id,
 			       struct rte_flow_action_handle *handle,
@@ -1374,7 +1374,7 @@ rte_flow_action_handle_destroy(uint16_t port_id,
 	return ret;
 }
 
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_action_handle_update, 21.05)
+RTE_EXPORT_SYMBOL(rte_flow_action_handle_update)
 int
 rte_flow_action_handle_update(uint16_t port_id,
 			      struct rte_flow_action_handle *handle,
@@ -1399,7 +1399,7 @@ rte_flow_action_handle_update(uint16_t port_id,
 	return ret;
 }
 
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_action_handle_query, 21.05)
+RTE_EXPORT_SYMBOL(rte_flow_action_handle_query)
 int
 rte_flow_action_handle_query(uint16_t port_id,
 			     const struct rte_flow_action_handle *handle,
@@ -2460,7 +2460,7 @@ rte_flow_async_action_handle_query(uint16_t port_id,
 	return ret;
 }
 
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_action_handle_query_update, 23.03)
+RTE_EXPORT_SYMBOL(rte_flow_action_handle_query_update)
 int
 rte_flow_action_handle_query_update(uint16_t port_id,
 				    struct rte_flow_action_handle *handle,
@@ -2513,7 +2513,7 @@ rte_flow_async_action_handle_query_update(uint16_t port_id, uint32_t queue_id,
 								  user_data, error);
 }
 
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_action_list_handle_create, 23.07)
+RTE_EXPORT_SYMBOL(rte_flow_action_list_handle_create)
 struct rte_flow_action_list_handle *
 rte_flow_action_list_handle_create(uint16_t port_id,
 				   const
@@ -2541,7 +2541,7 @@ rte_flow_action_list_handle_create(uint16_t port_id,
 	return handle;
 }
 
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_action_list_handle_destroy, 23.07)
+RTE_EXPORT_SYMBOL(rte_flow_action_list_handle_destroy)
 int
 rte_flow_action_list_handle_destroy(uint16_t port_id,
 				    struct rte_flow_action_list_handle *handle,
@@ -2629,7 +2629,7 @@ rte_flow_async_action_list_handle_destroy(uint16_t port_id, uint32_t queue_id,
 	return ret;
 }
 
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_action_list_handle_query_update, 23.07)
+RTE_EXPORT_SYMBOL(rte_flow_action_list_handle_query_update)
 int
 rte_flow_action_list_handle_query_update(uint16_t port_id,
 			 const struct rte_flow_action_list_handle *handle,
diff --git a/lib/ethdev/rte_flow.h b/lib/ethdev/rte_flow.h
index c8194199d6..924005ad4b 100644
--- a/lib/ethdev/rte_flow.h
+++ b/lib/ethdev/rte_flow.h
@@ -5046,9 +5046,6 @@ struct rte_flow_indir_action_conf {
 };
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
  * Create an indirect action object that can be used in flow rules
  * via its handle.
  * The created object handle has single state and configuration
@@ -5072,7 +5069,6 @@ struct rte_flow_indir_action_conf {
  *   - (EINVAL) if *action* invalid.
  *   - (ENOTSUP) if *action* valid but unsupported.
  */
-__rte_experimental
 struct rte_flow_action_handle *
 rte_flow_action_handle_create(uint16_t port_id,
 			      const struct rte_flow_indir_action_conf *conf,
@@ -5080,9 +5076,6 @@ rte_flow_action_handle_create(uint16_t port_id,
 			      struct rte_flow_error *error);
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
  * Destroy indirect action by handle.
  *
  * @param[in] port_id
@@ -5101,16 +5094,12 @@ rte_flow_action_handle_create(uint16_t port_id,
  *   - (-EBUSY) if action pointed by *action* handle still used by some rules
  *   rte_errno is also set.
  */
-__rte_experimental
 int
 rte_flow_action_handle_destroy(uint16_t port_id,
 			       struct rte_flow_action_handle *handle,
 			       struct rte_flow_error *error);
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
  * Update in-place the action configuration and / or state pointed
  * by action *handle* with the configuration provided as *update* argument.
  * The update of the action configuration effects all flow rules reusing
@@ -5140,7 +5129,6 @@ rte_flow_action_handle_destroy(uint16_t port_id,
  *   - (-ENOENT) if indirect action object pointed by *handle* was not found.
  *   rte_errno is also set.
  */
-__rte_experimental
 int
 rte_flow_action_handle_update(uint16_t port_id,
 			      struct rte_flow_action_handle *handle,
@@ -5148,9 +5136,6 @@ rte_flow_action_handle_update(uint16_t port_id,
 			      struct rte_flow_error *error);
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
  * Query the direct action by corresponding indirect action object handle.
  *
  * Retrieve action-specific data such as counters.
@@ -5172,7 +5157,6 @@ rte_flow_action_handle_update(uint16_t port_id,
  * @return
  *   0 on success, a negative errno value otherwise and rte_errno is set.
  */
-__rte_experimental
 int
 rte_flow_action_handle_query(uint16_t port_id,
 			     const struct rte_flow_action_handle *handle,
@@ -6562,9 +6546,6 @@ rte_flow_async_action_handle_query(uint16_t port_id,
 		struct rte_flow_error *error);
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
  * Query and update operational mode.
  *
  * @see rte_flow_action_handle_query_update()
@@ -6576,9 +6557,6 @@ enum rte_flow_query_update_mode {
 };
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
  * Query and/or update indirect flow action.
  * If both query and update not NULL, the function atomically
  * queries and updates indirect action. Query and update are carried in order
@@ -6608,7 +6586,6 @@ enum rte_flow_query_update_mode {
  * - (-EINVAL) if *handle* or *mode* invalid or
  *             both *query* and *update* are NULL.
  */
-__rte_experimental
 int
 rte_flow_action_handle_query_update(uint16_t port_id,
 				    struct rte_flow_action_handle *handle,
@@ -6686,9 +6663,6 @@ struct rte_flow_action_indirect_list {
 };
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
  * Create an indirect flow action object from flow actions list.
  * The object is identified by a unique handle.
  * The handle has single state and configuration
@@ -6712,7 +6686,6 @@ struct rte_flow_action_indirect_list {
  *   - (-EINVAL) if *actions* list invalid.
  *   - (-ENOTSUP) if *action* list element valid but unsupported.
  */
-__rte_experimental
 struct rte_flow_action_list_handle *
 rte_flow_action_list_handle_create(uint16_t port_id,
 				   const
@@ -6764,9 +6737,6 @@ rte_flow_async_action_list_handle_create(uint16_t port_id, uint32_t queue_id,
 					 struct rte_flow_error *error);
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
  * Destroy indirect actions list by handle.
  *
  * @param[in] port_id
@@ -6784,7 +6754,6 @@ rte_flow_async_action_list_handle_create(uint16_t port_id, uint32_t queue_id,
  *   - (-ENOENT) if actions list pointed by *action* handle was not found.
  *   - (-EBUSY) if actions list pointed by *action* handle still used
  */
-__rte_experimental
 int
 rte_flow_action_list_handle_destroy(uint16_t port_id,
 				    struct rte_flow_action_list_handle *handle,
@@ -6829,9 +6798,6 @@ rte_flow_async_action_list_handle_destroy
 		 void *user_data, struct rte_flow_error *error);
 
 /**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
  * Query and/or update indirect flow actions list.
  * If both query and update not NULL, the function atomically
  * queries and updates indirect action. Query and update are carried in order
@@ -6864,7 +6830,6 @@ rte_flow_async_action_list_handle_destroy
  * - (-EINVAL) if *handle* or *mode* invalid or
  *             both *query* and *update* are NULL.
  */
-__rte_experimental
 int
 rte_flow_action_list_handle_query_update(uint16_t port_id,
 					 const struct rte_flow_action_list_handle *handle,
-- 
2.53.0


  parent reply	other threads:[~2026-09-01 20:33 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-01 20:22 [PATCH 00/22] ethdev: convert experimental symbols etc Stephen Hemminger
2026-09-01 20:23 ` [PATCH 01/22] ethdev: promote meter API to stable Stephen Hemminger
2026-09-01 20:23 ` [PATCH 02/22] ethdev: promote module EEPROM " Stephen Hemminger
2026-09-01 20:23 ` [PATCH 03/22] ethdev: promote rte_flow_conv " Stephen Hemminger
2026-09-01 20:23 ` [PATCH 04/22] ethdev: promote hairpin API " Stephen Hemminger
2026-09-01 20:23 ` [PATCH 05/22] ethdev: promote read clock and flow dump " Stephen Hemminger
2026-09-01 20:23 ` [PATCH 06/22] ethdev: promote FEC API " Stephen Hemminger
2026-09-01 20:23 ` [PATCH 07/22] ethdev: promote link speed helpers " Stephen Hemminger
2026-09-02  8:05   ` Bruce Richardson
2026-09-01 20:23 ` [PATCH 08/22] ethdev: promote flow tunnel offload API " Stephen Hemminger
2026-09-01 20:23 ` [PATCH 09/22] ethdev: promote aged flow query " Stephen Hemminger
2026-09-01 20:23 ` Stephen Hemminger [this message]
2026-09-01 20:23 ` [PATCH 11/22] ethdev: promote asynchronous flow API " Stephen Hemminger
2026-09-01 20:23 ` [PATCH 12/22] ethdev: promote flex item " Stephen Hemminger
2026-09-01 20:23 ` [PATCH 13/22] ethdev: promote remaining aged flow helpers " Stephen Hemminger
2026-09-01 20:23 ` [PATCH 14/22] ethdev: promote congestion management API " Stephen Hemminger
2026-09-01 20:23 ` [PATCH 15/22] ethdev: promote IP reassembly offload " Stephen Hemminger
2026-09-01 20:23 ` [PATCH 16/22] ethdev: promote per-queue priority flow control " Stephen Hemminger
2026-09-01 20:23 ` [PATCH 17/22] ethdev: promote device info and dump helpers " Stephen Hemminger
2026-09-01 20:23 ` [PATCH 18/22] ethdev: promote speed lanes API " Stephen Hemminger
2026-09-01 20:23 ` [PATCH 19/22] ethdev: promote queue helpers and aggregated ports " Stephen Hemminger
2026-09-01 20:23 ` [PATCH 20/22] ethdev: promote remaining aged symbols " Stephen Hemminger
2026-09-01 20:23 ` [PATCH 21/22] ethdev: promote fast path inline helpers " Stephen Hemminger
2026-09-01 20:23 ` [PATCH 22/22] ethdev: promote experimental structures " Stephen Hemminger

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260901203217.1485915-11-stephen@networkplumber.org \
    --to=stephen@networkplumber.org \
    --cc=andrew.rybchenko@oktetlabs.ru \
    --cc=dev@dpdk.org \
    --cc=orika@nvidia.com \
    --cc=thomas@monjalon.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox