get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 134776,
    "url": "https://patches.dpdk.org/api/patches/134776/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20231204015718.780578-8-chaoyong.he@corigine.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": "<20231204015718.780578-8-chaoyong.he@corigine.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20231204015718.780578-8-chaoyong.he@corigine.com",
    "date": "2023-12-04T01:57:17",
    "name": "[v2,7/8] net/nfp: fix resource leak for exit of flower firmware",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "16b1dcaf5cd76352df12f0cb530510ca03dd185b",
    "submitter": {
        "id": 2554,
        "url": "https://patches.dpdk.org/api/people/2554/?format=api",
        "name": "Chaoyong He",
        "email": "chaoyong.he@corigine.com"
    },
    "delegate": {
        "id": 319,
        "url": "https://patches.dpdk.org/api/users/319/?format=api",
        "username": "fyigit",
        "first_name": "Ferruh",
        "last_name": "Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/20231204015718.780578-8-chaoyong.he@corigine.com/mbox/",
    "series": [
        {
            "id": 30434,
            "url": "https://patches.dpdk.org/api/series/30434/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=30434",
            "date": "2023-12-04T01:57:10",
            "name": "fix resource leak problems",
            "version": 2,
            "mbox": "https://patches.dpdk.org/series/30434/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/134776/comments/",
    "check": "success",
    "checks": "https://patches.dpdk.org/api/patches/134776/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 E914843666;\n\tMon,  4 Dec 2023 02:58:40 +0100 (CET)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 7C8D440E78;\n\tMon,  4 Dec 2023 02:57:56 +0100 (CET)",
            "from NAM12-DM6-obe.outbound.protection.outlook.com\n (mail-dm6nam12on2096.outbound.protection.outlook.com [40.107.243.96])\n by mails.dpdk.org (Postfix) with ESMTP id 3C95340E0F;\n Mon,  4 Dec 2023 02:57:55 +0100 (CET)",
            "from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5)\n by PH0PR13MB5876.namprd13.prod.outlook.com (2603:10b6:510:168::8)\n with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7046.33; Mon, 4 Dec\n 2023 01:57:53 +0000",
            "from SJ0PR13MB5545.namprd13.prod.outlook.com\n ([fe80::45b3:d83c:cff2:4a1b]) by SJ0PR13MB5545.namprd13.prod.outlook.com\n ([fe80::45b3:d83c:cff2:4a1b%6]) with mapi id 15.20.7046.033; Mon, 4 Dec 2023\n 01:57:53 +0000"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n b=YsWS1T2tkSIhZDOl4hWPJu/wCFfx+1IJ2P8gXYFASpjxxLnWRZoLi4walRvTIK+TG5WKRAWGKrQo4GloMLlJLUUtTM3keAeARa7jlPp3V7vpvxjxhE8ouwPmgz5rVhIoLTIa7dK3LIaYlkVD2EL1WDwK0dSLxY8qdrcaGsy6229M63GQwaeAkr3gZEA5CU+4SbbGNFgGdA+jFhkAtkjbQjOC88bknipfk1YSmTQAoMEGBJm5YZy3Z1t9CnSSB2/0UBn+JZX6wPpnQ73iPDpSsBXB5Fd1F29HqQ9/2d1pXsfHEkxsL022xVir1SMCEZDrrTs2QigVfWuisEaQ3TmQ9w==",
        "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=lGa+cgZr3ax8xKPH39g9JLw0wfs8OoRW/CH/ifyqZBg=;\n b=MQFTPSL6WEsUReWi4koSuCTN/ZljTX7/JEstzkzMSmQNUqQta7WHxTcUKw+i1Bka1s9iHpdH93oXEvt5l/aU68YEIgScwc/TdES9IJiILgOtmpDhUtyzYWlykj+SMb4h/0lEPfyomA2B5ZE3zqsIdeBRib7NN+iF8Jp/19aPSnLfrDOjM7Z056AttL4lvcONZvH6oIEW8GCuNvVyw7QBRcwe3zVWeWH58e8DSrw6Jlhn27MvOx7mOkpCeMCkYqt7L5Q3WTEcsL3M+TxL7V7VmuvyMU1gpBn7sCdEaVhbU85pkXBs7PN3GforYG6LXqN+tG7vaQly9XdwspJBR7cYwg==",
        "ARC-Authentication-Results": "i=1; mx.microsoft.com 1; spf=pass\n smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com;\n dkim=pass header.d=corigine.com; arc=none",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=lGa+cgZr3ax8xKPH39g9JLw0wfs8OoRW/CH/ifyqZBg=;\n b=TOVd7pWTXfT1jUqj8a4dIrqNgfkpcFJGhqntrSZpwEeE4cpzEg7oETaFfZflfjgGZKndHhjFWhU8LBOQ0on5+GgE8ICzXlSYN6TIre9TkQdRj8vQSfoTiW5mAYyZ2fsxeGMy6J5ABIJh/DwqGNi55c6XX8Je1ejfe1tEa9TviD0=",
        "Authentication-Results": "dkim=none (message not signed)\n header.d=none;dmarc=none action=none header.from=corigine.com;",
        "From": "Chaoyong He <chaoyong.he@corigine.com>",
        "To": "dev@dpdk.org",
        "Cc": "oss-drivers@corigine.com, Chaoyong He <chaoyong.he@corigine.com>,\n stable@dpdk.org, Long Wu <long.wu@corigine.com>,\n Peng Zhang <peng.zhang@corigine.com>",
        "Subject": "[PATCH v2 7/8] net/nfp: fix resource leak for exit of flower firmware",
        "Date": "Mon,  4 Dec 2023 09:57:17 +0800",
        "Message-Id": "<20231204015718.780578-8-chaoyong.he@corigine.com>",
        "X-Mailer": "git-send-email 2.39.1",
        "In-Reply-To": "<20231204015718.780578-1-chaoyong.he@corigine.com>",
        "References": "<20231130085238.60290-1-chaoyong.he@corigine.com>\n <20231204015718.780578-1-chaoyong.he@corigine.com>",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-ClientProxiedBy": "PH0PR07CA0021.namprd07.prod.outlook.com\n (2603:10b6:510:5::26) To SJ0PR13MB5545.namprd13.prod.outlook.com\n (2603:10b6:a03:424::5)",
        "MIME-Version": "1.0",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-TrafficTypeDiagnostic": "SJ0PR13MB5545:EE_|PH0PR13MB5876:EE_",
        "X-MS-Office365-Filtering-Correlation-Id": "73b3efac-98ff-4c1b-bbab-08dbf46c6d21",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-MS-Exchange-AntiSpam-Relay": "0",
        "X-Microsoft-Antispam": "BCL:0;",
        "X-Microsoft-Antispam-Message-Info": "\n 1kONrajvB4y5vKjkZCAZ+c1xNpH/avLPOSEFOGvFj78Xsu1psaRNoqfnCavlvhqEoJ0W7bkg9YlM58RBhAFzW/N9qWgRFEQ8BafUMQGxwTzrTTT3ZXE8jP+gRSdEXL0BRRLep3Wqi6l4WBrZ7Foyci0aOmZZXc6/OoTE4hx3E64MplgRyvWwMuYg0hhjUu/8v1x5QbB4Ew+Am71RDQIdSNW2tpyuhJtVwCB2NEb36jdCfSD+b3jzbxDrIrG0UmBv+yv+WeNmKjhUcfkhva0tnWY4BKY5G6jNMp4o9OXLBgArWRp+tGS12lUdUxk3NL1d351JUfN+ogL+88fHAfGUosWGO5BQB+SE8qYokBVG4dlS5bd11ms/NTbDI3e+Vwk92Fef+qN9lDA31eDqwgpNY07Er3tH6jkICTgvSzgq7evrDvA1LB5ye5vRBfQ/t8B4OCfy115hhFpKQTko/sI5TkYsv+E/Ie04AnglUIRQja7mrLkTMYro+IDOATGp+NgR7S5g2t+GaKLS2BQQQW4WaP5G1dBlMcQdScSyOvIFij1R32ucPjMaZz4SkApobIAhWcLgfY7yA8USJfLibsvMb3B+NBe8nRnUP65dWY4M+pCsLtOX4GtAcKyUHTxyj2SCzQXFY0NQDRhg4JJOwmOwctwq1Z5fUt9yFcDQNFb1tW4=",
        "X-Forefront-Antispam-Report": "CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:;\n IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE;\n SFS:(13230031)(366004)(376002)(136003)(346002)(39830400003)(396003)(230922051799003)(186009)(64100799003)(451199024)(1800799012)(83380400001)(38100700002)(41300700001)(26005)(66556008)(66476007)(6916009)(66946007)(44832011)(5660300002)(8936002)(8676002)(4326008)(450100002)(316002)(54906003)(6512007)(6506007)(107886003)(1076003)(2616005)(6486002)(6666004)(52116002)(478600001)(2906002)(86362001)(36756003)(38350700005);\n DIR:OUT; SFP:1102;",
        "X-MS-Exchange-AntiSpam-MessageData-ChunkCount": "1",
        "X-MS-Exchange-AntiSpam-MessageData-0": "\n KGjo4xUDLkwReVdbyAUv7m0yFO5gR+AM637WvYJvZnvY5DEDJaErR8JVnrDUMnJTX7kfNvZZ5YFCaQnYCQNx4sYryrG3cV8TY2tNkpbInGGQwhEfPVDf+FRfReBlhPPNMm7mt8Dd0JPXZpmdCqayPcjCl1+pXHHGwCeROA1wkOr+jLLlY+BgqrIgfPyK4NlI6CqmVtTBQDPazfTbh/DGOHWGfcnETbIwTThK23hs6wsm5dLSXU1PZqISbytxOJLZM3VHqoUqz9DO2gw4aGTlG7UW5lLske0nj4JG7YRnDU0d/dWV9wXi3bewg4wwgIMdAlWUDlKKXrNnyM/i6E//p3vg7uHlsLKth4Mba6aB5Ahta9z6PV5YvHwHYuJr8hmMxft/TQ4VvLR4CaBIL3QsgGPsuIBnqc8nbNCYbFYblDwIefU+BVlQgLV80dz92vboWgffeDw1vf7dV4uATuFnXWMSloSV9eLeNJf7A5+aDNPeuus3R3DJf/69nnWGXvIH6vv8ocSPGzLwu9j3oci+Ixpr0iC6cZ26+YYCi5AMBWxiE/VH5KOvR365lD3ViS3wF5Nf47dIrsM73r5r71oUyZX22apgzhUmUeQh+nZxUIO6dNiBxdhLSIR+EeJn39W6sZ4XxrM/aLGOHjB1F3I396HwFWO20T2EblbIPA63G3lg7q7LgLrwLdw1aOsL/S+4pKtK0TGDfkiQQSvrkRlwa+W5PqWaaY3xZDo67SJyK7au8VwzpOirZ38Y29T0VCi5lc+hv0wResmczKT5LAWa6UA19AZEhHUW8Z3MTShwdtH+t5glS62XQGk5Y4lsE4M8Uf5gj+bzrVVm8cxozPEuizn1uWD75HpzcEOx377V9fe+zUz1NUnoYFFoH3LaY5EUYfKbs3NVahGXpn02QpBbKe+OrfOm69jvS0RhHtmFc/zhAQO9gQyzTnIU4eE09au/3zswUkbT/ZBByrUphbI2k3pNSvNqqAuMVmYtfGl4gyFh5fkYg6DwtS5k18mms3VhLdbgxSuXfkEBKFInf1vHQyeHPPt1SY5+RODEznOnRC89nk8RveGp9xnJ2WUt+m7XT7zNlLoHU29anSORCa7VS3xRR6jegZ7kD1WKzCRzZR0ZL7jkoxy3OU9myJgdCBlgt84tnSAk/S8fzbKR6TKNyTiaWcAGfsHhkTtTt3S9aTzOVVH2ZAidDEPddrpxNptC69z6U8aVZ6aLcQXa2NrC4L3LBh4GU8BGx+c7h7xDpzUcBhfIsV2RemPEuo8Z6PoU8WCRUu7x/EoS6dEL+i5hsLh06DTMEoKETx0uncQ82IGUPiyo65TNZhaGeDIghARAZk8fBYRm7jwJX7V+dkV+XrG4DZFRov1tXqeYHsGqclpvNNmpWA5ww+GEX2Vx/etBXraVBOpo0C9+aVNk7iJslqXv03vs6PkGx3UG0hcmPnlL+ccW/FmKjARqVLNjWulzKYMgq6ccOvV0Kk54ekFE3u87l3R+PRKH3ls35JevEeY4M1z28/LOWLfHd/GeiasHFYSDh5A0r0tQg+KJZSYKiKuoAQMcI8pHPcruY2YAatF0Aci1oMFgeegEV2Pe0ccU4X426tghYWI3V9IAkLOXYA==",
        "X-OriginatorOrg": "corigine.com",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 73b3efac-98ff-4c1b-bbab-08dbf46c6d21",
        "X-MS-Exchange-CrossTenant-AuthSource": "SJ0PR13MB5545.namprd13.prod.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Internal",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "04 Dec 2023 01:57:53.0627 (UTC)",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "Hosted",
        "X-MS-Exchange-CrossTenant-Id": "fe128f2c-073b-4c20-818e-7246a585940c",
        "X-MS-Exchange-CrossTenant-MailboxType": "HOSTED",
        "X-MS-Exchange-CrossTenant-UserPrincipalName": "\n /OudcxkQTumX8a3qcSu9tGTIl60KROzQD/zPin+fmVU/G+EaKcZ+ocR16/yavDdSe0B1M59mdqgfI2uco4zK0WGyaQFCvj/hxIwMZRjD4fE=",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "PH0PR13MB5876",
        "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": "Fix the resource leak problem in the exit logic of flower firmware.\n\nFixes: e1124c4f8a45 (\"net/nfp: add flower representor framework\")\nCc: stable@dpdk.org\n\nSigned-off-by: Chaoyong He <chaoyong.he@corigine.com>\nReviewed-by: Long Wu <long.wu@corigine.com>\nReviewed-by: Peng Zhang <peng.zhang@corigine.com>\n---\n drivers/net/nfp/flower/nfp_flower.c           | 73 ++++---------------\n drivers/net/nfp/flower/nfp_flower.h           |  1 +\n .../net/nfp/flower/nfp_flower_representor.c   | 64 ++++++++++++++++\n 3 files changed, 80 insertions(+), 58 deletions(-)",
    "diff": "diff --git a/drivers/net/nfp/flower/nfp_flower.c b/drivers/net/nfp/flower/nfp_flower.c\nindex f172c8350d..f950ae233b 100644\n--- a/drivers/net/nfp/flower/nfp_flower.c\n+++ b/drivers/net/nfp/flower/nfp_flower.c\n@@ -82,63 +82,6 @@ nfp_flower_pf_start(struct rte_eth_dev *dev)\n \treturn 0;\n }\n \n-/* Reset and stop device. The device can not be restarted. */\n-static int\n-nfp_flower_pf_close(struct rte_eth_dev *dev)\n-{\n-\tuint16_t i;\n-\tstruct nfp_net_hw *hw;\n-\tstruct nfp_pf_dev *pf_dev;\n-\tstruct nfp_net_txq *this_tx_q;\n-\tstruct nfp_net_rxq *this_rx_q;\n-\tstruct nfp_flower_representor *repr;\n-\tstruct nfp_app_fw_flower *app_fw_flower;\n-\n-\tif (rte_eal_process_type() != RTE_PROC_PRIMARY)\n-\t\treturn 0;\n-\n-\trepr = dev->data->dev_private;\n-\thw = repr->app_fw_flower->pf_hw;\n-\tpf_dev = hw->pf_dev;\n-\tapp_fw_flower = NFP_PRIV_TO_APP_FW_FLOWER(pf_dev->app_fw_priv);\n-\n-\tnfp_mtr_priv_uninit(pf_dev);\n-\n-\t/*\n-\t * We assume that the DPDK application is stopping all the\n-\t * threads/queues before calling the device close function.\n-\t */\n-\tnfp_net_disable_queues(dev);\n-\n-\t/* Clear queues */\n-\tfor (i = 0; i < dev->data->nb_tx_queues; i++) {\n-\t\tthis_tx_q = dev->data->tx_queues[i];\n-\t\tnfp_net_reset_tx_queue(this_tx_q);\n-\t}\n-\n-\tfor (i = 0; i < dev->data->nb_rx_queues; i++) {\n-\t\tthis_rx_q = dev->data->rx_queues[i];\n-\t\tnfp_net_reset_rx_queue(this_rx_q);\n-\t}\n-\n-\t/* Cancel possible impending LSC work here before releasing the port */\n-\trte_eal_alarm_cancel(nfp_net_dev_interrupt_delayed_handler, (void *)dev);\n-\n-\tnn_cfg_writeb(&hw->super, NFP_NET_CFG_LSC, 0xff);\n-\n-\t/* Now it is safe to free all PF resources */\n-\tPMD_DRV_LOG(INFO, \"Freeing PF resources\");\n-\tnfp_cpp_area_free(pf_dev->ctrl_area);\n-\tnfp_cpp_area_free(pf_dev->qc_area);\n-\tfree(pf_dev->hwinfo);\n-\tfree(pf_dev->sym_tbl);\n-\tnfp_cpp_free(pf_dev->cpp);\n-\trte_free(app_fw_flower);\n-\trte_free(pf_dev);\n-\n-\treturn 0;\n-}\n-\n static const struct eth_dev_ops nfp_flower_pf_vnic_ops = {\n \t.dev_infos_get          = nfp_net_infos_get,\n \t.link_update            = nfp_net_link_update,\n@@ -146,7 +89,6 @@ static const struct eth_dev_ops nfp_flower_pf_vnic_ops = {\n \n \t.dev_start              = nfp_flower_pf_start,\n \t.dev_stop               = nfp_net_stop,\n-\t.dev_close              = nfp_flower_pf_close,\n };\n \n static inline struct nfp_flower_representor *\n@@ -858,6 +800,21 @@ nfp_init_app_fw_flower(struct nfp_pf_dev *pf_dev,\n \treturn ret;\n }\n \n+void\n+nfp_uninit_app_fw_flower(struct nfp_pf_dev *pf_dev)\n+{\n+\tstruct nfp_app_fw_flower *app_fw_flower;\n+\n+\tapp_fw_flower = pf_dev->app_fw_priv;\n+\tnfp_flower_cleanup_ctrl_vnic(app_fw_flower->ctrl_hw);\n+\tnfp_cpp_area_free(app_fw_flower->ctrl_hw->ctrl_area);\n+\tnfp_cpp_area_free(pf_dev->ctrl_area);\n+\trte_free(app_fw_flower->pf_hw);\n+\tnfp_mtr_priv_uninit(pf_dev);\n+\tnfp_flow_priv_uninit(pf_dev);\n+\trte_free(app_fw_flower);\n+}\n+\n int\n nfp_secondary_init_app_fw_flower(struct nfp_pf_dev *pf_dev)\n {\ndiff --git a/drivers/net/nfp/flower/nfp_flower.h b/drivers/net/nfp/flower/nfp_flower.h\nindex 6f27c06acc..8393de66c5 100644\n--- a/drivers/net/nfp/flower/nfp_flower.h\n+++ b/drivers/net/nfp/flower/nfp_flower.h\n@@ -106,6 +106,7 @@ nfp_flower_support_decap_v2(const struct nfp_app_fw_flower *app_fw_flower)\n \n int nfp_init_app_fw_flower(struct nfp_pf_dev *pf_dev,\n \t\tconst struct nfp_dev_info *dev_info);\n+void nfp_uninit_app_fw_flower(struct nfp_pf_dev *pf_dev);\n int nfp_secondary_init_app_fw_flower(struct nfp_pf_dev *pf_dev);\n bool nfp_flower_pf_dispatch_pkts(struct nfp_net_hw *hw,\n \t\tstruct rte_mbuf *mbuf,\ndiff --git a/drivers/net/nfp/flower/nfp_flower_representor.c b/drivers/net/nfp/flower/nfp_flower_representor.c\nindex 7212d9e024..02089d390e 100644\n--- a/drivers/net/nfp/flower/nfp_flower_representor.c\n+++ b/drivers/net/nfp/flower/nfp_flower_representor.c\n@@ -328,12 +328,75 @@ nfp_flower_repr_free(struct nfp_flower_representor *repr,\n \t}\n }\n \n+/* Reset and stop device. The device can not be restarted. */\n+static int\n+nfp_flower_repr_dev_close(struct rte_eth_dev *dev)\n+{\n+\tuint16_t i;\n+\tstruct nfp_net_hw *hw;\n+\tstruct nfp_pf_dev *pf_dev;\n+\tstruct nfp_net_txq *this_tx_q;\n+\tstruct nfp_net_rxq *this_rx_q;\n+\tstruct nfp_flower_representor *repr;\n+\tstruct nfp_app_fw_flower *app_fw_flower;\n+\n+\tif (rte_eal_process_type() != RTE_PROC_PRIMARY)\n+\t\treturn 0;\n+\n+\trepr = dev->data->dev_private;\n+\tapp_fw_flower = repr->app_fw_flower;\n+\thw = app_fw_flower->pf_hw;\n+\tpf_dev = hw->pf_dev;\n+\n+\t/*\n+\t * We assume that the DPDK application is stopping all the\n+\t * threads/queues before calling the device close function.\n+\t */\n+\tnfp_net_disable_queues(dev);\n+\n+\t/* Clear queues */\n+\tfor (i = 0; i < dev->data->nb_tx_queues; i++) {\n+\t\tthis_tx_q = dev->data->tx_queues[i];\n+\t\tnfp_net_reset_tx_queue(this_tx_q);\n+\t}\n+\n+\tfor (i = 0; i < dev->data->nb_rx_queues; i++) {\n+\t\tthis_rx_q = dev->data->rx_queues[i];\n+\t\tnfp_net_reset_rx_queue(this_rx_q);\n+\t}\n+\n+\tif (pf_dev->app_fw_id != NFP_APP_FW_FLOWER_NIC)\n+\t\treturn -EINVAL;\n+\n+\tnfp_flower_repr_free(repr, repr->repr_type);\n+\n+\tfor (i = 0; i < MAX_FLOWER_VFS; i++) {\n+\t\tif (app_fw_flower->vf_reprs[i] != NULL)\n+\t\t\treturn 0;\n+\t}\n+\n+\tfor (i = 0; i < NFP_MAX_PHYPORTS; i++) {\n+\t\tif (app_fw_flower->phy_reprs[i] != NULL)\n+\t\t\treturn 0;\n+\t}\n+\n+\tif (app_fw_flower->pf_repr != NULL)\n+\t\treturn 0;\n+\n+\t/* Now it is safe to free all PF resources */\n+\tnfp_uninit_app_fw_flower(pf_dev);\n+\tnfp_pf_uninit(pf_dev);\n+\n+\treturn 0;\n+}\n+\n static const struct eth_dev_ops nfp_flower_pf_repr_dev_ops = {\n \t.dev_infos_get        = nfp_flower_repr_dev_infos_get,\n \n \t.dev_start            = nfp_flower_pf_start,\n \t.dev_configure        = nfp_net_configure,\n \t.dev_stop             = nfp_net_stop,\n+\t.dev_close            = nfp_flower_repr_dev_close,\n \n \t.rx_queue_setup       = nfp_net_rx_queue_setup,\n \t.tx_queue_setup       = nfp_net_tx_queue_setup,\n@@ -356,6 +419,7 @@ static const struct eth_dev_ops nfp_flower_repr_dev_ops = {\n \t.dev_start            = nfp_flower_repr_dev_start,\n \t.dev_configure        = nfp_net_configure,\n \t.dev_stop             = nfp_flower_repr_dev_stop,\n+\t.dev_close            = nfp_flower_repr_dev_close,\n \n \t.rx_queue_setup       = nfp_flower_repr_rx_queue_setup,\n \t.tx_queue_setup       = nfp_flower_repr_tx_queue_setup,\n",
    "prefixes": [
        "v2",
        "7/8"
    ]
}