]> git.droids-corp.org - dpdk.git/commitdiff
table: relax requirements for entry action data
authorChurchill Khangar <churchill.khangar@intel.com>
Fri, 26 Mar 2021 20:22:24 +0000 (20:22 +0000)
committerThomas Monjalon <thomas@monjalon.net>
Mon, 19 Apr 2021 18:21:18 +0000 (20:21 +0200)
Currently, the table entry action data is required to be NULL when the
action data size is zero. We now require that action data is ignored
when the action data size is zero. This is to allow for a table entry
instance to be allocated once with max action data size for the table
and reused repeatedly for actions of different sizes, including zero.

Signed-off-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>
Signed-off-by: Churchill Khangar <churchill.khangar@intel.com>
lib/librte_pipeline/rte_swx_ctl.c
lib/librte_table/rte_swx_table.h

index 2e4538bd096baeea17a529e1f8a93604b8e74706..ca30767ef7c67abe2ea0a1f173e0a831ec700024 100644 (file)
@@ -338,8 +338,7 @@ table_entry_check(struct rte_swx_ctl_pipeline *ctl,
 
                /* action_data. */
                a = &ctl->actions[entry->action_id];
-               CHECK((a->data_size && entry->action_data) ||
-                     (!a->data_size && !entry->action_data), EINVAL);
+               CHECK(!(a->data_size && !entry->action_data), EINVAL);
        }
 
        return 0;
index 00446718f035b0ce62e26cba031b6d4ce9505c47..e23f2304c6fcdba010f3957b8fab613a4f107a55 100644 (file)
@@ -101,10 +101,11 @@ struct rte_swx_table_entry {
        /** Action ID for the current entry. */
        uint64_t action_id;
 
-       /** Action data for the current entry. Its size is defined by the action
-        * specified by the *action_id*. It must be NULL when the action data
-        * size of the *action_id* action is NULL. It must never exceed the
-        * *action_data_size* of the table.
+       /** Action data for the current entry. Considering S as the action data
+        * size of the *action_id* action, which must be less than or equal to
+        * the table *action_data_size*, the *action_data* field must point to
+        * an array of S bytes when S is non-zero. The *action_data* field is
+        * ignored when S is zero.
         */
        uint8_t *action_data;
 };