ethdev: fix indirect action convert
Checks
Commit Message
As indirect action conf fills the indirect action handler, while
converting indirect action, the action conf(action handler) should
be copied from original indirect action conf instead of duplicating
the action handler memory.
Fixes: 4b61b8774be9 ("ethdev: introduce indirect flow action")
Signed-off-by: Suanming Mou <suanmingm@nvidia.com>
---
lib/ethdev/rte_flow.c | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
Comments
Hi Suanming,
> -----Original Message-----
> From: Suanming Mou <suanmingm@nvidia.com>
> Sent: Friday, May 26, 2023 6:18 AM
>
> As indirect action conf fills the indirect action handler, while
> converting indirect action, the action conf(action handler) should
> be copied from original indirect action conf instead of duplicating
> the action handler memory.
>
> Fixes: 4b61b8774be9 ("ethdev: introduce indirect flow action")
>
> Signed-off-by: Suanming Mou <suanmingm@nvidia.com>
> ---
> lib/ethdev/rte_flow.c | 10 +++++++++-
> 1 file changed, 9 insertions(+), 1 deletion(-)
>
> diff --git a/lib/ethdev/rte_flow.c b/lib/ethdev/rte_flow.c
> index 69e6e749f7..ff740f19a4 100644
> --- a/lib/ethdev/rte_flow.c
> +++ b/lib/ethdev/rte_flow.c
> @@ -889,7 +889,15 @@ rte_flow_conv_actions(struct rte_flow_action *dst,
> src -= num;
> dst -= num;
> do {
> - if (src->conf) {
> + if (src->type == RTE_FLOW_ACTION_TYPE_INDIRECT) {
> + /*
> + * Indirect action conf fills the indirect action
> + * handler. Copy the action handle directly instead
> + * of duplicating the pointer memory.
> + */
> + if (size)
> + dst->conf = src->conf;
> + } else if (src->conf) {
> off = RTE_ALIGN_CEIL(off, sizeof(double));
> ret = rte_flow_conv_action_conf
> ((void *)(data + off),
> --
> 2.25.1
Acked-by: Ori Kam <orika@nvidia.com>
Best,
Ori
On 5/29/2023 7:12 AM, Ori Kam wrote:
> Hi Suanming,
>
>> -----Original Message-----
>> From: Suanming Mou <suanmingm@nvidia.com>
>> Sent: Friday, May 26, 2023 6:18 AM
>>
>> As indirect action conf fills the indirect action handler, while
>> converting indirect action, the action conf(action handler) should
>> be copied from original indirect action conf instead of duplicating
>> the action handler memory.
>>
>> Fixes: 4b61b8774be9 ("ethdev: introduce indirect flow action")
>>
>> Signed-off-by: Suanming Mou <suanmingm@nvidia.com>
>> ---
>> lib/ethdev/rte_flow.c | 10 +++++++++-
>> 1 file changed, 9 insertions(+), 1 deletion(-)
>>
>> diff --git a/lib/ethdev/rte_flow.c b/lib/ethdev/rte_flow.c
>> index 69e6e749f7..ff740f19a4 100644
>> --- a/lib/ethdev/rte_flow.c
>> +++ b/lib/ethdev/rte_flow.c
>> @@ -889,7 +889,15 @@ rte_flow_conv_actions(struct rte_flow_action *dst,
>> src -= num;
>> dst -= num;
>> do {
>> - if (src->conf) {
>> + if (src->type == RTE_FLOW_ACTION_TYPE_INDIRECT) {
>> + /*
>> + * Indirect action conf fills the indirect action
>> + * handler. Copy the action handle directly instead
>> + * of duplicating the pointer memory.
>> + */
>> + if (size)
>> + dst->conf = src->conf;
>> + } else if (src->conf) {
>> off = RTE_ALIGN_CEIL(off, sizeof(double));
>> ret = rte_flow_conv_action_conf
>> ((void *)(data + off),
>> --
>> 2.25.1
>
> Acked-by: Ori Kam <orika@nvidia.com>
>
Applied to dpdk-next-net/main, thanks.
@@ -889,7 +889,15 @@ rte_flow_conv_actions(struct rte_flow_action *dst,
src -= num;
dst -= num;
do {
- if (src->conf) {
+ if (src->type == RTE_FLOW_ACTION_TYPE_INDIRECT) {
+ /*
+ * Indirect action conf fills the indirect action
+ * handler. Copy the action handle directly instead
+ * of duplicating the pointer memory.
+ */
+ if (size)
+ dst->conf = src->conf;
+ } else if (src->conf) {
off = RTE_ALIGN_CEIL(off, sizeof(double));
ret = rte_flow_conv_action_conf
((void *)(data + off),