get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 94590,
    "url": "https://patches.dpdk.org/api/patches/94590/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20210621072353.80415-1-dapengx.yu@intel.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": "<20210621072353.80415-1-dapengx.yu@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20210621072353.80415-1-dapengx.yu@intel.com",
    "date": "2021-06-21T07:23:53",
    "name": "[v2] net/i40e: fix data path corrupt on secondary process",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "08ef462f93b4f2a188dc4c414bdb1a54b0aa33e4",
    "submitter": {
        "id": 2042,
        "url": "https://patches.dpdk.org/api/people/2042/?format=api",
        "name": "Yu, DapengX",
        "email": "dapengx.yu@intel.com"
    },
    "delegate": {
        "id": 1540,
        "url": "https://patches.dpdk.org/api/users/1540/?format=api",
        "username": "qzhan15",
        "first_name": "Qi",
        "last_name": "Zhang",
        "email": "qi.z.zhang@intel.com"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/20210621072353.80415-1-dapengx.yu@intel.com/mbox/",
    "series": [
        {
            "id": 17416,
            "url": "https://patches.dpdk.org/api/series/17416/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=17416",
            "date": "2021-06-21T07:23:53",
            "name": "[v2] net/i40e: fix data path corrupt on secondary process",
            "version": 2,
            "mbox": "https://patches.dpdk.org/series/17416/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/94590/comments/",
    "check": "fail",
    "checks": "https://patches.dpdk.org/api/patches/94590/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 A0CD4A0547;\n\tMon, 21 Jun 2021 09:24:26 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 632A741158;\n\tMon, 21 Jun 2021 09:24:26 +0200 (CEST)",
            "from mga14.intel.com (mga14.intel.com [192.55.52.115])\n by mails.dpdk.org (Postfix) with ESMTP id 8398740040;\n Mon, 21 Jun 2021 09:24:23 +0200 (CEST)",
            "from fmsmga008.fm.intel.com ([10.253.24.58])\n by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 21 Jun 2021 00:24:22 -0700",
            "from unknown (HELO localhost.localdomain) ([10.240.183.93])\n by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 21 Jun 2021 00:24:20 -0700"
        ],
        "IronPort-SDR": [
            "\n QgyizngR6Iyv5ggeHsjzYTTK5Tdbc2iqrlbc/6RcvB/A7950bZoDGFmb2WB3Cah436HihxhJJs\n v7dyBMBgjtug==",
            "\n TYHGfwKP8EVJ0DPbyg+2eKIMhtnEN9BUoLdxhrxcVCN3+OclmdZOBVR4pzsHqlbMJqItvNMNp+\n 7dJM2tpUyW+A=="
        ],
        "X-IronPort-AV": [
            "E=McAfee;i=\"6200,9189,10021\"; a=\"206613467\"",
            "E=Sophos;i=\"5.83,289,1616482800\"; d=\"scan'208\";a=\"206613467\"",
            "E=Sophos;i=\"5.83,289,1616482800\"; d=\"scan'208\";a=\"453791970\""
        ],
        "From": "dapengx.yu@intel.com",
        "To": "Beilei Xing <beilei.xing@intel.com>",
        "Cc": "dev@dpdk.org, qi.z.zhang@intel.com, Dapeng Yu <dapengx.yu@intel.com>,\n stable@dpdk.org",
        "Date": "Mon, 21 Jun 2021 15:23:53 +0800",
        "Message-Id": "<20210621072353.80415-1-dapengx.yu@intel.com>",
        "X-Mailer": "git-send-email 2.27.0",
        "In-Reply-To": "<20210609070537.2714889-1-dapengx.yu@intel.com>",
        "References": "<20210609070537.2714889-1-dapengx.yu@intel.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[dpdk-dev] [PATCH v2] net/i40e: fix data path corrupt on secondary\n process",
        "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",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "From: Dapeng Yu <dapengx.yu@intel.com>\n\nThe rte_eth_devices array is not in share memory, it should not be\nreferenced by i40e_adapter which is shared by primary and secondary.\nAny process set i40e_adapter->eth_dev will corrupt another process's\ncontext.\n\nThe patch removed the field \"eth_dev\" from i40e_adapter.\nNow, when the data paths try to access the rte_eth_dev_data instance,\nthey should replace adapter->eth_dev->data with adapter->pf.dev_data.\n\nFixes: 4861cde46116 (\"i40e: new poll mode driver\")\nCc: stable@dpdk.org\n\nSigned-off-by: Dapeng Yu <dapengx.yu@intel.com>\n---\nV2:\n* Just list commit id which introduced the bug, because other following\n  up commits are not guilty and shall not be listed here\n* fix typos in commit message of V1\n---\n drivers/net/i40e/i40e_ethdev.c         | 44 +++++++++++++-------------\n drivers/net/i40e/i40e_ethdev.h         |  7 ++--\n drivers/net/i40e/i40e_fdir.c           |  4 +--\n drivers/net/i40e/i40e_flow.c           |  2 +-\n drivers/net/i40e/i40e_hash.c           |  7 ++--\n drivers/net/i40e/i40e_rxtx.c           |  4 +--\n drivers/net/i40e/i40e_vf_representor.c | 37 ++++++++++++----------\n 7 files changed, 55 insertions(+), 50 deletions(-)",
    "diff": "diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c\nindex dd61258739..ebaf20486f 100644\n--- a/drivers/net/i40e/i40e_ethdev.c\n+++ b/drivers/net/i40e/i40e_ethdev.c\n@@ -732,10 +732,11 @@ i40e_write_global_rx_ctl(struct i40e_hw *hw, uint32_t reg_addr,\n \t\t\t uint32_t reg_val)\n {\n \tuint32_t ori_reg_val;\n-\tstruct rte_eth_dev *dev;\n+\tstruct rte_eth_dev_data *dev_data =\n+\t\t((struct i40e_adapter *)hw->back)->pf.dev_data;\n+\tstruct rte_eth_dev *dev = &rte_eth_devices[dev_data->port_id];\n \n \tori_reg_val = i40e_read_rx_ctl(hw, reg_addr);\n-\tdev = ((struct i40e_adapter *)hw->back)->eth_dev;\n \ti40e_write_rx_ctl(hw, reg_addr, reg_val);\n \tif (ori_reg_val != reg_val)\n \t\tPMD_DRV_LOG(WARNING,\n@@ -1321,7 +1322,9 @@ i40e_aq_debug_write_global_register(struct i40e_hw *hw,\n \t\t\t\t    struct i40e_asq_cmd_details *cmd_details)\n {\n \tuint64_t ori_reg_val;\n-\tstruct rte_eth_dev *dev;\n+\tstruct rte_eth_dev_data *dev_data =\n+\t\t((struct i40e_adapter *)hw->back)->pf.dev_data;\n+\tstruct rte_eth_dev *dev = &rte_eth_devices[dev_data->port_id];\n \tint ret;\n \n \tret = i40e_aq_debug_read_register(hw, reg_addr, &ori_reg_val, NULL);\n@@ -1331,7 +1334,6 @@ i40e_aq_debug_write_global_register(struct i40e_hw *hw,\n \t\t\t    reg_addr);\n \t\treturn -EIO;\n \t}\n-\tdev = ((struct i40e_adapter *)hw->back)->eth_dev;\n \n \tif (ori_reg_val != reg_val)\n \t\tPMD_DRV_LOG(WARNING,\n@@ -1450,7 +1452,6 @@ eth_i40e_dev_init(struct rte_eth_dev *dev, void *init_params __rte_unused)\n \tdev->data->dev_flags |= RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS;\n \n \tpf->adapter = I40E_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private);\n-\tpf->adapter->eth_dev = dev;\n \tpf->dev_data = dev->data;\n \n \thw->back = I40E_PF_TO_ADAPTER(pf);\n@@ -1977,7 +1978,7 @@ i40e_dev_configure(struct rte_eth_dev *dev)\n void\n i40e_vsi_queues_unbind_intr(struct i40e_vsi *vsi)\n {\n-\tstruct rte_eth_dev *dev = vsi->adapter->eth_dev;\n+\tstruct rte_eth_dev *dev = I40E_VSI_TO_ETH_DEV(vsi);\n \tstruct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev);\n \tstruct rte_intr_handle *intr_handle = &pci_dev->intr_handle;\n \tstruct i40e_hw *hw = I40E_VSI_TO_HW(vsi);\n@@ -2093,7 +2094,7 @@ __vsi_queues_bind_intr(struct i40e_vsi *vsi, uint16_t msix_vect,\n int\n i40e_vsi_queues_bind_intr(struct i40e_vsi *vsi, uint16_t itr_idx)\n {\n-\tstruct rte_eth_dev *dev = vsi->adapter->eth_dev;\n+\tstruct rte_eth_dev *dev = I40E_VSI_TO_ETH_DEV(vsi);\n \tstruct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev);\n \tstruct rte_intr_handle *intr_handle = &pci_dev->intr_handle;\n \tstruct i40e_hw *hw = I40E_VSI_TO_HW(vsi);\n@@ -2169,7 +2170,7 @@ i40e_vsi_queues_bind_intr(struct i40e_vsi *vsi, uint16_t itr_idx)\n void\n i40e_vsi_enable_queues_intr(struct i40e_vsi *vsi)\n {\n-\tstruct rte_eth_dev *dev = vsi->adapter->eth_dev;\n+\tstruct rte_eth_dev *dev = I40E_VSI_TO_ETH_DEV(vsi);\n \tstruct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev);\n \tstruct rte_intr_handle *intr_handle = &pci_dev->intr_handle;\n \tstruct i40e_hw *hw = I40E_VSI_TO_HW(vsi);\n@@ -2196,7 +2197,7 @@ i40e_vsi_enable_queues_intr(struct i40e_vsi *vsi)\n void\n i40e_vsi_disable_queues_intr(struct i40e_vsi *vsi)\n {\n-\tstruct rte_eth_dev *dev = vsi->adapter->eth_dev;\n+\tstruct rte_eth_dev *dev = I40E_VSI_TO_ETH_DEV(vsi);\n \tstruct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev);\n \tstruct rte_intr_handle *intr_handle = &pci_dev->intr_handle;\n \tstruct i40e_hw *hw = I40E_VSI_TO_HW(vsi);\n@@ -6411,8 +6412,7 @@ i40e_dev_tx_init(struct i40e_pf *pf)\n \t\t\tbreak;\n \t}\n \tif (ret == I40E_SUCCESS)\n-\t\ti40e_set_tx_function(container_of(pf, struct i40e_adapter, pf)\n-\t\t\t\t     ->eth_dev);\n+\t\ti40e_set_tx_function(&rte_eth_devices[pf->dev_data->port_id]);\n \n \treturn ret;\n }\n@@ -6440,8 +6440,7 @@ i40e_dev_rx_init(struct i40e_pf *pf)\n \t\t}\n \t}\n \tif (ret == I40E_SUCCESS)\n-\t\ti40e_set_rx_function(container_of(pf, struct i40e_adapter, pf)\n-\t\t\t\t     ->eth_dev);\n+\t\ti40e_set_rx_function(&rte_eth_devices[pf->dev_data->port_id]);\n \n \treturn ret;\n }\n@@ -7880,7 +7879,7 @@ i40e_status_code i40e_replace_mpls_l1_filter(struct i40e_pf *pf)\n \tstruct i40e_aqc_replace_cloud_filters_cmd  filter_replace;\n \tstruct i40e_aqc_replace_cloud_filters_cmd_buf  filter_replace_buf;\n \tstruct i40e_hw *hw = I40E_PF_TO_HW(pf);\n-\tstruct rte_eth_dev *dev = ((struct i40e_adapter *)hw->back)->eth_dev;\n+\tstruct rte_eth_dev *dev = &rte_eth_devices[pf->dev_data->port_id];\n \tenum i40e_status_code status = I40E_SUCCESS;\n \n \tif (pf->support_multi_driver) {\n@@ -7941,7 +7940,7 @@ i40e_status_code i40e_replace_mpls_cloud_filter(struct i40e_pf *pf)\n \tstruct i40e_aqc_replace_cloud_filters_cmd  filter_replace;\n \tstruct i40e_aqc_replace_cloud_filters_cmd_buf  filter_replace_buf;\n \tstruct i40e_hw *hw = I40E_PF_TO_HW(pf);\n-\tstruct rte_eth_dev *dev = ((struct i40e_adapter *)hw->back)->eth_dev;\n+\tstruct rte_eth_dev *dev = &rte_eth_devices[pf->dev_data->port_id];\n \tenum i40e_status_code status = I40E_SUCCESS;\n \n \tif (pf->support_multi_driver) {\n@@ -8016,7 +8015,7 @@ i40e_replace_gtp_l1_filter(struct i40e_pf *pf)\n \tstruct i40e_aqc_replace_cloud_filters_cmd  filter_replace;\n \tstruct i40e_aqc_replace_cloud_filters_cmd_buf  filter_replace_buf;\n \tstruct i40e_hw *hw = I40E_PF_TO_HW(pf);\n-\tstruct rte_eth_dev *dev = ((struct i40e_adapter *)hw->back)->eth_dev;\n+\tstruct rte_eth_dev *dev = &rte_eth_devices[pf->dev_data->port_id];\n \tenum i40e_status_code status = I40E_SUCCESS;\n \n \tif (pf->support_multi_driver) {\n@@ -8104,7 +8103,7 @@ i40e_status_code i40e_replace_gtp_cloud_filter(struct i40e_pf *pf)\n \tstruct i40e_aqc_replace_cloud_filters_cmd  filter_replace;\n \tstruct i40e_aqc_replace_cloud_filters_cmd_buf  filter_replace_buf;\n \tstruct i40e_hw *hw = I40E_PF_TO_HW(pf);\n-\tstruct rte_eth_dev *dev = ((struct i40e_adapter *)hw->back)->eth_dev;\n+\tstruct rte_eth_dev *dev = &rte_eth_devices[pf->dev_data->port_id];\n \tenum i40e_status_code status = I40E_SUCCESS;\n \n \tif (pf->support_multi_driver) {\n@@ -8179,7 +8178,7 @@ i40e_replace_port_l1_filter(struct i40e_pf *pf,\n \tstruct i40e_aqc_replace_cloud_filters_cmd  filter_replace;\n \tenum i40e_status_code status = I40E_SUCCESS;\n \tstruct i40e_hw *hw = I40E_PF_TO_HW(pf);\n-\tstruct rte_eth_dev *dev = ((struct i40e_adapter *)hw->back)->eth_dev;\n+\tstruct rte_eth_dev *dev = &rte_eth_devices[pf->dev_data->port_id];\n \n \tif (pf->support_multi_driver) {\n \t\tPMD_DRV_LOG(ERR, \"Replace l1 filter is not supported.\");\n@@ -8251,7 +8250,7 @@ i40e_replace_port_cloud_filter(struct i40e_pf *pf,\n \tstruct i40e_aqc_replace_cloud_filters_cmd  filter_replace;\n \tenum i40e_status_code status = I40E_SUCCESS;\n \tstruct i40e_hw *hw = I40E_PF_TO_HW(pf);\n-\tstruct rte_eth_dev *dev = ((struct i40e_adapter *)hw->back)->eth_dev;\n+\tstruct rte_eth_dev *dev = &rte_eth_devices[pf->dev_data->port_id];\n \n \tif (pf->support_multi_driver) {\n \t\tPMD_DRV_LOG(ERR, \"Replace cloud filter is not supported.\");\n@@ -9578,9 +9577,10 @@ void\n i40e_check_write_global_reg(struct i40e_hw *hw, uint32_t addr, uint32_t val)\n {\n \tuint32_t reg = i40e_read_rx_ctl(hw, addr);\n-\tstruct rte_eth_dev *dev;\n+\tstruct rte_eth_dev_data *dev_data =\n+\t\t((struct i40e_adapter *)hw->back)->pf.dev_data;\n+\tstruct rte_eth_dev *dev = &rte_eth_devices[dev_data->port_id];\n \n-\tdev = ((struct i40e_adapter *)hw->back)->eth_dev;\n \tif (reg != val) {\n \t\ti40e_write_rx_ctl(hw, addr, val);\n \t\tPMD_DRV_LOG(WARNING,\n@@ -12372,7 +12372,7 @@ i40e_cloud_filter_qinq_create(struct i40e_pf *pf)\n \tstruct i40e_aqc_replace_cloud_filters_cmd  filter_replace;\n \tstruct i40e_aqc_replace_cloud_filters_cmd_buf  filter_replace_buf;\n \tstruct i40e_hw *hw = I40E_PF_TO_HW(pf);\n-\tstruct rte_eth_dev *dev = ((struct i40e_adapter *)hw->back)->eth_dev;\n+\tstruct rte_eth_dev *dev = &rte_eth_devices[pf->dev_data->port_id];\n \n \tif (pf->support_multi_driver) {\n \t\tPMD_DRV_LOG(ERR, \"Replace cloud filter is not supported.\");\ndiff --git a/drivers/net/i40e/i40e_ethdev.h b/drivers/net/i40e/i40e_ethdev.h\nindex ba6acd1878..cbbb35780a 100644\n--- a/drivers/net/i40e/i40e_ethdev.h\n+++ b/drivers/net/i40e/i40e_ethdev.h\n@@ -90,8 +90,10 @@\n \tdo {\t\t\t\t\t\t\t\t\\\n \t\tuint32_t ori_val;\t\t\t\t\t\\\n \t\tstruct rte_eth_dev *dev;\t\t\t\t\\\n+\t\tstruct rte_eth_dev_data *dev_data;\t\t\t\\\n \t\tori_val = I40E_READ_REG((hw), (reg));\t\t\t\\\n-\t\tdev = ((struct i40e_adapter *)hw->back)->eth_dev;\t\\\n+\t\tdev_data = ((struct i40e_adapter *)hw->back)->pf.dev_data; \\\n+\t\tdev = &rte_eth_devices[dev_data->port_id];\t\t\\\n \t\tI40E_PCI_REG_WRITE(I40E_PCI_REG_ADDR((hw),\t\t\\\n \t\t\t\t\t\t     (reg)), (value));\t\\\n \t\tif (ori_val != value)\t\t\t\t\t\\\n@@ -1285,7 +1287,6 @@ struct i40e_vf {\n struct i40e_adapter {\n \t/* Common for both PF and VF */\n \tstruct i40e_hw hw;\n-\tstruct rte_eth_dev *eth_dev;\n \n \t/* Specific for PF or VF */\n \tunion {\n@@ -1540,7 +1541,7 @@ i40e_get_vsi_from_adapter(struct i40e_adapter *adapter)\n #define I40E_VSI_TO_DEV_DATA(vsi) \\\n \t(((struct i40e_vsi *)vsi)->adapter->pf.dev_data)\n #define I40E_VSI_TO_ETH_DEV(vsi) \\\n-\t(((struct i40e_vsi *)vsi)->adapter->eth_dev)\n+\t(&rte_eth_devices[((struct i40e_vsi *)vsi)->adapter->pf.dev_data->port_id])\n \n /* I40E_PF_TO */\n #define I40E_PF_TO_HW(pf) \\\ndiff --git a/drivers/net/i40e/i40e_fdir.c b/drivers/net/i40e/i40e_fdir.c\nindex ac0e09bfdd..6381d6ffea 100644\n--- a/drivers/net/i40e/i40e_fdir.c\n+++ b/drivers/net/i40e/i40e_fdir.c\n@@ -160,7 +160,7 @@ i40e_fdir_setup(struct i40e_pf *pf)\n \tint err = I40E_SUCCESS;\n \tchar z_name[RTE_MEMZONE_NAMESIZE];\n \tconst struct rte_memzone *mz = NULL;\n-\tstruct rte_eth_dev *eth_dev = pf->adapter->eth_dev;\n+\tstruct rte_eth_dev *eth_dev = &rte_eth_devices[pf->dev_data->port_id];\n \tuint16_t i;\n \n \tif ((pf->flags & I40E_FLAG_FDIR) == 0) {\n@@ -284,7 +284,7 @@ i40e_fdir_teardown(struct i40e_pf *pf)\n {\n \tstruct i40e_hw *hw = I40E_PF_TO_HW(pf);\n \tstruct i40e_vsi *vsi;\n-\tstruct rte_eth_dev *dev = pf->adapter->eth_dev;\n+\tstruct rte_eth_dev *dev = &rte_eth_devices[pf->dev_data->port_id];\n \n \tvsi = pf->fdir.fdir_vsi;\n \tif (!vsi)\ndiff --git a/drivers/net/i40e/i40e_flow.c b/drivers/net/i40e/i40e_flow.c\nindex 2cc9ad9ef7..4d214303c0 100644\n--- a/drivers/net/i40e/i40e_flow.c\n+++ b/drivers/net/i40e/i40e_flow.c\n@@ -4897,7 +4897,7 @@ i40e_flow_flush(struct rte_eth_dev *dev, struct rte_flow_error *error)\n static int\n i40e_flow_flush_fdir_filter(struct i40e_pf *pf)\n {\n-\tstruct rte_eth_dev *dev = pf->adapter->eth_dev;\n+\tstruct rte_eth_dev *dev = &rte_eth_devices[pf->dev_data->port_id];\n \tstruct i40e_fdir_info *fdir_info = &pf->fdir;\n \tstruct i40e_fdir_filter *fdir_filter;\n \tenum i40e_filter_pctype pctype;\ndiff --git a/drivers/net/i40e/i40e_hash.c b/drivers/net/i40e/i40e_hash.c\nindex b1cb24f437..b4590f9117 100644\n--- a/drivers/net/i40e/i40e_hash.c\n+++ b/drivers/net/i40e/i40e_hash.c\n@@ -732,7 +732,7 @@ i40e_hash_config_region(struct i40e_pf *pf,\n \t\t\tconst struct i40e_rte_flow_rss_conf *rss_conf)\n {\n \tstruct i40e_hw *hw = &pf->adapter->hw;\n-\tstruct rte_eth_dev *dev = pf->adapter->eth_dev;\n+\tstruct rte_eth_dev *dev = &rte_eth_devices[pf->dev_data->port_id];\n \tstruct i40e_queue_region_info *regions = pf->queue_region.region;\n \tuint32_t num = pf->queue_region.queue_region_number;\n \tuint32_t i, region_id_mask = 0;\n@@ -1262,6 +1262,7 @@ i40e_hash_reset_conf(struct i40e_pf *pf,\n \t\t     struct i40e_rte_flow_rss_conf *rss_conf)\n {\n \tstruct i40e_hw *hw = &pf->adapter->hw;\n+\tstruct rte_eth_dev *dev;\n \tuint64_t inset;\n \tuint32_t idx;\n \tint ret;\n@@ -1275,8 +1276,8 @@ i40e_hash_reset_conf(struct i40e_pf *pf,\n \t}\n \n \tif (rss_conf->misc_reset_flags & I40E_HASH_FLOW_RESET_FLAG_REGION) {\n-\t\tret = i40e_flush_queue_region_all_conf(pf->adapter->eth_dev,\n-\t\t\t\t\t\t       hw, pf, 0);\n+\t\tdev = &rte_eth_devices[pf->dev_data->port_id];\n+\t\tret = i40e_flush_queue_region_all_conf(dev, hw, pf, 0);\n \t\tif (ret)\n \t\t\treturn ret;\n \ndiff --git a/drivers/net/i40e/i40e_rxtx.c b/drivers/net/i40e/i40e_rxtx.c\nindex 808ed95864..ec6b444b94 100644\n--- a/drivers/net/i40e/i40e_rxtx.c\n+++ b/drivers/net/i40e/i40e_rxtx.c\n@@ -3046,7 +3046,7 @@ i40e_fdir_setup_tx_resources(struct i40e_pf *pf)\n \t\treturn I40E_ERR_BAD_PTR;\n \t}\n \n-\tdev = pf->adapter->eth_dev;\n+\tdev = &rte_eth_devices[pf->dev_data->port_id];\n \n \t/* Allocate the TX queue data structure. */\n \ttxq = rte_zmalloc_socket(\"i40e fdir tx queue\",\n@@ -3104,7 +3104,7 @@ i40e_fdir_setup_rx_resources(struct i40e_pf *pf)\n \t\treturn I40E_ERR_BAD_PTR;\n \t}\n \n-\tdev = pf->adapter->eth_dev;\n+\tdev = &rte_eth_devices[pf->dev_data->port_id];\n \n \t/* Allocate the RX queue data structure. */\n \trxq = rte_zmalloc_socket(\"i40e fdir rx queue\",\ndiff --git a/drivers/net/i40e/i40e_vf_representor.c b/drivers/net/i40e/i40e_vf_representor.c\nindex 7ed47c1a2c..0481b55381 100644\n--- a/drivers/net/i40e/i40e_vf_representor.c\n+++ b/drivers/net/i40e/i40e_vf_representor.c\n@@ -19,15 +19,18 @@ i40e_vf_representor_link_update(struct rte_eth_dev *ethdev,\n \tint wait_to_complete)\n {\n \tstruct i40e_vf_representor *representor = ethdev->data->dev_private;\n+\tstruct rte_eth_dev *dev =\n+\t\t&rte_eth_devices[representor->adapter->pf.dev_data->port_id];\n \n-\treturn i40e_dev_link_update(representor->adapter->eth_dev,\n-\t\twait_to_complete);\n+\treturn i40e_dev_link_update(dev, wait_to_complete);\n }\n static int\n i40e_vf_representor_dev_infos_get(struct rte_eth_dev *ethdev,\n \tstruct rte_eth_dev_info *dev_info)\n {\n \tstruct i40e_vf_representor *representor = ethdev->data->dev_private;\n+\tstruct rte_eth_dev_data *pf_dev_data =\n+\t\trepresentor->adapter->pf.dev_data;\n \n \t/* get dev info for the vdev */\n \tdev_info->device = ethdev->device;\n@@ -99,7 +102,7 @@ i40e_vf_representor_dev_infos_get(struct rte_eth_dev *ethdev,\n \t};\n \n \tdev_info->switch_info.name =\n-\t\trepresentor->adapter->eth_dev->device->name;\n+\t\trte_eth_devices[pf_dev_data->port_id].device->name;\n \tdev_info->switch_info.domain_id = representor->switch_domain_id;\n \tdev_info->switch_info.port_id = representor->vf_id;\n \n@@ -213,7 +216,7 @@ i40e_vf_representor_stats_get(struct rte_eth_dev *ethdev,\n \tint ret;\n \n \tret = rte_pmd_i40e_get_vf_native_stats(\n-\t\trepresentor->adapter->eth_dev->data->port_id,\n+\t\trepresentor->adapter->pf.dev_data->port_id,\n \t\trepresentor->vf_id, &native_stats);\n \tif (ret == 0) {\n \t\ti40evf_stat_update_48(\n@@ -273,7 +276,7 @@ i40e_vf_representor_stats_reset(struct rte_eth_dev *ethdev)\n \tstruct i40e_vf_representor *representor = ethdev->data->dev_private;\n \n \treturn rte_pmd_i40e_get_vf_native_stats(\n-\t\trepresentor->adapter->eth_dev->data->port_id,\n+\t\trepresentor->adapter->pf.dev_data->port_id,\n \t\trepresentor->vf_id, &representor->stats_offset);\n }\n \n@@ -283,7 +286,7 @@ i40e_vf_representor_promiscuous_enable(struct rte_eth_dev *ethdev)\n \tstruct i40e_vf_representor *representor = ethdev->data->dev_private;\n \n \treturn rte_pmd_i40e_set_vf_unicast_promisc(\n-\t\trepresentor->adapter->eth_dev->data->port_id,\n+\t\trepresentor->adapter->pf.dev_data->port_id,\n \t\trepresentor->vf_id, 1);\n }\n \n@@ -293,7 +296,7 @@ i40e_vf_representor_promiscuous_disable(struct rte_eth_dev *ethdev)\n \tstruct i40e_vf_representor *representor = ethdev->data->dev_private;\n \n \treturn rte_pmd_i40e_set_vf_unicast_promisc(\n-\t\trepresentor->adapter->eth_dev->data->port_id,\n+\t\trepresentor->adapter->pf.dev_data->port_id,\n \t\trepresentor->vf_id, 0);\n }\n \n@@ -303,7 +306,7 @@ i40e_vf_representor_allmulticast_enable(struct rte_eth_dev *ethdev)\n \tstruct i40e_vf_representor *representor = ethdev->data->dev_private;\n \n \treturn rte_pmd_i40e_set_vf_multicast_promisc(\n-\t\trepresentor->adapter->eth_dev->data->port_id,\n+\t\trepresentor->adapter->pf.dev_data->port_id,\n \t\trepresentor->vf_id,  1);\n }\n \n@@ -313,7 +316,7 @@ i40e_vf_representor_allmulticast_disable(struct rte_eth_dev *ethdev)\n \tstruct i40e_vf_representor *representor = ethdev->data->dev_private;\n \n \treturn rte_pmd_i40e_set_vf_multicast_promisc(\n-\t\trepresentor->adapter->eth_dev->data->port_id,\n+\t\trepresentor->adapter->pf.dev_data->port_id,\n \t\trepresentor->vf_id,  0);\n }\n \n@@ -323,7 +326,7 @@ i40e_vf_representor_mac_addr_remove(struct rte_eth_dev *ethdev, uint32_t index)\n \tstruct i40e_vf_representor *representor = ethdev->data->dev_private;\n \n \trte_pmd_i40e_remove_vf_mac_addr(\n-\t\trepresentor->adapter->eth_dev->data->port_id,\n+\t\trepresentor->adapter->pf.dev_data->port_id,\n \t\trepresentor->vf_id, &ethdev->data->mac_addrs[index]);\n }\n \n@@ -334,7 +337,7 @@ i40e_vf_representor_mac_addr_set(struct rte_eth_dev *ethdev,\n \tstruct i40e_vf_representor *representor = ethdev->data->dev_private;\n \n \treturn rte_pmd_i40e_set_vf_mac_addr(\n-\t\trepresentor->adapter->eth_dev->data->port_id,\n+\t\trepresentor->adapter->pf.dev_data->port_id,\n \t\trepresentor->vf_id, mac_addr);\n }\n \n@@ -346,7 +349,7 @@ i40e_vf_representor_vlan_filter_set(struct rte_eth_dev *ethdev,\n \tuint64_t vf_mask = 1ULL << representor->vf_id;\n \n \treturn rte_pmd_i40e_set_vf_vlan_filter(\n-\t\trepresentor->adapter->eth_dev->data->port_id,\n+\t\trepresentor->adapter->pf.dev_data->port_id,\n \t\tvlan_id, vf_mask, on);\n }\n \n@@ -360,7 +363,7 @@ i40e_vf_representor_vlan_offload_set(struct rte_eth_dev *ethdev, int mask)\n \tstruct i40e_pf *pf;\n \tuint32_t vfid;\n \n-\tpdev = representor->adapter->eth_dev;\n+\tpdev = &rte_eth_devices[representor->adapter->pf.dev_data->port_id];\n \tvfid = representor->vf_id;\n \n \tif (!is_i40e_supported(pdev)) {\n@@ -410,7 +413,7 @@ i40e_vf_representor_vlan_strip_queue_set(struct rte_eth_dev *ethdev,\n \tstruct i40e_vf_representor *representor = ethdev->data->dev_private;\n \n \trte_pmd_i40e_set_vf_vlan_stripq(\n-\t\trepresentor->adapter->eth_dev->data->port_id,\n+\t\trepresentor->adapter->pf.dev_data->port_id,\n \t\trepresentor->vf_id, on);\n }\n \n@@ -421,7 +424,7 @@ i40e_vf_representor_vlan_pvid_set(struct rte_eth_dev *ethdev, uint16_t vlan_id,\n \tstruct i40e_vf_representor *representor = ethdev->data->dev_private;\n \n \treturn rte_pmd_i40e_set_vf_vlan_insert(\n-\t\trepresentor->adapter->eth_dev->data->port_id,\n+\t\trepresentor->adapter->pf.dev_data->port_id,\n \t\trepresentor->vf_id, vlan_id);\n }\n \n@@ -487,7 +490,7 @@ i40e_vf_representor_init(struct rte_eth_dev *ethdev, void *init_params)\n \t\t((struct i40e_vf_representor *)init_params)->adapter;\n \n \tpf = I40E_DEV_PRIVATE_TO_PF(\n-\t\trepresentor->adapter->eth_dev->data->dev_private);\n+\t\trepresentor->adapter->pf.dev_data->dev_private);\n \n \tif (representor->vf_id >= pf->vf_num)\n \t\treturn -ENODEV;\n@@ -519,7 +522,7 @@ i40e_vf_representor_init(struct rte_eth_dev *ethdev, void *init_params)\n \tethdev->data->mac_addrs = &vf->mac_addr;\n \n \t/* Link state. Inherited from PF */\n-\tlink = &representor->adapter->eth_dev->data->dev_link;\n+\tlink = &representor->adapter->pf.dev_data->dev_link;\n \n \tethdev->data->dev_link.link_speed = link->link_speed;\n \tethdev->data->dev_link.link_duplex = link->link_duplex;\n",
    "prefixes": [
        "v2"
    ]
}