get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/68472/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 68472,
    "url": "https://patches.dpdk.org/api/patches/68472/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/1586932797-99533-3-git-send-email-suanmingm@mellanox.com/",
    "project": {
        "id": 1,
        "url": "https://patches.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<1586932797-99533-3-git-send-email-suanmingm@mellanox.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1586932797-99533-3-git-send-email-suanmingm@mellanox.com",
    "date": "2020-04-15T06:39:49",
    "name": "[02/10] net/mlx5: optimize action flags in flow handle",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "702691b5e79051c915071eb38fc645254614d0dd",
    "submitter": {
        "id": 1358,
        "url": "https://patches.dpdk.org/api/people/1358/?format=api",
        "name": "Suanming Mou",
        "email": "suanmingm@mellanox.com"
    },
    "delegate": {
        "id": 3268,
        "url": "https://patches.dpdk.org/api/users/3268/?format=api",
        "username": "rasland",
        "first_name": "Raslan",
        "last_name": "Darawsheh",
        "email": "rasland@nvidia.com"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/1586932797-99533-3-git-send-email-suanmingm@mellanox.com/mbox/",
    "series": [
        {
            "id": 9383,
            "url": "https://patches.dpdk.org/api/series/9383/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=9383",
            "date": "2020-04-15T06:39:47",
            "name": "net/mlx5: optimize flow structure",
            "version": 1,
            "mbox": "https://patches.dpdk.org/series/9383/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/68472/comments/",
    "check": "fail",
    "checks": "https://patches.dpdk.org/api/patches/68472/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Received": [
            "from dpdk.org (dpdk.org [92.243.14.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 3C96AA0577;\n\tWed, 15 Apr 2020 08:40:23 +0200 (CEST)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 626EE1D163;\n\tWed, 15 Apr 2020 08:40:09 +0200 (CEST)",
            "from git-send-mailer.rdmz.labs.mlnx (unknown [37.142.13.130])\n by dpdk.org (Postfix) with ESMTP id 2A42B1C436\n for <dev@dpdk.org>; Wed, 15 Apr 2020 08:40:07 +0200 (CEST)"
        ],
        "From": "Suanming Mou <suanmingm@mellanox.com>",
        "To": "Matan Azrad <matan@mellanox.com>, Shahaf Shuler <shahafs@mellanox.com>,\n Viacheslav Ovsiienko <viacheslavo@mellanox.com>",
        "Cc": "wentaoc@mellanox.com,\n\trasland@mellanox.com,\n\tdev@dpdk.org",
        "Date": "Wed, 15 Apr 2020 14:39:49 +0800",
        "Message-Id": "<1586932797-99533-3-git-send-email-suanmingm@mellanox.com>",
        "X-Mailer": "git-send-email 1.8.3.1",
        "In-Reply-To": "<1586932797-99533-1-git-send-email-suanmingm@mellanox.com>",
        "References": "<1586932797-99533-1-git-send-email-suanmingm@mellanox.com>",
        "Subject": "[dpdk-dev] [PATCH 02/10] net/mlx5: optimize action flags in flow\n\thandle",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <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>,\n <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "As only limited bits is used in act_flags for flow destroy, it's a bit\nexpensive to save the whole 64 bits. Move the act_flags out of flow\nhandle and save the needed bits for flow destroy to save some bytes for\nthe flow handle data struct.\n\nThe fate action type and mark bits are reserved as they will be used in\nflow destroy.\n\nSigned-off-by: Suanming Mou <suanmingm@mellanox.com>\n---\n drivers/net/mlx5/mlx5_flow.c       |  8 +++-----\n drivers/net/mlx5/mlx5_flow.h       | 16 ++++++++++++++--\n drivers/net/mlx5/mlx5_flow_dv.c    | 30 ++++++++++++++++--------------\n drivers/net/mlx5/mlx5_flow_verbs.c | 23 +++++++++++++----------\n 4 files changed, 46 insertions(+), 31 deletions(-)",
    "diff": "diff --git a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c\nindex bf95a40..ffc2910 100644\n--- a/drivers/net/mlx5/mlx5_flow.c\n+++ b/drivers/net/mlx5/mlx5_flow.c\n@@ -722,8 +722,7 @@ uint32_t mlx5_flow_adjust_priority(struct rte_eth_dev *dev, int32_t priority,\n \t\t       struct mlx5_flow_handle *dev_handle)\n {\n \tstruct mlx5_priv *priv = dev->data->dev_private;\n-\tconst int mark = !!(dev_handle->act_flags &\n-\t\t\t    (MLX5_FLOW_ACTION_FLAG | MLX5_FLOW_ACTION_MARK));\n+\tconst int mark = dev_handle->mark;\n \tconst int tunnel = !!(dev_handle->layers & MLX5_FLOW_LAYER_TUNNEL);\n \tunsigned int i;\n \n@@ -800,8 +799,7 @@ uint32_t mlx5_flow_adjust_priority(struct rte_eth_dev *dev, int32_t priority,\n \t\t\tstruct mlx5_flow_handle *dev_handle)\n {\n \tstruct mlx5_priv *priv = dev->data->dev_private;\n-\tconst int mark = !!(dev_handle->act_flags &\n-\t\t\t    (MLX5_FLOW_ACTION_FLAG | MLX5_FLOW_ACTION_MARK));\n+\tconst int mark = dev_handle->mark;\n \tconst int tunnel = !!(dev_handle->layers & MLX5_FLOW_LAYER_TUNNEL);\n \tunsigned int i;\n \n@@ -2718,7 +2716,7 @@ uint32_t mlx5_flow_adjust_priority(struct rte_eth_dev *dev, int32_t priority,\n \t * help to do the optimization work for source code.\n \t * If no decap actions, use the layers directly.\n \t */\n-\tif (!(dev_flow->handle->act_flags & MLX5_FLOW_ACTION_DECAP))\n+\tif (!(dev_flow->act_flags & MLX5_FLOW_ACTION_DECAP))\n \t\treturn dev_flow->handle->layers;\n \t/* Convert L3 layers with decap action. */\n \tif (dev_flow->handle->layers & MLX5_FLOW_LAYER_INNER_L3_IPV4)\ndiff --git a/drivers/net/mlx5/mlx5_flow.h b/drivers/net/mlx5/mlx5_flow.h\nindex e89a092..0f5c5d4 100644\n--- a/drivers/net/mlx5/mlx5_flow.h\n+++ b/drivers/net/mlx5/mlx5_flow.h\n@@ -339,6 +339,16 @@ enum mlx5_flow_drv_type {\n \tMLX5_FLOW_TYPE_MAX,\n };\n \n+/* Fate action type. */\n+enum mlx5_flow_fate_type {\n+\tMLX5_FLOW_FATE_NONE, /* Egress flow. */\n+\tMLX5_FLOW_FATE_QUEUE,\n+\tMLX5_FLOW_FATE_JUMP,\n+\tMLX5_FLOW_FATE_PORT_ID,\n+\tMLX5_FLOW_FATE_DROP,\n+\tMLX5_FLOW_FATE_MAX,\n+};\n+\n /* Matcher PRM representation */\n struct mlx5_flow_dv_match_params {\n \tsize_t size;\n@@ -502,14 +512,14 @@ struct mlx5_flow_handle {\n \t/**< Index to next device flow handle. */\n \tuint64_t layers;\n \t/**< Bit-fields of present layers, see MLX5_FLOW_LAYER_*. */\n-\tuint64_t act_flags;\n-\t/**< Bit-fields of detected actions, see MLX5_FLOW_ACTION_*. */\n \tvoid *ib_flow; /**< Verbs flow pointer. */\n \tstruct mlx5_vf_vlan vf_vlan; /**< Structure for VF VLAN workaround. */\n \tunion {\n \t\tuint32_t qrss_id; /**< Uniqie Q/RSS suffix subflow tag. */\n \t\tuint32_t mtr_flow_id; /**< Unique meter match flow id. */\n \t};\n+\tuint32_t mark:1; /**< Metadate rxq mark flag. */\n+\tuint32_t fate_action:3; /**< Fate action type. */\n \tunion {\n \t\tuint32_t hrxq; /**< Hash Rx queue object index. */\n \t\tuint32_t jump; /**< Index to the jump action resource. */\n@@ -624,6 +634,8 @@ struct mlx5_flow_verbs_workspace {\n struct mlx5_flow {\n \tstruct rte_flow *flow; /**< Pointer to the main flow. */\n \tuint64_t hash_fields; /**< Verbs hash Rx queue hash fields. */\n+\tuint64_t act_flags;\n+\t/**< Bit-fields of detected actions, see MLX5_FLOW_ACTION_*. */\n \tbool external; /**< true if the flow is created external to PMD. */\n \tuint8_t ingress; /**< 1 if the flow is ingress. */\n \tunion {\ndiff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_dv.c\nindex 54bd3fd..de27b74 100644\n--- a/drivers/net/mlx5/mlx5_flow_dv.c\n+++ b/drivers/net/mlx5/mlx5_flow_dv.c\n@@ -7409,9 +7409,11 @@ struct field_modify_info modify_tcp[] = {\n \t\t\tdev_flow->dv.actions[actions_n++] =\n \t\t\t\t\tdev_flow->dv.port_id_action->action;\n \t\t\taction_flags |= MLX5_FLOW_ACTION_PORT_ID;\n+\t\t\tdev_flow->handle->fate_action = MLX5_FLOW_FATE_PORT_ID;\n \t\t\tbreak;\n \t\tcase RTE_FLOW_ACTION_TYPE_FLAG:\n \t\t\taction_flags |= MLX5_FLOW_ACTION_FLAG;\n+\t\t\tdev_flow->handle->mark = 1;\n \t\t\tif (dev_conf->dv_xmeta_en != MLX5_XMETA_MODE_LEGACY) {\n \t\t\t\tstruct rte_flow_action_mark mark = {\n \t\t\t\t\t.id = MLX5_FLOW_MARK_DEFAULT,\n@@ -7440,6 +7442,7 @@ struct field_modify_info modify_tcp[] = {\n \t\t\tbreak;\n \t\tcase RTE_FLOW_ACTION_TYPE_MARK:\n \t\t\taction_flags |= MLX5_FLOW_ACTION_MARK;\n+\t\t\tdev_flow->handle->mark = 1;\n \t\t\tif (dev_conf->dv_xmeta_en != MLX5_XMETA_MODE_LEGACY) {\n \t\t\t\tconst struct rte_flow_action_mark *mark =\n \t\t\t\t\t(const struct rte_flow_action_mark *)\n@@ -7484,6 +7487,7 @@ struct field_modify_info modify_tcp[] = {\n \t\t\tbreak;\n \t\tcase RTE_FLOW_ACTION_TYPE_DROP:\n \t\t\taction_flags |= MLX5_FLOW_ACTION_DROP;\n+\t\t\tdev_flow->handle->fate_action = MLX5_FLOW_FATE_DROP;\n \t\t\tbreak;\n \t\tcase RTE_FLOW_ACTION_TYPE_QUEUE:\n \t\t\tMLX5_ASSERT(flow->rss.queue);\n@@ -7491,6 +7495,7 @@ struct field_modify_info modify_tcp[] = {\n \t\t\tflow->rss.queue_num = 1;\n \t\t\t(*flow->rss.queue)[0] = queue->index;\n \t\t\taction_flags |= MLX5_FLOW_ACTION_QUEUE;\n+\t\t\tdev_flow->handle->fate_action = MLX5_FLOW_FATE_QUEUE;\n \t\t\tbreak;\n \t\tcase RTE_FLOW_ACTION_TYPE_RSS:\n \t\t\tMLX5_ASSERT(flow->rss.queue);\n@@ -7507,6 +7512,7 @@ struct field_modify_info modify_tcp[] = {\n \t\t\t * when expanding items for RSS.\n \t\t\t */\n \t\t\taction_flags |= MLX5_FLOW_ACTION_RSS;\n+\t\t\tdev_flow->handle->fate_action = MLX5_FLOW_FATE_QUEUE;\n \t\t\tbreak;\n \t\tcase RTE_FLOW_ACTION_TYPE_COUNT:\n \t\t\tif (!dev_conf->devx) {\n@@ -7664,6 +7670,7 @@ struct field_modify_info modify_tcp[] = {\n \t\t\tdev_flow->dv.actions[actions_n++] =\n \t\t\t\t\tdev_flow->dv.jump->action;\n \t\t\taction_flags |= MLX5_FLOW_ACTION_JUMP;\n+\t\t\tdev_flow->handle->fate_action = MLX5_FLOW_FATE_JUMP;\n \t\t\tbreak;\n \t\tcase RTE_FLOW_ACTION_TYPE_SET_MAC_SRC:\n \t\tcase RTE_FLOW_ACTION_TYPE_SET_MAC_DST:\n@@ -7806,7 +7813,7 @@ struct field_modify_info modify_tcp[] = {\n \t\t\tmodify_action_position = actions_n++;\n \t}\n \tdev_flow->dv.actions_n = actions_n;\n-\thandle->act_flags = action_flags;\n+\tdev_flow->act_flags = action_flags;\n \tfor (; items->type != RTE_FLOW_ITEM_TYPE_END; items++) {\n \t\tint tunnel = !!(item_flags & MLX5_FLOW_LAYER_TUNNEL);\n \t\tint item_type = items->type;\n@@ -8062,7 +8069,7 @@ struct field_modify_info modify_tcp[] = {\n \t\tdh = dev_flow->handle;\n \t\tdv_h = &dh->dvh;\n \t\tn = dv->actions_n;\n-\t\tif (dh->act_flags & MLX5_FLOW_ACTION_DROP) {\n+\t\tif (dh->fate_action == MLX5_FLOW_FATE_DROP) {\n \t\t\tif (dv->transfer) {\n \t\t\t\tdv->actions[n++] = priv->sh->esw_drop_action;\n \t\t\t} else {\n@@ -8085,8 +8092,7 @@ struct field_modify_info modify_tcp[] = {\n \t\t\t\tdh->hrxq = UINT32_MAX;\n \t\t\t\tdv->actions[n++] = drop_hrxq->action;\n \t\t\t}\n-\t\t} else if (dh->act_flags &\n-\t\t\t   (MLX5_FLOW_ACTION_QUEUE | MLX5_FLOW_ACTION_RSS)) {\n+\t\t} else if (dh->fate_action == MLX5_FLOW_FATE_QUEUE) {\n \t\t\tstruct mlx5_hrxq *hrxq;\n \t\t\tuint32_t hrxq_idx;\n \n@@ -8147,12 +8153,10 @@ struct field_modify_info modify_tcp[] = {\n \t\t       handle_idx, dh, next) {\n \t\t/* hrxq is union, don't clear it if the flag is not set. */\n \t\tif (dh->hrxq) {\n-\t\t\tif (dh->act_flags & MLX5_FLOW_ACTION_DROP) {\n+\t\t\tif (dh->fate_action == MLX5_FLOW_FATE_DROP) {\n \t\t\t\tmlx5_hrxq_drop_release(dev);\n \t\t\t\tdh->hrxq = 0;\n-\t\t\t} else if (dh->act_flags &\n-\t\t\t\t  (MLX5_FLOW_ACTION_QUEUE |\n-\t\t\t\t  MLX5_FLOW_ACTION_RSS)) {\n+\t\t\t} else if (dh->fate_action == MLX5_FLOW_FATE_QUEUE) {\n \t\t\t\tmlx5_hrxq_release(dev, dh->hrxq);\n \t\t\t\tdh->hrxq = 0;\n \t\t\t}\n@@ -8423,12 +8427,10 @@ struct field_modify_info modify_tcp[] = {\n \t\t}\n \t\t/* hrxq is union, don't touch it only the flag is set. */\n \t\tif (dh->hrxq) {\n-\t\t\tif (dh->act_flags & MLX5_FLOW_ACTION_DROP) {\n+\t\t\tif (dh->fate_action == MLX5_FLOW_FATE_DROP) {\n \t\t\t\tmlx5_hrxq_drop_release(dev);\n \t\t\t\tdh->hrxq = 0;\n-\t\t\t} else if (dh->act_flags &\n-\t\t\t\t  (MLX5_FLOW_ACTION_QUEUE |\n-\t\t\t\t  MLX5_FLOW_ACTION_RSS)) {\n+\t\t\t} else if (dh->fate_action == MLX5_FLOW_FATE_QUEUE) {\n \t\t\t\tmlx5_hrxq_release(dev, dh->hrxq);\n \t\t\t\tdh->hrxq = 0;\n \t\t\t}\n@@ -8479,9 +8481,9 @@ struct field_modify_info modify_tcp[] = {\n \t\t\tflow_dv_encap_decap_resource_release(dev, dev_handle);\n \t\tif (dev_handle->dvh.modify_hdr)\n \t\t\tflow_dv_modify_hdr_resource_release(dev_handle);\n-\t\tif (dev_handle->act_flags & MLX5_FLOW_ACTION_JUMP)\n+\t\tif (dev_handle->fate_action == MLX5_FLOW_FATE_JUMP)\n \t\t\tflow_dv_jump_tbl_resource_release(dev, dev_handle);\n-\t\tif (dev_handle->act_flags & MLX5_FLOW_ACTION_PORT_ID)\n+\t\tif (dev_handle->fate_action == MLX5_FLOW_FATE_PORT_ID)\n \t\t\tflow_dv_port_id_action_resource_release(dev,\n \t\t\t\t\t\t\t\tdev_handle);\n \t\tif (dev_handle->dvh.push_vlan_res)\ndiff --git a/drivers/net/mlx5/mlx5_flow_verbs.c b/drivers/net/mlx5/mlx5_flow_verbs.c\nindex 931d547..1d56b03 100644\n--- a/drivers/net/mlx5/mlx5_flow_verbs.c\n+++ b/drivers/net/mlx5/mlx5_flow_verbs.c\n@@ -1589,22 +1589,27 @@\n \t\tcase RTE_FLOW_ACTION_TYPE_FLAG:\n \t\t\tflow_verbs_translate_action_flag(dev_flow, actions);\n \t\t\taction_flags |= MLX5_FLOW_ACTION_FLAG;\n+\t\t\tdev_flow->handle->mark = 1;\n \t\t\tbreak;\n \t\tcase RTE_FLOW_ACTION_TYPE_MARK:\n \t\t\tflow_verbs_translate_action_mark(dev_flow, actions);\n \t\t\taction_flags |= MLX5_FLOW_ACTION_MARK;\n+\t\t\tdev_flow->handle->mark = 1;\n \t\t\tbreak;\n \t\tcase RTE_FLOW_ACTION_TYPE_DROP:\n \t\t\tflow_verbs_translate_action_drop(dev_flow, actions);\n \t\t\taction_flags |= MLX5_FLOW_ACTION_DROP;\n+\t\t\tdev_flow->handle->fate_action = MLX5_FLOW_FATE_DROP;\n \t\t\tbreak;\n \t\tcase RTE_FLOW_ACTION_TYPE_QUEUE:\n \t\t\tflow_verbs_translate_action_queue(dev_flow, actions);\n \t\t\taction_flags |= MLX5_FLOW_ACTION_QUEUE;\n+\t\t\tdev_flow->handle->fate_action = MLX5_FLOW_FATE_QUEUE;\n \t\t\tbreak;\n \t\tcase RTE_FLOW_ACTION_TYPE_RSS:\n \t\t\tflow_verbs_translate_action_rss(dev_flow, actions);\n \t\t\taction_flags |= MLX5_FLOW_ACTION_RSS;\n+\t\t\tdev_flow->handle->fate_action = MLX5_FLOW_FATE_QUEUE;\n \t\t\tbreak;\n \t\tcase RTE_FLOW_ACTION_TYPE_COUNT:\n \t\t\tret = flow_verbs_translate_action_count(dev_flow,\n@@ -1621,7 +1626,7 @@\n \t\t\t\t\t\t  \"action not supported\");\n \t\t}\n \t}\n-\tdev_flow->handle->act_flags = action_flags;\n+\tdev_flow->act_flags = action_flags;\n \tfor (; items->type != RTE_FLOW_ITEM_TYPE_END; items++) {\n \t\tint tunnel = !!(item_flags & MLX5_FLOW_LAYER_TUNNEL);\n \n@@ -1756,12 +1761,11 @@\n \t\t}\n \t\t/* hrxq is union, don't touch it only the flag is set. */\n \t\tif (handle->hrxq) {\n-\t\t\tif (handle->act_flags & MLX5_FLOW_ACTION_DROP) {\n+\t\t\tif (handle->fate_action == MLX5_FLOW_FATE_DROP) {\n \t\t\t\tmlx5_hrxq_drop_release(dev);\n \t\t\t\thandle->hrxq = 0;\n-\t\t\t} else if (handle->act_flags &\n-\t\t\t\t  (MLX5_FLOW_ACTION_QUEUE |\n-\t\t\t\t  MLX5_FLOW_ACTION_RSS)) {\n+\t\t\t} else if (handle->fate_action ==\n+\t\t\t\t   MLX5_FLOW_FATE_QUEUE) {\n \t\t\t\tmlx5_hrxq_release(dev, handle->hrxq);\n \t\t\t\thandle->hrxq = 0;\n \t\t\t}\n@@ -1833,7 +1837,7 @@\n \tfor (idx = priv->flow_idx - 1; idx >= priv->flow_nested_idx; idx--) {\n \t\tdev_flow = &((struct mlx5_flow *)priv->inter_flows)[idx];\n \t\thandle = dev_flow->handle;\n-\t\tif (handle->act_flags & MLX5_FLOW_ACTION_DROP) {\n+\t\tif (handle->fate_action == MLX5_FLOW_FATE_DROP) {\n \t\t\thrxq = mlx5_hrxq_drop_new(dev);\n \t\t\tif (!hrxq) {\n \t\t\t\trte_flow_error_set\n@@ -1898,12 +1902,11 @@\n \t\t       dev_handles, handle, next) {\n \t\t/* hrxq is union, don't touch it only the flag is set. */\n \t\tif (handle->hrxq) {\n-\t\t\tif (handle->act_flags & MLX5_FLOW_ACTION_DROP) {\n+\t\t\tif (handle->fate_action == MLX5_FLOW_FATE_DROP) {\n \t\t\t\tmlx5_hrxq_drop_release(dev);\n \t\t\t\thandle->hrxq = 0;\n-\t\t\t} else if (handle->act_flags &\n-\t\t\t\t  (MLX5_FLOW_ACTION_QUEUE |\n-\t\t\t\t  MLX5_FLOW_ACTION_RSS)) {\n+\t\t\t} else if (handle->fate_action ==\n+\t\t\t\t   MLX5_FLOW_FATE_QUEUE) {\n \t\t\t\tmlx5_hrxq_release(dev, handle->hrxq);\n \t\t\t\thandle->hrxq = 0;\n \t\t\t}\n",
    "prefixes": [
        "02/10"
    ]
}