get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 139532,
    "url": "http://patches.dpdk.org/api/patches/139532/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20240419052349.1294696-8-chaoyong.he@corigine.com/",
    "project": {
        "id": 1,
        "url": "http://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": "<20240419052349.1294696-8-chaoyong.he@corigine.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20240419052349.1294696-8-chaoyong.he@corigine.com",
    "date": "2024-04-19T05:23:48",
    "name": "[v2,7/8] net/nfp: remove ethernet device data field",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "11743abc6e653816c20bba04a37e4b6cc6881ef6",
    "submitter": {
        "id": 2554,
        "url": "http://patches.dpdk.org/api/people/2554/?format=api",
        "name": "Chaoyong He",
        "email": "chaoyong.he@corigine.com"
    },
    "delegate": {
        "id": 319,
        "url": "http://patches.dpdk.org/api/users/319/?format=api",
        "username": "fyigit",
        "first_name": "Ferruh",
        "last_name": "Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20240419052349.1294696-8-chaoyong.he@corigine.com/mbox/",
    "series": [
        {
            "id": 31788,
            "url": "http://patches.dpdk.org/api/series/31788/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=31788",
            "date": "2024-04-19T05:23:42",
            "name": "[v2,1/8] net/nfp: fix resource leak of secondary process",
            "version": 2,
            "mbox": "http://patches.dpdk.org/series/31788/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/139532/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/139532/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 BD94243EAA;\n\tFri, 19 Apr 2024 07:25:13 +0200 (CEST)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 60F2740A73;\n\tFri, 19 Apr 2024 07:24:41 +0200 (CEST)",
            "from NAM12-BN8-obe.outbound.protection.outlook.com\n (mail-bn8nam12on2104.outbound.protection.outlook.com [40.107.237.104])\n by mails.dpdk.org (Postfix) with ESMTP id 2FD58409FA\n for <dev@dpdk.org>; Fri, 19 Apr 2024 07:24:35 +0200 (CEST)",
            "from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5)\n by MW3PR13MB3961.namprd13.prod.outlook.com (2603:10b6:303:2c::18)\n with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7472.42; Fri, 19 Apr\n 2024 05:24:33 +0000",
            "from SJ0PR13MB5545.namprd13.prod.outlook.com\n ([fe80::ec12:7411:559a:850e]) by SJ0PR13MB5545.namprd13.prod.outlook.com\n ([fe80::ec12:7411:559a:850e%5]) with mapi id 15.20.7472.042; Fri, 19 Apr 2024\n 05:24:33 +0000"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n b=i1UxZFjmBkPf5XkHv59iH8dYJUoz3imkhswdkvlZ/V5Aa6h42Xn7MHuMgqNbzfDDg8e2f4V6Qgd42qW0P3JvSYxq6lxkm61+cj5/cKu8c1z6vUFhL+L3z7mFi8LCgl1jCbVJIzUx+4Zm+vby07xqgBldI2THvqR9wppcJtm27DbD6Eoo1u/ugAMUaSJr6ZXxs84bQj7jbtCK7aYca7kZH/BGU2Qa3TS6pyQ5RlKc9g+38r96udtceWXFMnCq0k5rSeBAcKpXi+uNUObNAfofFz8bLs+cDzGy/Sb9pIcRi0ohHM2eHQZkDHJ2FHiGLnUbt8MaGRKCR6w1jVWsWGWiOQ==",
        "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=fOF507cA1IdFixWs8MrwNvB/V0tFRT1K7afI1C7uQX0=;\n b=bhqXYs929NnVBUje877VHDPNiUBaBERosN2Cq1d4IlbQu7j4EoEPRSroQmS1GEvjbLq1y8eVaY2Od8oTBGEgXRWnURX4IJmp/08IDYlrlMqvKewPVuZGZ0r2Ft1DSxRqPHeMmtIGiHwsC8PTg0VW1B187GVn+Pjr0/TsCwc64CtOEXzec4nJ9MWF927JB6CtD2YoTsjpyNYI49CgFfc4eiBQW9PqtH6S0iOs6jAm+pSS+e8WqKyjKYRGpsWqXaPLjKh3AVeeUm7nGQmfU9Cw6yubig9u+mttT9EQzlnL33N/6jUNRbxg2NYzWo8PypuyfVYEqjgJI/wSC5vU6IP4dQ==",
        "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=fOF507cA1IdFixWs8MrwNvB/V0tFRT1K7afI1C7uQX0=;\n b=j2bgf3OEEASvbti6AFDYuFeHJZOeDSl8zGoBlrIEs9tPPPjrQJOak7CIJXTkuLjw85vsZWlJAxpVoxvLtazmORL/LCJLY4PR+lGyyaDcNoUlkQXL7FdoGuDqSe9xdliTABYi2jey3OvAohWrzs+ZHRSnid5fkKJBvmuL5Kh8U3s=",
        "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 Long Wu <long.wu@corigine.com>, Peng Zhang <peng.zhang@corigine.com>",
        "Subject": "[PATCH v2 7/8] net/nfp: remove ethernet device data field",
        "Date": "Fri, 19 Apr 2024 13:23:48 +0800",
        "Message-Id": "<20240419052349.1294696-8-chaoyong.he@corigine.com>",
        "X-Mailer": "git-send-email 2.39.1",
        "In-Reply-To": "<20240419052349.1294696-1-chaoyong.he@corigine.com>",
        "References": "<20240419031226.1191069-1-chaoyong.he@corigine.com>\n <20240419052349.1294696-1-chaoyong.he@corigine.com>",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-ClientProxiedBy": "SG2PR03CA0087.apcprd03.prod.outlook.com\n (2603:1096:4:7c::15) 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_|MW3PR13MB3961:EE_",
        "X-MS-Office365-Filtering-Correlation-Id": "15529740-e34e-4340-8ac8-08dc6030fe4d",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-MS-Exchange-AntiSpam-Relay": "0",
        "X-Microsoft-Antispam": "BCL:0;",
        "X-Microsoft-Antispam-Message-Info": "\n c3nIQrR7iFH82hgM4bCOSpvpLWkPvy744DGU3hgJ2BYuVnyQNSJc+4BHMqHkkoxSjKHgcSzOauoSX0+Rpfj70gSkfzCNTZZs8mtdTt8r54mRBRGeJTCwRh3412OXrel5LRaJ7yjAQN8vles5y+cX2j/NNNL9ge6ipEkFzAW9ZsvcqZ6LPplqfUkdzTG5WYZEWi0PNRlgmuVdwUvLCi93uuwEJdxnlCaA9wNlvDSaGlNy6627p5k3/LNn4Q+jaB0HTA9iDGItKqLFx8sMfViyMjGPL0Aes/yNKBzSGgGNsshOLFVZ0iQeSFp3NwHfsZskm4tYKOLv4QHWHSRkqT3X5XdYwAsC6m6n7ZiqhHs/fYoZdnSTBFgGv2VxK66y3MdNIjnP0Y12QDX8I04RW1ubbUlVvYo4veNas3n+71vibMUEiSBwxvy/zsXp5RGH1iEF2QEsHhS/En/5PkWdmxXoqDEws9iti6cfp4JWmaWRQNO95A1qdTpRVoA15GieXUmiNA1/n0G/XFhVovRW588lTcn/WeTOf7R5+fnLKUVo3hShZpeoDJSByZ0b9K7RWoClf+ge8GaEbvfUzK49WiF8f2gnRodW4VApMpIXe2zxkeCuVWj7FP59wzRgIgMVd64l9e3/UUbUmpteoTdo8378BvkwTAqtyUMwVqVG+AUYyEsGDmk9BD8csGhfHBIn7YQz1smEz0tVTkAjvnQELZxJfoo2NPOAaUka5zO6BySsxzrbRRuxFqfwmJa0wc58qOvPlZtLKmBgU0JJOZD3zCwCNt5Am/eWoqqEM+gPvgcmq6ce0MhtUofCM209gasvY3GgMwceuRTTB1oP61T5O8tuNcUedpEUVQU0xmk2WqHRjn8Pasy+wM6zSfBlsUGVPk/+MIANE9tCsktd8FuvvuG6ELyfvZx+oT5OvHMFLyk+YwSwSlLxUo/2t1hLoaVyRBR6z0fMkfNeJqKcJCL7LbLHFlo4SKS6vO2J2yj0QHTsg+WF7igROy05ut24QWe2PaK0HnUuS3uc/UuUgCZI70tMCm35UI18thz83lkbQw+BXomlpOyjR8vKGGSAd7TctrYPSOi39URDJzZGiXtCCYG6zMumOmVeEfM6GrnWk3myXQHTmXFI+qMM7c/rYBzfw/E8xV0Kixy1lSKiWp2p2P6cLTFST4wuyH0mfUtooJq2cRXekH6dGXon3/LwjVJ+8DkWOyGvIei5EZOJALXBFox/VldYjJ7v7DitphJAZJ2fBzG2OFI5wyHahpRFy7OYYU64MlRcv16nGP3n/b/PDAk11bOV2VquqayoOv5/B7ToZy2PC2gCngZSQeOPwN+poPKqkuGzX1STnHoJC2VU0CuFhQ==",
        "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)(52116005)(1800799015)(366007)(376005)(38350700005); DIR:OUT;\n SFP:1102;",
        "X-MS-Exchange-AntiSpam-MessageData-ChunkCount": "1",
        "X-MS-Exchange-AntiSpam-MessageData-0": "\n Gyu2BFCPLl2287zj1RpSLCXtd2L+DxYEezo7KFp4G6Rf5a+pZNlSu4bivagi7z2wqBF/2Bn5fidUQLfdulsee0UUHrdUEx7vcJe7dio0Y2bWFvg8Sqs8V+dYdAtOE97wXAbS1bdkJ2KEI9+55MIVjE7O2a7vfiiSS/iNqz17Gw1ZEAgRAd+ZkAG2mehypvOrK2AqSFQrIClHrCV2BAB731yPFd5eeT01hVhRR1p6a5LXEkRdU6AcK+AGZAnTrK37ELxOntNo/830tixxXNYilUa1gQYoA+StVfbKNQArsKxxxfPKz5qYZTFmTkbimsxWqJ8AYZifPQy65HUSEnq5Zoa8o3/SkdDpPYQ+F2+t1K/jcj1FKILp/BbSDpeIsCVe7nutFa4KW7WefAx0AIJEtkWjrrzTRCl8Sd4f4MkAgbVhd6obauIl0P0mrXaimb5JTYFp+kbGfyz2v0OZOaYTA98KmrTy/S61OtmWy2We4KEK529mKIJoQuCpoHmUyef5g+vsgiS/c2tjVgny922IA9jGJ9Xvnrill1PIMpBxwERxr1k3SSR8ENk5rN0Qr363naBy9Bi6I5avWFKq+BVQNFnMVC+QH+Z5k6aau5qJgTkUl7b6Xxz1z06B+JMN9i/N7MbAm9HxTF/0tzyhA9VBwoANNo+6l8AWtthEVl/mOnAyyZse01fvZyKHjT7WdCQG9Qdu7Z6agn1zhnhrN/8UYyh59MVVYTA9PIgQ5go5GnJNeV33Y6ot76uxgbpjueUo57Jum+wcUMS4cPAUXrMvYlhO7WIWhYk0Lqz5q91OOWEqKFKzeUfH2Hc7IG/3L17VoMwCyfsHEbHy2fn+dEZzlLg1P6o+qzsSMJFHXdxBF/e7BfGusZZ+ksVI4f13vt6O1SNIu8fsdiENd336KzZjcH1EBhlpRnutN5AHZCf1TUoiTgoScWfnPtojwxWCJyxCO3RtNT2GkniOY+esPvJWCtPZzbko6xxRYkekENlhGD7SpN88t3nXYe7X1WgqqS8j6Ys5u3c3ZGP2fwuGg2yBUt4mQP39cuhFYfq72uZ3sV8kQ0y1YXO1mAXys4oFGpoyZknj0WIDkmGL/oGhSLgqG8ONBkWh4dJo8LTbobMzUcJZTbT+FeVljjmdzfJS0oUUx9dPt6O6R8WHlXYygVmVpUqMVBHOm6bNOiXpOI+pu71XsJTmrmmOEid8WY36PFqZeaoFy8lBImj2lEimh454le5bw9JFuQlcfR/ylY/gxLpB4lY1tfmugftJwiXcpqbdK2PkF8uLgkv/2q1OgUmG/Jz4LXDmmEOcuUqqS5d4XaADWcBsVbro6ZnlN6g6XmQHvudHYvHi1U55u7uzZGXH3S3Qr9JNAnJA63icc5awXd1aW7t2FeVK5bndWZDVNKEYrw5kLHDBaRfkHA01ML2UOXKpeZKHQ85tcJfv6szaw9KUA2nGoVj6T84gwjsdFx2AjupqBLmWaqw2FJovJDy8beZpDEllsf5VFnp0rhEgrCKkwXBmnaomi5cJdHg300xFxTyJ/N2Q21/GzwFEWpatnVvqBlVxAR3EkQsGW9PN1p1e/KMGM4o71UA8J1qeiM4Gc9Ppd5LyT/MwnCX3/wijFg==",
        "X-OriginatorOrg": "corigine.com",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 15529740-e34e-4340-8ac8-08dc6030fe4d",
        "X-MS-Exchange-CrossTenant-AuthSource": "SJ0PR13MB5545.namprd13.prod.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Internal",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "19 Apr 2024 05:24:33.3166 (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 PfOuePKs/qk11F3luzUWUnBWY5IaCWV52oCOr/KIOImAxCUMVlabnyQaVF5uMvgV2v5RUgm8lBEdFXxl0y1aSgcTQndAu1myrPyuDI7wy0Y=",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "MW3PR13MB3961",
        "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": "Remove the 'eth_dev' field in process shared data 'struct\nnfp_net_hw', and modify the related logic.\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           | 16 ++--\n drivers/net/nfp/flower/nfp_flower.h           |  2 +\n drivers/net/nfp/flower/nfp_flower_ctrl.c      |  8 +-\n drivers/net/nfp/flower/nfp_flower_flow.c      | 16 ++--\n .../net/nfp/flower/nfp_flower_representor.c   | 76 +++++++++----------\n .../net/nfp/flower/nfp_flower_representor.h   |  1 -\n drivers/net/nfp/nfp_ethdev.c                  | 36 ++++-----\n drivers/net/nfp/nfp_net_common.h              |  3 -\n 8 files changed, 78 insertions(+), 80 deletions(-)",
    "diff": "diff --git a/drivers/net/nfp/flower/nfp_flower.c b/drivers/net/nfp/flower/nfp_flower.c\nindex 83249feedb..76e5d674f1 100644\n--- a/drivers/net/nfp/flower/nfp_flower.c\n+++ b/drivers/net/nfp/flower/nfp_flower.c\n@@ -271,15 +271,15 @@ nfp_flower_init_ctrl_vnic(struct nfp_app_fw_flower *app_fw_flower,\n \t}\n \n \t/* Allocate memory for the eth_dev of the vNIC */\n-\thw->eth_dev = rte_zmalloc(\"nfp_ctrl_vnic\",\n+\tapp_fw_flower->ctrl_ethdev = rte_zmalloc(\"nfp_ctrl_vnic\",\n \t\t\tsizeof(struct rte_eth_dev), RTE_CACHE_LINE_SIZE);\n-\tif (hw->eth_dev == NULL) {\n+\tif (app_fw_flower->ctrl_ethdev == NULL) {\n \t\tPMD_INIT_LOG(ERR, \"Could not allocate ctrl vnic\");\n \t\treturn -ENOMEM;\n \t}\n \n \t/* Grab the pointer to the newly created rte_eth_dev here */\n-\teth_dev = hw->eth_dev;\n+\teth_dev = app_fw_flower->ctrl_ethdev;\n \n \t/* Also allocate memory for the data part of the eth_dev */\n \teth_dev->data = rte_zmalloc(\"nfp_ctrl_vnic_data\",\n@@ -529,7 +529,7 @@ nfp_flower_cleanup_ctrl_vnic(struct nfp_app_fw_flower *app_fw_flower,\n \tchar ctrl_rxring_name[RTE_MEMZONE_NAMESIZE];\n \n \thw = app_fw_flower->ctrl_hw;\n-\teth_dev = hw->eth_dev;\n+\teth_dev = app_fw_flower->ctrl_ethdev;\n \n \tpci_name = strchr(hw_priv->pf_dev->pci_dev->name, ':') + 1;\n \n@@ -562,15 +562,17 @@ nfp_flower_cleanup_ctrl_vnic(struct nfp_app_fw_flower *app_fw_flower,\n }\n \n static int\n-nfp_flower_start_ctrl_vnic(struct nfp_net_hw *net_hw)\n+nfp_flower_start_ctrl_vnic(struct nfp_app_fw_flower *app_fw_flower)\n {\n \tint ret;\n \tuint32_t update;\n \tuint32_t new_ctrl;\n \tstruct nfp_hw *hw;\n \tstruct rte_eth_dev *dev;\n+\tstruct nfp_net_hw *net_hw;\n \n-\tdev = net_hw->eth_dev;\n+\tnet_hw = app_fw_flower->ctrl_hw;\n+\tdev = app_fw_flower->ctrl_ethdev;\n \thw = &net_hw->super;\n \n \t/* Disabling queues just in case... */\n@@ -736,7 +738,7 @@ nfp_init_app_fw_flower(struct nfp_net_hw_priv *hw_priv)\n \t}\n \n \t/* Start the ctrl vNIC */\n-\tret = nfp_flower_start_ctrl_vnic(app_fw_flower->ctrl_hw);\n+\tret = nfp_flower_start_ctrl_vnic(app_fw_flower);\n \tif (ret != 0) {\n \t\tPMD_INIT_LOG(ERR, \"Could not start flower ctrl vNIC\");\n \t\tgoto ctrl_vnic_cleanup;\ndiff --git a/drivers/net/nfp/flower/nfp_flower.h b/drivers/net/nfp/flower/nfp_flower.h\nindex 5c2f338a20..ae80782df4 100644\n--- a/drivers/net/nfp/flower/nfp_flower.h\n+++ b/drivers/net/nfp/flower/nfp_flower.h\n@@ -63,12 +63,14 @@ struct nfp_app_fw_flower {\n \n \t/** Pointer to the PF vNIC */\n \tstruct nfp_net_hw *pf_hw;\n+\tstruct rte_eth_dev *pf_ethdev;\n \n \t/** Pointer to a mempool for the Ctrl vNIC */\n \tstruct rte_mempool *ctrl_pktmbuf_pool;\n \n \t/** Pointer to the ctrl vNIC */\n \tstruct nfp_net_hw *ctrl_hw;\n+\tstruct rte_eth_dev *ctrl_ethdev;\n \n \t/** Ctrl vNIC Rx counter */\n \tuint64_t ctrl_vnic_rx_count;\ndiff --git a/drivers/net/nfp/flower/nfp_flower_ctrl.c b/drivers/net/nfp/flower/nfp_flower_ctrl.c\nindex 4c2aeb9849..de6e419cac 100644\n--- a/drivers/net/nfp/flower/nfp_flower_ctrl.c\n+++ b/drivers/net/nfp/flower/nfp_flower_ctrl.c\n@@ -153,12 +153,10 @@ nfp_flower_ctrl_vnic_nfd3_xmit(struct nfp_app_fw_flower *app_fw_flower,\n \tuint32_t free_descs;\n \tstruct rte_mbuf **lmbuf;\n \tstruct nfp_net_txq *txq;\n-\tstruct nfp_net_hw *ctrl_hw;\n \tstruct rte_eth_dev *ctrl_dev;\n \tstruct nfp_net_nfd3_tx_desc *txds;\n \n-\tctrl_hw = app_fw_flower->ctrl_hw;\n-\tctrl_dev = ctrl_hw->eth_dev;\n+\tctrl_dev = app_fw_flower->ctrl_ethdev;\n \n \t/* Flower ctrl vNIC only has a single tx queue */\n \ttxq = ctrl_dev->data->tx_queues[0];\n@@ -232,7 +230,7 @@ nfp_flower_ctrl_vnic_nfdk_xmit(struct nfp_app_fw_flower *app_fw_flower,\n \tstruct rte_eth_dev *ctrl_dev;\n \tstruct nfp_net_nfdk_tx_desc *ktxds;\n \n-\tctrl_dev = app_fw_flower->ctrl_hw->eth_dev;\n+\tctrl_dev = app_fw_flower->ctrl_ethdev;\n \n \t/* Flower ctrl vNIC only has a single tx queue */\n \ttxq = ctrl_dev->data->tx_queues[0];\n@@ -511,7 +509,7 @@ nfp_flower_ctrl_vnic_process(struct nfp_app_fw_flower *app_fw_flower)\n \tstruct rte_eth_dev *ctrl_eth_dev;\n \tstruct rte_mbuf *pkts_burst[MAX_PKT_BURST];\n \n-\tctrl_eth_dev = app_fw_flower->ctrl_hw->eth_dev;\n+\tctrl_eth_dev = app_fw_flower->ctrl_ethdev;\n \n \t/* Ctrl vNIC only has a single Rx queue */\n \trxq = ctrl_eth_dev->data->rx_queues[0];\ndiff --git a/drivers/net/nfp/flower/nfp_flower_flow.c b/drivers/net/nfp/flower/nfp_flower_flow.c\nindex 086cc8079a..8ff13923e5 100644\n--- a/drivers/net/nfp/flower/nfp_flower_flow.c\n+++ b/drivers/net/nfp/flower/nfp_flower_flow.c\n@@ -3518,7 +3518,7 @@ nfp_flow_action_rss_add(struct nfp_flower_representor *representor,\n \t\tstruct nfp_fl_rss **rss_store)\n {\n \tint ret;\n-\tstruct nfp_net_hw *pf_hw;\n+\tstruct rte_eth_dev *eth_dev;\n \tstruct rte_eth_rss_conf rss_conf;\n \tstruct nfp_fl_rss *rss_store_tmp;\n \tconst struct rte_flow_action_rss *rss;\n@@ -3536,8 +3536,8 @@ nfp_flow_action_rss_add(struct nfp_flower_representor *representor,\n \n \trss_conf.rss_hf = 0;\n \trss_conf.rss_key = rss_key;\n-\tpf_hw = representor->app_fw_flower->pf_hw;\n-\tret = nfp_net_rss_hash_conf_get(pf_hw->eth_dev, &rss_conf);\n+\teth_dev = representor->app_fw_flower->pf_ethdev;\n+\tret = nfp_net_rss_hash_conf_get(eth_dev, &rss_conf);\n \tif (ret != 0) {\n \t\tPMD_DRV_LOG(ERR, \"Get RSS conf failed.\");\n \t\treturn ret;\n@@ -3563,7 +3563,7 @@ nfp_flow_action_rss_add(struct nfp_flower_representor *representor,\n \t\trss_store_tmp->key_len = rss->key_len;\n \t}\n \n-\tret = nfp_net_rss_hash_update(pf_hw->eth_dev, &rss_conf);\n+\tret = nfp_net_rss_hash_update(eth_dev, &rss_conf);\n \tif (ret != 0) {\n \t\tPMD_DRV_LOG(ERR, \"Update RSS conf failed.\");\n \t\tfree(rss_store_tmp);\n@@ -3580,7 +3580,7 @@ nfp_flow_action_rss_del(struct nfp_flower_representor *representor,\n \t\tstruct rte_flow *nfp_flow)\n {\n \tint ret;\n-\tstruct nfp_net_hw *pf_hw;\n+\tstruct rte_eth_dev *eth_dev;\n \tstruct nfp_fl_rss *rss_store;\n \tstruct rte_eth_rss_conf rss_conf;\n \tuint8_t rss_key[NFP_NET_CFG_RSS_KEY_SZ];\n@@ -3590,8 +3590,8 @@ nfp_flow_action_rss_del(struct nfp_flower_representor *representor,\n \n \trss_conf.rss_hf = 0;\n \trss_conf.rss_key = rss_key;\n-\tpf_hw = representor->app_fw_flower->pf_hw;\n-\tret = nfp_net_rss_hash_conf_get(pf_hw->eth_dev, &rss_conf);\n+\teth_dev = representor->app_fw_flower->pf_ethdev;\n+\tret = nfp_net_rss_hash_conf_get(eth_dev, &rss_conf);\n \tif (ret != 0) {\n \t\tPMD_DRV_LOG(ERR, \"Get RSS conf failed.\");\n \t\tgoto exit;\n@@ -3612,7 +3612,7 @@ nfp_flow_action_rss_del(struct nfp_flower_representor *representor,\n \t\trss_conf.rss_key_len = 0;\n \t}\n \n-\tret = nfp_net_rss_hash_update(pf_hw->eth_dev, &rss_conf);\n+\tret = nfp_net_rss_hash_update(eth_dev, &rss_conf);\n \tif (ret != 0)\n \t\tPMD_DRV_LOG(ERR, \"Update RSS conf failed.\");\n \ndiff --git a/drivers/net/nfp/flower/nfp_flower_representor.c b/drivers/net/nfp/flower/nfp_flower_representor.c\nindex 0e19723f57..60f02ad919 100644\n--- a/drivers/net/nfp/flower/nfp_flower_representor.c\n+++ b/drivers/net/nfp/flower/nfp_flower_representor.c\n@@ -270,7 +270,6 @@ nfp_flower_repr_tx_burst(void *tx_queue,\n \tuint16_t sent;\n \tvoid *pf_tx_queue;\n \tstruct nfp_net_txq *txq;\n-\tstruct nfp_net_hw *pf_hw;\n \tstruct rte_eth_dev *dev;\n \tstruct rte_eth_dev *repr_dev;\n \tstruct nfp_flower_representor *repr;\n@@ -290,8 +289,7 @@ nfp_flower_repr_tx_burst(void *tx_queue,\n \t\t\t\ttx_pkts[i], repr->port_id);\n \n \t/* This points to the PF vNIC that owns this representor */\n-\tpf_hw = txq->hw;\n-\tdev = pf_hw->eth_dev;\n+\tdev = repr->app_fw_flower->pf_ethdev;\n \n \t/* Only using Tx queue 0 for now. */\n \tpf_tx_queue = dev->data->tx_queues[0];\n@@ -306,10 +304,9 @@ nfp_flower_repr_tx_burst(void *tx_queue,\n }\n \n static void\n-nfp_flower_repr_free_queue(struct nfp_flower_representor *repr)\n+nfp_flower_repr_free_queue(struct rte_eth_dev *eth_dev)\n {\n \tuint16_t i;\n-\tstruct rte_eth_dev *eth_dev = repr->eth_dev;\n \n \tfor (i = 0; i < eth_dev->data->nb_tx_queues; i++)\n \t\trte_free(eth_dev->data->tx_queues[i]);\n@@ -319,10 +316,8 @@ nfp_flower_repr_free_queue(struct nfp_flower_representor *repr)\n }\n \n static void\n-nfp_flower_pf_repr_close_queue(struct nfp_flower_representor *repr)\n+nfp_flower_pf_repr_close_queue(struct rte_eth_dev *eth_dev)\n {\n-\tstruct rte_eth_dev *eth_dev = repr->eth_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@@ -335,17 +330,18 @@ nfp_flower_pf_repr_close_queue(struct nfp_flower_representor *repr)\n }\n \n static void\n-nfp_flower_repr_close_queue(struct nfp_flower_representor *repr)\n+nfp_flower_repr_close_queue(struct rte_eth_dev *eth_dev,\n+\t\tenum nfp_repr_type repr_type)\n {\n-\tswitch (repr->repr_type) {\n+\tswitch (repr_type) {\n \tcase NFP_REPR_TYPE_PHYS_PORT:\n-\t\tnfp_flower_repr_free_queue(repr);\n+\t\tnfp_flower_repr_free_queue(eth_dev);\n \t\tbreak;\n \tcase NFP_REPR_TYPE_PF:\n-\t\tnfp_flower_pf_repr_close_queue(repr);\n+\t\tnfp_flower_pf_repr_close_queue(eth_dev);\n \t\tbreak;\n \tcase NFP_REPR_TYPE_VF:\n-\t\tnfp_flower_repr_free_queue(repr);\n+\t\tnfp_flower_repr_free_queue(eth_dev);\n \t\tbreak;\n \tdefault:\n \t\tPMD_DRV_LOG(ERR, \"Unsupported repr port type.\");\n@@ -384,18 +380,18 @@ nfp_flower_pf_repr_uninit(struct rte_eth_dev *eth_dev)\n }\n \n static void\n-nfp_flower_repr_free(struct nfp_flower_representor *repr,\n+nfp_flower_repr_free(struct rte_eth_dev *eth_dev,\n \t\tenum nfp_repr_type repr_type)\n {\n \tswitch (repr_type) {\n \tcase NFP_REPR_TYPE_PHYS_PORT:\n-\t\tnfp_flower_repr_uninit(repr->eth_dev);\n+\t\tnfp_flower_repr_uninit(eth_dev);\n \t\tbreak;\n \tcase NFP_REPR_TYPE_PF:\n-\t\tnfp_flower_pf_repr_uninit(repr->eth_dev);\n+\t\tnfp_flower_pf_repr_uninit(eth_dev);\n \t\tbreak;\n \tcase NFP_REPR_TYPE_VF:\n-\t\tnfp_flower_repr_uninit(repr->eth_dev);\n+\t\tnfp_flower_repr_uninit(eth_dev);\n \t\tbreak;\n \tdefault:\n \t\tPMD_DRV_LOG(ERR, \"Unsupported repr port type.\");\n@@ -425,9 +421,8 @@ nfp_flower_repr_dev_close(struct rte_eth_dev *dev)\n \tif (pf_dev->app_fw_id != NFP_APP_FW_FLOWER_NIC)\n \t\treturn -EINVAL;\n \n-\tnfp_flower_repr_close_queue(repr);\n-\n-\tnfp_flower_repr_free(repr, repr->repr_type);\n+\tnfp_flower_repr_close_queue(dev, repr->repr_type);\n+\tnfp_flower_repr_free(dev, repr->repr_type);\n \n \tfor (i = 0; i < MAX_FLOWER_VFS; i++) {\n \t\tif (app_fw_flower->vf_reprs[i] != NULL)\n@@ -575,8 +570,7 @@ nfp_flower_pf_repr_init(struct rte_eth_dev *eth_dev,\n \trte_ether_addr_copy(&init_repr_data->mac_addr, eth_dev->data->mac_addrs);\n \n \trepr->app_fw_flower->pf_repr = repr;\n-\trepr->app_fw_flower->pf_hw->eth_dev = eth_dev;\n-\trepr->eth_dev = eth_dev;\n+\trepr->app_fw_flower->pf_ethdev = eth_dev;\n \n \treturn 0;\n }\n@@ -668,8 +662,6 @@ nfp_flower_repr_init(struct rte_eth_dev *eth_dev,\n \t\tapp_fw_flower->vf_reprs[index] = repr;\n \t}\n \n-\trepr->eth_dev = eth_dev;\n-\n \treturn 0;\n \n mac_cleanup:\n@@ -684,28 +676,38 @@ static void\n nfp_flower_repr_free_all(struct nfp_app_fw_flower *app_fw_flower)\n {\n \tuint32_t i;\n+\tstruct rte_eth_dev *eth_dev;\n \tstruct nfp_flower_representor *repr;\n \n \tfor (i = 0; i < MAX_FLOWER_VFS; i++) {\n \t\trepr = app_fw_flower->vf_reprs[i];\n \t\tif (repr != NULL) {\n-\t\t\tnfp_flower_repr_free(repr, NFP_REPR_TYPE_VF);\n-\t\t\tapp_fw_flower->vf_reprs[i] = NULL;\n+\t\t\teth_dev = rte_eth_dev_get_by_name(repr->name);\n+\t\t\tif (eth_dev != NULL) {\n+\t\t\t\tnfp_flower_repr_free(eth_dev, NFP_REPR_TYPE_VF);\n+\t\t\t\tapp_fw_flower->vf_reprs[i] = NULL;\n+\t\t\t}\n \t\t}\n \t}\n \n \tfor (i = 0; i < NFP_MAX_PHYPORTS; i++) {\n \t\trepr = app_fw_flower->phy_reprs[i];\n \t\tif (repr != NULL) {\n-\t\t\tnfp_flower_repr_free(repr, NFP_REPR_TYPE_PHYS_PORT);\n-\t\t\tapp_fw_flower->phy_reprs[i] = NULL;\n+\t\t\teth_dev = rte_eth_dev_get_by_name(repr->name);\n+\t\t\tif (eth_dev != NULL) {\n+\t\t\t\tnfp_flower_repr_free(eth_dev, NFP_REPR_TYPE_PHYS_PORT);\n+\t\t\t\tapp_fw_flower->phy_reprs[i] = NULL;\n+\t\t\t}\n \t\t}\n \t}\n \n \trepr = app_fw_flower->pf_repr;\n \tif (repr != NULL) {\n-\t\tnfp_flower_repr_free(repr, NFP_REPR_TYPE_PF);\n-\t\tapp_fw_flower->pf_repr = NULL;\n+\t\teth_dev = rte_eth_dev_get_by_name(repr->name);\n+\t\tif (eth_dev != NULL) {\n+\t\t\tnfp_flower_repr_free(eth_dev, NFP_REPR_TYPE_PF);\n+\t\t\tapp_fw_flower->pf_repr = NULL;\n+\t\t}\n \t}\n }\n \n@@ -719,7 +721,7 @@ nfp_flower_repr_priv_init(struct nfp_app_fw_flower *app_fw_flower,\n \n \trepr = app_fw_flower->pf_repr;\n \tif (repr != NULL) {\n-\t\teth_dev = repr->eth_dev;\n+\t\teth_dev = rte_eth_dev_get_by_name(repr->name);\n \t\tif (eth_dev != NULL)\n \t\t\teth_dev->process_private = hw_priv;\n \t}\n@@ -727,7 +729,7 @@ nfp_flower_repr_priv_init(struct nfp_app_fw_flower *app_fw_flower,\n \tfor (i = 0; i < NFP_MAX_PHYPORTS; i++) {\n \t\trepr = app_fw_flower->phy_reprs[i];\n \t\tif (repr != NULL) {\n-\t\t\teth_dev = repr->eth_dev;\n+\t\t\teth_dev = rte_eth_dev_get_by_name(repr->name);\n \t\t\tif (eth_dev != NULL)\n \t\t\t\teth_dev->process_private = hw_priv;\n \t\t}\n@@ -736,7 +738,7 @@ nfp_flower_repr_priv_init(struct nfp_app_fw_flower *app_fw_flower,\n \tfor (i = 0; i < MAX_FLOWER_VFS; i++) {\n \t\trepr = app_fw_flower->vf_reprs[i];\n \t\tif (repr != NULL) {\n-\t\t\teth_dev = repr->eth_dev;\n+\t\t\teth_dev = rte_eth_dev_get_by_name(repr->name);\n \t\t\tif (eth_dev != NULL)\n \t\t\t\teth_dev->process_private = hw_priv;\n \t\t}\n@@ -750,7 +752,6 @@ nfp_flower_repr_alloc(struct nfp_app_fw_flower *app_fw_flower,\n \tint i;\n \tint ret;\n \tconst char *pci_name;\n-\tstruct rte_eth_dev *eth_dev;\n \tstruct rte_pci_device *pci_dev;\n \tstruct nfp_eth_table *nfp_eth_table;\n \tstruct nfp_eth_table_port *eth_port;\n@@ -760,7 +761,6 @@ nfp_flower_repr_alloc(struct nfp_app_fw_flower *app_fw_flower,\n \t};\n \n \tnfp_eth_table = hw_priv->pf_dev->nfp_eth_table;\n-\teth_dev = app_fw_flower->ctrl_hw->eth_dev;\n \n \t/* Send a NFP_FLOWER_CMSG_TYPE_MAC_REPR cmsg to hardware */\n \tret = nfp_flower_cmsg_mac_repr(app_fw_flower, nfp_eth_table);\n@@ -783,7 +783,7 @@ nfp_flower_repr_alloc(struct nfp_app_fw_flower *app_fw_flower,\n \t\t\t\"%s_repr_pf\", pci_name);\n \n \t/* Create a eth_dev for this representor */\n-\tret = rte_eth_dev_create(eth_dev->device, flower_repr.name,\n+\tret = rte_eth_dev_create(&pci_dev->device, flower_repr.name,\n \t\t\tsizeof(struct nfp_flower_representor),\n \t\t\tNULL, NULL, nfp_flower_pf_repr_init, &flower_repr);\n \tif (ret != 0) {\n@@ -808,7 +808,7 @@ nfp_flower_repr_alloc(struct nfp_app_fw_flower *app_fw_flower,\n \t\t * Create a eth_dev for this representor.\n \t\t * This will also allocate private memory for the device.\n \t\t */\n-\t\tret = rte_eth_dev_create(eth_dev->device, flower_repr.name,\n+\t\tret = rte_eth_dev_create(&pci_dev->device, flower_repr.name,\n \t\t\t\tsizeof(struct nfp_flower_representor),\n \t\t\t\tNULL, NULL, nfp_flower_repr_init, &flower_repr);\n \t\tif (ret != 0) {\n@@ -837,7 +837,7 @@ nfp_flower_repr_alloc(struct nfp_app_fw_flower *app_fw_flower,\n \t\t\t\t\"%s_repr_vf%d\", pci_name, i);\n \n \t\t/* This will also allocate private memory for the device */\n-\t\tret = rte_eth_dev_create(eth_dev->device, flower_repr.name,\n+\t\tret = rte_eth_dev_create(&pci_dev->device, flower_repr.name,\n \t\t\t\tsizeof(struct nfp_flower_representor),\n \t\t\t\tNULL, NULL, nfp_flower_repr_init, &flower_repr);\n \t\tif (ret != 0) {\ndiff --git a/drivers/net/nfp/flower/nfp_flower_representor.h b/drivers/net/nfp/flower/nfp_flower_representor.h\nindex 41965f6e0e..d539e53b23 100644\n--- a/drivers/net/nfp/flower/nfp_flower_representor.h\n+++ b/drivers/net/nfp/flower/nfp_flower_representor.h\n@@ -20,7 +20,6 @@ struct nfp_flower_representor {\n \tstruct rte_ring *ring;\n \tstruct rte_eth_link link;\n \tstruct rte_eth_stats repr_stats;\n-\tstruct rte_eth_dev *eth_dev;\n };\n \n int nfp_flower_repr_create(struct nfp_app_fw_flower *app_fw_flower,\ndiff --git a/drivers/net/nfp/nfp_ethdev.c b/drivers/net/nfp/nfp_ethdev.c\nindex 258b617eb2..d450c9472e 100644\n--- a/drivers/net/nfp/nfp_ethdev.c\n+++ b/drivers/net/nfp/nfp_ethdev.c\n@@ -100,15 +100,14 @@ nfp_devargs_parse(struct nfp_devargs *nfp_devargs_param,\n \n static void\n nfp_net_pf_read_mac(struct nfp_app_fw_nic *app_fw_nic,\n-\t\tuint16_t port)\n+\t\tuint16_t port,\n+\t\tstruct nfp_net_hw_priv *hw_priv)\n {\n \tstruct nfp_net_hw *hw;\n-\tstruct nfp_net_hw_priv *hw_priv;\n \tstruct nfp_eth_table *nfp_eth_table;\n \n \t/* Grab a pointer to the correct physical port */\n \thw = app_fw_nic->ports[port];\n-\thw_priv = hw->eth_dev->process_private;\n \n \tnfp_eth_table = hw_priv->pf_dev->nfp_eth_table;\n \n@@ -582,17 +581,14 @@ nfp_net_uninit(struct rte_eth_dev *eth_dev)\n \n static void\n nfp_cleanup_port_app_fw_nic(struct nfp_pf_dev *pf_dev,\n-\t\tuint8_t id)\n+\t\tuint8_t id,\n+\t\tstruct rte_eth_dev *eth_dev)\n {\n-\tstruct rte_eth_dev *eth_dev;\n \tstruct nfp_app_fw_nic *app_fw_nic;\n \n \tapp_fw_nic = pf_dev->app_fw_priv;\n \tif (app_fw_nic->ports[id] != NULL) {\n-\t\teth_dev = app_fw_nic->ports[id]->eth_dev;\n-\t\tif (eth_dev != NULL)\n-\t\t\tnfp_net_uninit(eth_dev);\n-\n+\t\tnfp_net_uninit(eth_dev);\n \t\tapp_fw_nic->ports[id] = NULL;\n \t}\n }\n@@ -691,7 +687,7 @@ nfp_net_close(struct rte_eth_dev *dev)\n \tif (pf_dev->app_fw_id != NFP_APP_FW_CORE_NIC)\n \t\treturn -EINVAL;\n \n-\tnfp_cleanup_port_app_fw_nic(pf_dev, hw->idx);\n+\tnfp_cleanup_port_app_fw_nic(pf_dev, hw->idx, dev);\n \n \tfor (i = 0; i < app_fw_nic->total_phyports; i++) {\n \t\tid = nfp_function_id_get(pf_dev, i);\n@@ -971,7 +967,6 @@ nfp_net_init(struct rte_eth_dev *eth_dev)\n \n \tnet_hw->tx_bar = pf_dev->qc_bar + tx_base * NFP_QCP_QUEUE_ADDR_SZ;\n \tnet_hw->rx_bar = pf_dev->qc_bar + rx_base * NFP_QCP_QUEUE_ADDR_SZ;\n-\teth_dev->data->dev_private = net_hw;\n \n \tPMD_INIT_LOG(DEBUG, \"ctrl_bar: %p, tx_bar: %p, rx_bar: %p\",\n \t\t\thw->ctrl_bar, net_hw->tx_bar, net_hw->rx_bar);\n@@ -1002,7 +997,7 @@ nfp_net_init(struct rte_eth_dev *eth_dev)\n \t\t\tgoto xstats_free;\n \t}\n \n-\tnfp_net_pf_read_mac(app_fw_nic, port);\n+\tnfp_net_pf_read_mac(app_fw_nic, port, hw_priv);\n \tnfp_write_mac(hw, &hw->mac_addr.addr_bytes[0]);\n \n \tif (rte_is_valid_assigned_ether_addr(&hw->mac_addr) == 0) {\n@@ -1580,7 +1575,6 @@ nfp_init_app_fw_nic(struct nfp_net_hw_priv *hw_priv)\n \t\t/* Add this device to the PF's array of physical ports */\n \t\tapp_fw_nic->ports[id] = hw;\n \n-\t\thw->eth_dev = eth_dev;\n \t\thw->idx = id;\n \t\thw->nfp_idx = nfp_eth_table->ports[id].index;\n \n@@ -1605,12 +1599,18 @@ nfp_init_app_fw_nic(struct nfp_net_hw_priv *hw_priv)\n \n port_cleanup:\n \tfor (i = 0; i < app_fw_nic->total_phyports; i++) {\n-\t\tid = nfp_function_id_get(pf_dev, i);\n-\t\thw = app_fw_nic->ports[id];\n+\t\tstruct rte_eth_dev *eth_dev;\n \n-\t\tif (hw != NULL && hw->eth_dev != NULL) {\n-\t\t\tnfp_net_uninit(hw->eth_dev);\n-\t\t\trte_eth_dev_release_port(hw->eth_dev);\n+\t\tif (pf_dev->multi_pf.enabled)\n+\t\t\tsnprintf(port_name, sizeof(port_name), \"%s\",\n+\t\t\t\t\tpf_dev->pci_dev->device.name);\n+\t\telse\n+\t\t\tsnprintf(port_name, sizeof(port_name), \"%s_port%u\",\n+\t\t\t\t\tpf_dev->pci_dev->device.name, i);\n+\t\teth_dev = rte_eth_dev_get_by_name(port_name);\n+\t\tif (eth_dev != NULL) {\n+\t\t\tnfp_net_uninit(eth_dev);\n+\t\t\trte_eth_dev_release_port(eth_dev);\n \t\t}\n \t}\n \tnfp_cpp_area_release_free(pf_dev->ctrl_area);\ndiff --git a/drivers/net/nfp/nfp_net_common.h b/drivers/net/nfp/nfp_net_common.h\nindex 40f314af0a..a4eaed6433 100644\n--- a/drivers/net/nfp/nfp_net_common.h\n+++ b/drivers/net/nfp/nfp_net_common.h\n@@ -167,9 +167,6 @@ struct nfp_net_hw {\n \t/** The parent class */\n \tstruct nfp_hw super;\n \n-\t/** Backpointer to the eth_dev of this port */\n-\tstruct rte_eth_dev *eth_dev;\n-\n \t/** TX pointer ring write back memzone */\n \tconst struct rte_memzone *txrwb_mz;\n \n",
    "prefixes": [
        "v2",
        "7/8"
    ]
}