get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 104579,
    "url": "http://patchwork.dpdk.org/api/patches/104579/?format=api",
    "web_url": "http://patchwork.dpdk.org/project/dpdk/patch/20211122170949.81466-1-dsosnowski@nvidia.com/",
    "project": {
        "id": 1,
        "url": "http://patchwork.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": "<20211122170949.81466-1-dsosnowski@nvidia.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20211122170949.81466-1-dsosnowski@nvidia.com",
    "date": "2021-11-22T17:09:48",
    "name": "[v3] net/mlx5: fix refcount on detached indirect action",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "5077d46229e4fda3997d3b58183c5ae1b4317f34",
    "submitter": {
        "id": 2386,
        "url": "http://patchwork.dpdk.org/api/people/2386/?format=api",
        "name": "Dariusz Sosnowski",
        "email": "dsosnowski@nvidia.com"
    },
    "delegate": {
        "id": 3268,
        "url": "http://patchwork.dpdk.org/api/users/3268/?format=api",
        "username": "rasland",
        "first_name": "Raslan",
        "last_name": "Darawsheh",
        "email": "rasland@nvidia.com"
    },
    "mbox": "http://patchwork.dpdk.org/project/dpdk/patch/20211122170949.81466-1-dsosnowski@nvidia.com/mbox/",
    "series": [
        {
            "id": 20692,
            "url": "http://patchwork.dpdk.org/api/series/20692/?format=api",
            "web_url": "http://patchwork.dpdk.org/project/dpdk/list/?series=20692",
            "date": "2021-11-22T17:09:48",
            "name": "[v3] net/mlx5: fix refcount on detached indirect action",
            "version": 3,
            "mbox": "http://patchwork.dpdk.org/series/20692/mbox/"
        }
    ],
    "comments": "http://patchwork.dpdk.org/api/patches/104579/comments/",
    "check": "success",
    "checks": "http://patchwork.dpdk.org/api/patches/104579/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 mails.dpdk.org (mails.dpdk.org [217.70.189.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id D937DA0C4B;\n\tMon, 22 Nov 2021 18:10:50 +0100 (CET)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 98A394014E;\n\tMon, 22 Nov 2021 18:10:50 +0100 (CET)",
            "from NAM11-BN8-obe.outbound.protection.outlook.com\n (mail-bn8nam11on2064.outbound.protection.outlook.com [40.107.236.64])\n by mails.dpdk.org (Postfix) with ESMTP id 7DB7E4003C;\n Mon, 22 Nov 2021 18:10:48 +0100 (CET)",
            "from DM5PR10CA0005.namprd10.prod.outlook.com (2603:10b6:4:2::15) by\n DM6PR12MB3546.namprd12.prod.outlook.com (2603:10b6:5:18d::17) with\n Microsoft\n SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n 15.20.4713.22; Mon, 22 Nov 2021 17:10:46 +0000",
            "from DM6NAM11FT025.eop-nam11.prod.protection.outlook.com\n (2603:10b6:4:2:cafe::ea) by DM5PR10CA0005.outlook.office365.com\n (2603:10b6:4:2::15) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4713.20 via Frontend\n Transport; Mon, 22 Nov 2021 17:10:46 +0000",
            "from mail.nvidia.com (216.228.112.34) by\n DM6NAM11FT025.mail.protection.outlook.com (10.13.172.197) with Microsoft SMTP\n Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id\n 15.20.4713.20 via Frontend Transport; Mon, 22 Nov 2021 17:10:43 +0000",
            "from nvidia.com (172.20.187.6) by HQMAIL107.nvidia.com\n (172.20.187.13) with Microsoft SMTP Server (TLS) id 15.0.1497.18; Mon, 22 Nov\n 2021 17:10:40 +0000"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n b=brWfOR2m/cvMBDLIzG1VMcWC7Fgx2vdex/XN/3TG3nFJVZWoqKbwETNN4NICbjPjrJhsQiBXBQOXBsSCaCdjP2AuX+pMHYffRaF6uyY/e+WCOdCWR+STKUkpmbWpLO9W3U02BfhvcsrjtaIKP0rxJF7nm+m/5/B8z3+q9c4CQ9pOhTGy3WU+8cybvW5KawP7jlyd9rQ6ijH+SkJKgqeGR5cy+VwLRYEhfRFB2PNRtohD6B52jzAaDquNuryKdSEgA2U1dcxSWW+xW+4a/8wV+VRb0d3fzJVSnYtxA8NPfhm7kJQu3Bx74StD5GccpnGx46JPfWzHXzWk6Wm24+5v4g==",
        "ARC-Message-Signature": "i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector9901;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;\n bh=wjOvS+rUDgFi6m2b6/e22j/Qs6DeLKI36sHIprRh1Wk=;\n b=V0L6XNF1v/3HxgKORojWSFre6/N03/6Wn4ANFTUTqH9tNiA9vLfMV7jQgeHpUpXhxOYYzbIG3WF40gDOO5r0qpYjP2uSBQpyrCeokvpbdUOoxzNTawaG8//rCUCeR7L9oCryiB4mNRIHACe9o7ZH092zXU5pIXNZV+TWvxOI6Ls9r8ULaCgzn4MlmuHo5juxuES3M+KD6F9/HkkOcnG8Hy7ENS+BK1GT/vSktwcF0cJj4+o+WNn57eiJkedl+p4GKyQHsDDmIKcgObEfYJ/ubKIEe9uQVuUJmm5sdJpF7GuWfM4eZL9r0RCJfs9RHqLRMThnDBsrrqTWcpep9+ekiQ==",
        "ARC-Authentication-Results": "i=1; mx.microsoft.com 1; spf=pass (sender ip is\n 216.228.112.34) smtp.rcpttodomain=dpdk.org smtp.mailfrom=nvidia.com;\n dmarc=pass (p=quarantine sp=quarantine pct=100) action=none\n header.from=nvidia.com; dkim=none (message not signed); arc=none",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com;\n s=selector2;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=wjOvS+rUDgFi6m2b6/e22j/Qs6DeLKI36sHIprRh1Wk=;\n b=TO03IQjQRxXeYzv7Umw6m4wsXJEydMq8ltOhoCYyiVYhRkyz58lLzUH3yiIBlBoNDkjodxyzzQeS9M866if3t9ULTduahkwnRdXzGg2NqEPbVQiefNlkPrpJ5ypEImM6+i+EQNX6VE6sfeEQ1IJPez4EUjzzT/4v4tjh8s8M5g2frLMoVsEcS4oetFXKki1UuLCPcaqwqHyQVAYQS7GNsl24zt5G4Gf4O4cYrS2rrXnzUoikyYCAdUpXKR6olO3ojM7kkKh5QtNQzzj9HARbrH5D1Kjd7Fb7kUKKc09uPjmhSScalyfgdoQGbTF6xiRCtqrCubiwpwyERFsfQLm8WA==",
        "X-MS-Exchange-Authentication-Results": "spf=pass (sender IP is 216.228.112.34)\n smtp.mailfrom=nvidia.com; dkim=none (message not signed)\n header.d=none;dmarc=pass action=none header.from=nvidia.com;",
        "Received-SPF": "Pass (protection.outlook.com: domain of nvidia.com designates\n 216.228.112.34 as permitted sender) receiver=protection.outlook.com;\n client-ip=216.228.112.34; helo=mail.nvidia.com;",
        "From": "Dariusz Sosnowski <dsosnowski@nvidia.com>",
        "To": "Matan Azrad <matan@nvidia.com>, Viacheslav Ovsiienko\n <viacheslavo@nvidia.com>, Dmitry Kozlyuk <dkozlyuk@nvidia.com>",
        "CC": "Raslan Darawsheh <rasland@nvidia.com>, <dev@dpdk.org>, <stable@dpdk.org>",
        "Subject": "[PATCH v3] net/mlx5: fix refcount on detached indirect action",
        "Date": "Mon, 22 Nov 2021 19:09:48 +0200",
        "Message-ID": "<20211122170949.81466-1-dsosnowski@nvidia.com>",
        "X-Mailer": "git-send-email 2.25.1",
        "In-Reply-To": "<20211122141708.61680-1-dsosnowski@nvidia.com>",
        "References": "<20211122141708.61680-1-dsosnowski@nvidia.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-Originating-IP": "[172.20.187.6]",
        "X-ClientProxiedBy": "HQMAIL105.nvidia.com (172.20.187.12) To\n HQMAIL107.nvidia.com (172.20.187.13)",
        "X-EOPAttributedMessage": "0",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-Office365-Filtering-Correlation-Id": "0e1ec417-49f9-4ed5-0e76-08d9addb049a",
        "X-MS-TrafficTypeDiagnostic": "DM6PR12MB3546:",
        "X-Microsoft-Antispam-PRVS": "\n <DM6PR12MB3546E862A79591A56B1098ADA49F9@DM6PR12MB3546.namprd12.prod.outlook.com>",
        "X-MS-Oob-TLC-OOBClassifiers": "OLM:257;",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-MS-Exchange-AntiSpam-Relay": "0",
        "X-Microsoft-Antispam": "BCL:0;",
        "X-Microsoft-Antispam-Message-Info": "\n p/FGHyTPsmgxRfQhSLumwU3irkDLX7GJUm/BZk38onr3IXC19kR6nEQGp+y3ejrsqLUKKGgD8Zs0ho8nK+RlNBPzJkOfVMXbJTU/6EomPHx/naXYf1j6ScAjHGQb4hlp1cKpa+Q7GN2u3iwkJlY8gmcTlUg1jcsKZGBBEqOtpwF/Wg4hxMWrvsBSAOFhcCmZREFyekSxLMmoP4uC9vG0yGEtCfbcBADCA55DDG8vxEUTLhTnI8SUA9I+14+yRaQwkoJPzy7rP4CzvZtKsdRBgX/MFWXyzlKZvvER6E00TuZMceA54BmAXjYWb+4Kka/oexQNpAGDh83OVja4c+69tiOlsldXbDEvkMetKTCUT7ul/M9t3F3aVTdtu/+Pd5UMROLPnrkWG+JyNV/iZ31xJhlPAuVXHAl4weisKKHRAf7CTnAmoFOx7oM1sF0XH3ABZuMdHFRb6e69aP4ikP6W9Z3QdUbU4MSrQbEIzWoT+Em7hBPX0HAH1JzNcmCe9gPrS/XpDE949WVeIAebIJiC+b8ZgYJidDkhLc/Lzp0d2vwcrXiqEF9NtdLoE4KuWLJy4FS595DkW9q89BMYvCukuDiQo7ve5LmuLtV82bf2xl3B90Wl7RlpeNipqbT1wHGu6TVYWVZ4BnE7jbyTQbww5rK72v0RAdNQecG0pgDhoOluFJ4vi0ZUK2FOZrsSLEK1swESalDfCCiFOt5fR/PDrA==",
        "X-Forefront-Antispam-Report": "CIP:216.228.112.34; CTRY:US; LANG:en; SCL:1;\n SRV:;\n IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:schybrid03.nvidia.com; CAT:NONE;\n SFS:(4636009)(46966006)(36840700001)(36860700001)(8936002)(6286002)(426003)(450100002)(1076003)(6636002)(54906003)(83380400001)(2906002)(508600001)(4326008)(30864003)(356005)(36756003)(316002)(82310400003)(336012)(110136005)(55016002)(8676002)(2616005)(16526019)(7636003)(86362001)(70586007)(7696005)(26005)(186003)(47076005)(5660300002)(70206006);\n DIR:OUT; SFP:1101;",
        "X-OriginatorOrg": "Nvidia.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "22 Nov 2021 17:10:43.4035 (UTC)",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 0e1ec417-49f9-4ed5-0e76-08d9addb049a",
        "X-MS-Exchange-CrossTenant-Id": "43083d15-7273-40c1-b7db-39efd9ccc17a",
        "X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp": "\n TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.112.34];\n Helo=[mail.nvidia.com]",
        "X-MS-Exchange-CrossTenant-AuthSource": "\n DM6NAM11FT025.eop-nam11.prod.protection.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Anonymous",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "HybridOnPrem",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "DM6PR12MB3546",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.29",
        "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"
    },
    "content": "This patch fixes segfault which was triggered when port, with indirect\nactions created, was closed. Segfault was occurring only when\nRTE_LIBRTE_MLX5_DEBUG was defined. It was caused by redundant decrement\nof RX queues refcount:\n\n- refcount was decremented when port was stopped and indirect actions\nwere detached from RX queues (port stop),\n- refcount was decremented when indirect actions objects were destroyed\n(port close or destroying of indirect action).\n\nThis patch fixes behavior. Dereferencing RX queues is done if and only\nif indirect action is explicitly destroyed by the user or detached on\nport stop. Dereferencing RX queues on action destroy operation depends on\nan argument to the wrapper of indirect action destroy operation, introduced\nin this patch.\n\nFixes: ec4e11d41d12 (\"net/mlx5: preserve indirect actions on restart\")\nCc: dkozlyuk@nvidia.com\nCc: stable@dpdk.org\n\nSigned-off-by: Dariusz Sosnowski <dsosnowski@nvidia.com>\n---\n drivers/net/mlx5/mlx5_flow.c    | 42 ++++++++++++++++++++++++---------\n drivers/net/mlx5/mlx5_flow.h    |  1 +\n drivers/net/mlx5/mlx5_flow_dv.c | 15 +++++++++---\n drivers/net/mlx5/mlx5_rx.h      |  3 ++-\n drivers/net/mlx5/mlx5_rxq.c     | 21 +++++++++++------\n 5 files changed, 60 insertions(+), 22 deletions(-)",
    "diff": "diff --git a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c\nindex 43598f92ee..d6cf19a6cd 100644\n--- a/drivers/net/mlx5/mlx5_flow.c\n+++ b/drivers/net/mlx5/mlx5_flow.c\n@@ -8644,6 +8644,25 @@ flow_drv_action_validate(struct rte_eth_dev *dev,\n \treturn fops->action_validate(dev, conf, action, error);\n }\n \n+/* Wrapper for driver action_destroy op callback */\n+static int\n+flow_drv_action_destroy(struct rte_eth_dev *dev,\n+\t\t\tstruct rte_flow_action_handle *handle,\n+\t\t\tbool deref_qs,\n+\t\t\tconst struct mlx5_flow_driver_ops *fops,\n+\t\t\tstruct rte_flow_error *error)\n+{\n+\tstatic const char err_msg[] = \"indirect action destruction unsupported\";\n+\n+\tif (!fops->action_destroy) {\n+\t\tDRV_LOG(ERR, \"port %u %s.\", dev->data->port_id, err_msg);\n+\t\trte_flow_error_set(error, ENOTSUP, RTE_FLOW_ERROR_TYPE_ACTION,\n+\t\t\t\t   NULL, err_msg);\n+\t\treturn -rte_errno;\n+\t}\n+\treturn fops->action_destroy(dev, handle, deref_qs, error);\n+}\n+\n /**\n  * Destroys the shared action by handle.\n  *\n@@ -8665,21 +8684,18 @@ mlx5_action_handle_destroy(struct rte_eth_dev *dev,\n \t\t\t   struct rte_flow_action_handle *handle,\n \t\t\t   struct rte_flow_error *error)\n {\n-\tstatic const char err_msg[] = \"indirect action destruction unsupported\";\n \tstruct rte_flow_attr attr = { .transfer = 0 };\n \tconst struct mlx5_flow_driver_ops *fops =\n \t\t\tflow_get_drv_ops(flow_get_drv_type(dev, &attr));\n \n-\tif (!fops->action_destroy) {\n-\t\tDRV_LOG(ERR, \"port %u %s.\", dev->data->port_id, err_msg);\n-\t\trte_flow_error_set(error, ENOTSUP, RTE_FLOW_ERROR_TYPE_ACTION,\n-\t\t\t\t   NULL, err_msg);\n-\t\treturn -rte_errno;\n+\tif (dev->data->dev_started) {\n+\t\treturn flow_drv_action_destroy(dev, handle, true, fops, error);\n+\t} else {\n+\t\treturn flow_drv_action_destroy(dev, handle, false, fops, error);\n \t}\n-\treturn fops->action_destroy(dev, handle, error);\n }\n \n-/* Wrapper for driver action_destroy op callback */\n+/* Wrapper for driver action_update op callback */\n static int\n flow_drv_action_update(struct rte_eth_dev *dev,\n \t\t       struct rte_flow_action_handle *handle,\n@@ -8698,7 +8714,7 @@ flow_drv_action_update(struct rte_eth_dev *dev,\n \treturn fops->action_update(dev, handle, update, error);\n }\n \n-/* Wrapper for driver action_destroy op callback */\n+/* Wrapper for driver action_query op callback */\n static int\n flow_drv_action_query(struct rte_eth_dev *dev,\n \t\t      const struct rte_flow_action_handle *handle,\n@@ -8845,13 +8861,17 @@ mlx5_action_handle_flush(struct rte_eth_dev *dev)\n \tstruct rte_flow_error error;\n \tstruct mlx5_priv *priv = dev->data->dev_private;\n \tstruct mlx5_shared_action_rss *shared_rss;\n+\tstruct rte_flow_attr attr = { .transfer = 0 };\n+\tconst struct mlx5_flow_driver_ops *fops =\n+\t\t\tflow_get_drv_ops(flow_get_drv_type(dev, &attr));\n \tint ret = 0;\n \tuint32_t idx;\n \n \tILIST_FOREACH(priv->sh->ipool[MLX5_IPOOL_RSS_SHARED_ACTIONS],\n \t\t      priv->rss_shared_actions, idx, shared_rss, next) {\n-\t\tret |= mlx5_action_handle_destroy(dev,\n-\t\t       (struct rte_flow_action_handle *)(uintptr_t)idx, &error);\n+\t\tret |= flow_drv_action_destroy(dev,\n+\t\t       (struct rte_flow_action_handle *)(uintptr_t)idx, false,\n+\t\t       fops, &error);\n \t}\n \treturn ret;\n }\ndiff --git a/drivers/net/mlx5/mlx5_flow.h b/drivers/net/mlx5/mlx5_flow.h\nindex 1de2f2edb0..71ee513951 100644\n--- a/drivers/net/mlx5/mlx5_flow.h\n+++ b/drivers/net/mlx5/mlx5_flow.h\n@@ -1199,6 +1199,7 @@ typedef struct rte_flow_action_handle *(*mlx5_flow_action_create_t)\n typedef int (*mlx5_flow_action_destroy_t)\n \t\t\t\t(struct rte_eth_dev *dev,\n \t\t\t\t struct rte_flow_action_handle *action,\n+\t\t\t\t bool deref_qs,\n \t\t\t\t struct rte_flow_error *error);\n typedef int (*mlx5_flow_action_update_t)\n \t\t\t(struct rte_eth_dev *dev,\ndiff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_dv.c\nindex 2f03e59f9c..b0d59b94ca 100644\n--- a/drivers/net/mlx5/mlx5_flow_dv.c\n+++ b/drivers/net/mlx5/mlx5_flow_dv.c\n@@ -14732,7 +14732,7 @@ __flow_dv_action_rss_setup(struct rte_eth_dev *dev,\n error_hrxq_new:\n \terr = rte_errno;\n \t__flow_dv_action_rss_hrxqs_release(dev, shared_rss);\n-\tif (!mlx5_ind_table_obj_release(dev, shared_rss->ind_tbl, true))\n+\tif (!mlx5_ind_table_obj_release(dev, shared_rss->ind_tbl, true, true))\n \t\tshared_rss->ind_tbl = NULL;\n \trte_errno = err;\n \treturn -rte_errno;\n@@ -14839,6 +14839,9 @@ __flow_dv_action_rss_create(struct rte_eth_dev *dev,\n  *   Pointer to the Ethernet device structure.\n  * @param[in] idx\n  *   The shared RSS action object ID to be removed.\n+ * @param[in] deref_rxqs\n+ *   If true, then dereference any RX queues related to shared RSS action.\n+ *   Otherwise, no additional action will be taken.\n  * @param[out] error\n  *   Perform verbose error reporting if not NULL. Initialized in case of\n  *   error only.\n@@ -14848,6 +14851,7 @@ __flow_dv_action_rss_create(struct rte_eth_dev *dev,\n  */\n static int\n __flow_dv_action_rss_release(struct rte_eth_dev *dev, uint32_t idx,\n+\t\t\t     bool deref_rxqs,\n \t\t\t     struct rte_flow_error *error)\n {\n \tstruct mlx5_priv *priv = dev->data->dev_private;\n@@ -14875,7 +14879,8 @@ __flow_dv_action_rss_release(struct rte_eth_dev *dev, uint32_t idx,\n \t\t\t\t\t  NULL,\n \t\t\t\t\t  \"shared rss hrxq has references\");\n \tqueue = shared_rss->ind_tbl->queues;\n-\tremaining = mlx5_ind_table_obj_release(dev, shared_rss->ind_tbl, true);\n+\tremaining = mlx5_ind_table_obj_release(dev, shared_rss->ind_tbl, true,\n+\t\t\t\t\t       deref_rxqs);\n \tif (remaining)\n \t\treturn rte_flow_error_set(error, EBUSY,\n \t\t\t\t\t  RTE_FLOW_ERROR_TYPE_ACTION,\n@@ -14977,6 +14982,9 @@ flow_dv_action_create(struct rte_eth_dev *dev,\n  * @param[out] error\n  *   Perform verbose error reporting if not NULL. Initialized in case of\n  *   error only.\n+ * @param[in] deref_qs\n+ *   If true, then dereference any queues related to the shared action object.\n+ *   Otherwise, no additional action will be taken.\n  *\n  * @return\n  *   0 on success, otherwise negative errno value.\n@@ -14984,6 +14992,7 @@ flow_dv_action_create(struct rte_eth_dev *dev,\n static int\n flow_dv_action_destroy(struct rte_eth_dev *dev,\n \t\t       struct rte_flow_action_handle *handle,\n+\t\t       bool deref_qs,\n \t\t       struct rte_flow_error *error)\n {\n \tuint32_t act_idx = (uint32_t)(uintptr_t)handle;\n@@ -14995,7 +15004,7 @@ flow_dv_action_destroy(struct rte_eth_dev *dev,\n \n \tswitch (type) {\n \tcase MLX5_INDIRECT_ACTION_TYPE_RSS:\n-\t\treturn __flow_dv_action_rss_release(dev, idx, error);\n+\t\treturn __flow_dv_action_rss_release(dev, idx, deref_qs, error);\n \tcase MLX5_INDIRECT_ACTION_TYPE_COUNT:\n \t\tcnt = flow_dv_counter_get_by_idx(dev, idx, NULL);\n \t\tif (!__atomic_compare_exchange_n(&cnt->shared_info.refcnt,\ndiff --git a/drivers/net/mlx5/mlx5_rx.h b/drivers/net/mlx5/mlx5_rx.h\nindex 9cc1a2703b..b19464bb37 100644\n--- a/drivers/net/mlx5/mlx5_rx.h\n+++ b/drivers/net/mlx5/mlx5_rx.h\n@@ -225,7 +225,8 @@ struct mlx5_ind_table_obj *mlx5_ind_table_obj_get(struct rte_eth_dev *dev,\n \t\t\t\t\t\t  uint32_t queues_n);\n int mlx5_ind_table_obj_release(struct rte_eth_dev *dev,\n \t\t\t       struct mlx5_ind_table_obj *ind_tbl,\n-\t\t\t       bool standalone);\n+\t\t\t       bool standalone,\n+\t\t\t       bool deref_rxqs);\n int mlx5_ind_table_obj_setup(struct rte_eth_dev *dev,\n \t\t\t     struct mlx5_ind_table_obj *ind_tbl);\n int mlx5_ind_table_obj_modify(struct rte_eth_dev *dev,\ndiff --git a/drivers/net/mlx5/mlx5_rxq.c b/drivers/net/mlx5/mlx5_rxq.c\nindex 480f4f9f07..1f6ddbab8b 100644\n--- a/drivers/net/mlx5/mlx5_rxq.c\n+++ b/drivers/net/mlx5/mlx5_rxq.c\n@@ -2195,6 +2195,9 @@ mlx5_ind_table_obj_get(struct rte_eth_dev *dev, const uint16_t *queues,\n  *   Indirection table to release.\n  * @param standalone\n  *   Indirection table for Standalone queue.\n+ * @param deref_rxqs\n+ *   If true, then dereference RX queues related to indirection table.\n+ *   Otherwise, no additional action will be taken.\n  *\n  * @return\n  *   1 while a reference on it exists, 0 when freed.\n@@ -2202,7 +2205,8 @@ mlx5_ind_table_obj_get(struct rte_eth_dev *dev, const uint16_t *queues,\n int\n mlx5_ind_table_obj_release(struct rte_eth_dev *dev,\n \t\t\t   struct mlx5_ind_table_obj *ind_tbl,\n-\t\t\t   bool standalone)\n+\t\t\t   bool standalone,\n+\t\t\t   bool deref_rxqs)\n {\n \tstruct mlx5_priv *priv = dev->data->dev_private;\n \tunsigned int i, ret;\n@@ -2215,8 +2219,10 @@ mlx5_ind_table_obj_release(struct rte_eth_dev *dev,\n \tif (ret)\n \t\treturn 1;\n \tpriv->obj_ops.ind_table_destroy(ind_tbl);\n-\tfor (i = 0; i != ind_tbl->queues_n; ++i)\n-\t\tclaim_nonzero(mlx5_rxq_deref(dev, ind_tbl->queues[i]));\n+\tif (deref_rxqs) {\n+\t\tfor (i = 0; i != ind_tbl->queues_n; ++i)\n+\t\t\tclaim_nonzero(mlx5_rxq_deref(dev, ind_tbl->queues[i]));\n+\t}\n \tmlx5_free(ind_tbl);\n \treturn 0;\n }\n@@ -2573,7 +2579,7 @@ mlx5_hrxq_modify(struct rte_eth_dev *dev, uint32_t hrxq_idx,\n \tif (ind_tbl != hrxq->ind_table) {\n \t\tMLX5_ASSERT(!hrxq->standalone);\n \t\tmlx5_ind_table_obj_release(dev, hrxq->ind_table,\n-\t\t\t\t\t   hrxq->standalone);\n+\t\t\t\t\t   hrxq->standalone, true);\n \t\thrxq->ind_table = ind_tbl;\n \t}\n \thrxq->hash_fields = hash_fields;\n@@ -2583,7 +2589,8 @@ mlx5_hrxq_modify(struct rte_eth_dev *dev, uint32_t hrxq_idx,\n \terr = rte_errno;\n \tif (ind_tbl != hrxq->ind_table) {\n \t\tMLX5_ASSERT(!hrxq->standalone);\n-\t\tmlx5_ind_table_obj_release(dev, ind_tbl, hrxq->standalone);\n+\t\tmlx5_ind_table_obj_release(dev, ind_tbl, hrxq->standalone,\n+\t\t\t\t\t   true);\n \t}\n \trte_errno = err;\n \treturn -rte_errno;\n@@ -2600,7 +2607,7 @@ __mlx5_hrxq_remove(struct rte_eth_dev *dev, struct mlx5_hrxq *hrxq)\n \tpriv->obj_ops.hrxq_destroy(hrxq);\n \tif (!hrxq->standalone) {\n \t\tmlx5_ind_table_obj_release(dev, hrxq->ind_table,\n-\t\t\t\t\t   hrxq->standalone);\n+\t\t\t\t\t   hrxq->standalone, true);\n \t}\n \tmlx5_ipool_free(priv->sh->ipool[MLX5_IPOOL_HRXQ], hrxq->idx);\n }\n@@ -2666,7 +2673,7 @@ __mlx5_hrxq_create(struct rte_eth_dev *dev,\n \treturn hrxq;\n error:\n \tif (!rss_desc->ind_tbl)\n-\t\tmlx5_ind_table_obj_release(dev, ind_tbl, standalone);\n+\t\tmlx5_ind_table_obj_release(dev, ind_tbl, standalone, true);\n \tif (hrxq)\n \t\tmlx5_ipool_free(priv->sh->ipool[MLX5_IPOOL_HRXQ], hrxq_idx);\n \treturn NULL;\n",
    "prefixes": [
        "v3"
    ]
}