get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 66486,
    "url": "http://patches.dpdk.org/api/patches/66486/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20200310065029.40966-7-haiyue.wang@intel.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": "<20200310065029.40966-7-haiyue.wang@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20200310065029.40966-7-haiyue.wang@intel.com",
    "date": "2020-03-10T06:50:28",
    "name": "[v2,6/7] net/ice: handle the PF initialization by DCF",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "3f87ada58584f80f2726412f42747bd34c5a8a25",
    "submitter": {
        "id": 1044,
        "url": "http://patches.dpdk.org/api/people/1044/?format=api",
        "name": "Wang, Haiyue",
        "email": "haiyue.wang@intel.com"
    },
    "delegate": {
        "id": 31221,
        "url": "http://patches.dpdk.org/api/users/31221/?format=api",
        "username": "yexl",
        "first_name": "xiaolong",
        "last_name": "ye",
        "email": "xiaolong.ye@intel.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20200310065029.40966-7-haiyue.wang@intel.com/mbox/",
    "series": [
        {
            "id": 8859,
            "url": "http://patches.dpdk.org/api/series/8859/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=8859",
            "date": "2020-03-10T06:50:22",
            "name": "add Intel DCF PMD support",
            "version": 2,
            "mbox": "http://patches.dpdk.org/series/8859/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/66486/comments/",
    "check": "fail",
    "checks": "http://patches.dpdk.org/api/patches/66486/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Received": [
            "from dpdk.org (dpdk.org [92.243.14.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id D1602A0563;\n\tTue, 10 Mar 2020 07:59:25 +0100 (CET)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 5F8111C066;\n\tTue, 10 Mar 2020 07:58:34 +0100 (CET)",
            "from mga12.intel.com (mga12.intel.com [192.55.52.136])\n by dpdk.org (Postfix) with ESMTP id 13BD51C01B\n for <dev@dpdk.org>; Tue, 10 Mar 2020 07:58:30 +0100 (CET)",
            "from orsmga001.jf.intel.com ([10.7.209.18])\n by fmsmga106.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384;\n 09 Mar 2020 23:58:30 -0700",
            "from npg-dpdk-haiyue-1.sh.intel.com ([10.67.119.213])\n by orsmga001.jf.intel.com with ESMTP; 09 Mar 2020 23:58:28 -0700"
        ],
        "X-Amp-Result": "SKIPPED(no attachment in message)",
        "X-Amp-File-Uploaded": "False",
        "X-ExtLoop1": "1",
        "X-IronPort-AV": "E=Sophos;i=\"5.70,518,1574150400\"; d=\"scan'208\";a=\"321693986\"",
        "From": "Haiyue Wang <haiyue.wang@intel.com>",
        "To": "dev@dpdk.org, xiaolong.ye@intel.com, qi.z.zhang@intel.com,\n qiming.yang@intel.com, beilei.xing@intel.com",
        "Cc": "wei.zhao1@intel.com,\n\tHaiyue Wang <haiyue.wang@intel.com>",
        "Date": "Tue, 10 Mar 2020 14:50:28 +0800",
        "Message-Id": "<20200310065029.40966-7-haiyue.wang@intel.com>",
        "X-Mailer": "git-send-email 2.25.1",
        "In-Reply-To": "<20200310065029.40966-1-haiyue.wang@intel.com>",
        "References": "<20200309141437.11800-1-haiyue.wang@intel.com>\n <20200310065029.40966-1-haiyue.wang@intel.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[dpdk-dev] [PATCH v2 6/7] net/ice: handle the PF initialization by\n\tDCF",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "The DCF (Device Config Function) works at the user PF level, it can't\naccess the real PF hardware directly. So it will proxy the PF's AdminQ\ncommand through DCF's mailbox.\n\nAnd the DCF is mainly used to control the flow setting of other VFs, so\nit only needs to initialize some core functions about the flow .\n\nSigned-off-by: Haiyue Wang <haiyue.wang@intel.com>\n---\n drivers/net/ice/Makefile         |   1 +\n drivers/net/ice/ice_dcf.c        |   7 +-\n drivers/net/ice/ice_dcf.h        |   3 +\n drivers/net/ice/ice_dcf_ethdev.c |  10 +-\n drivers/net/ice/ice_dcf_ethdev.h |  11 +-\n drivers/net/ice/ice_dcf_parent.c | 263 +++++++++++++++++++++++++++++++\n drivers/net/ice/meson.build      |   3 +-\n 7 files changed, 292 insertions(+), 6 deletions(-)\n create mode 100644 drivers/net/ice/ice_dcf_parent.c",
    "diff": "diff --git a/drivers/net/ice/Makefile b/drivers/net/ice/Makefile\nindex f493c9ed7..3ecc72219 100644\n--- a/drivers/net/ice/Makefile\n+++ b/drivers/net/ice/Makefile\n@@ -88,6 +88,7 @@ SRCS-$(CONFIG_RTE_LIBRTE_ICE_PMD) += ice_generic_flow.c\n \n SRCS-$(CONFIG_RTE_LIBRTE_ICE_PMD) += ice_dcf.c\n SRCS-$(CONFIG_RTE_LIBRTE_ICE_PMD) += ice_dcf_ethdev.c\n+SRCS-$(CONFIG_RTE_LIBRTE_ICE_PMD) += ice_dcf_parent.c\n \n # install this header file\n SYMLINK-$(CONFIG_RTE_LIBRTE_ICE_PMD)-include := rte_pmd_ice.h\ndiff --git a/drivers/net/ice/ice_dcf.c b/drivers/net/ice/ice_dcf.c\nindex 24ed31f35..480c449f5 100644\n--- a/drivers/net/ice/ice_dcf.c\n+++ b/drivers/net/ice/ice_dcf.c\n@@ -124,8 +124,13 @@ ice_dcf_aq_cmd_handle(struct ice_dcf_hw *hw, struct iavf_arq_event_info *info)\n \t}\n \n \tv_op = rte_le_to_cpu_32(info->desc.cookie_high);\n-\tif (unlikely(v_op == VIRTCHNL_OP_EVENT))\n+\tif (unlikely(v_op == VIRTCHNL_OP_EVENT)) {\n+\t\tif (hw->vc_event_msg_cb != NULL)\n+\t\t\thw->vc_event_msg_cb(hw,\n+\t\t\t\t\t    info->msg_buf,\n+\t\t\t\t\t    info->msg_len);\n \t\treturn;\n+\t}\n \n \tv_ret = rte_le_to_cpu_32(info->desc.cookie_low);\n \ndiff --git a/drivers/net/ice/ice_dcf.h b/drivers/net/ice/ice_dcf.h\nindex 99bd53b02..ecd6303a0 100644\n--- a/drivers/net/ice/ice_dcf.h\n+++ b/drivers/net/ice/ice_dcf.h\n@@ -36,6 +36,9 @@ struct ice_dcf_hw {\n \trte_spinlock_t vc_cmd_send_lock;\n \trte_spinlock_t vc_cmd_queue_lock;\n \tTAILQ_HEAD(, dcf_virtchnl_cmd) vc_cmd_queue;\n+\tvoid (*vc_event_msg_cb)(struct ice_dcf_hw *dcf_hw,\n+\t\t\t\tuint8_t *msg, uint16_t msglen);\n+\n \tuint8_t *arq_buf;\n \n \tstruct virtchnl_version_info virtchnl_version;\ndiff --git a/drivers/net/ice/ice_dcf_ethdev.c b/drivers/net/ice/ice_dcf_ethdev.c\nindex 23f82a487..af94caeff 100644\n--- a/drivers/net/ice/ice_dcf_ethdev.c\n+++ b/drivers/net/ice/ice_dcf_ethdev.c\n@@ -145,8 +145,8 @@ ice_dcf_dev_close(struct rte_eth_dev *dev)\n \tdev->dev_ops = NULL;\n \tdev->rx_pkt_burst = NULL;\n \tdev->tx_pkt_burst = NULL;\n-\tdev->data->mac_addrs = NULL;\n \n+\tice_dcf_uninit_parent_adapter(dev);\n \tice_dcf_uninit_hw(dev, &adapter->real_hw);\n }\n \n@@ -225,13 +225,17 @@ ice_dcf_dev_init(struct rte_eth_dev *eth_dev)\n \n \teth_dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;\n \n+\tadapter->real_hw.vc_event_msg_cb = ice_dcf_handle_pf_event_msg;\n \tif (ice_dcf_init_hw(eth_dev, &adapter->real_hw) != 0) {\n \t\tPMD_INIT_LOG(ERR, \"Failed to init DCF hardware\");\n \t\treturn -1;\n \t}\n \n-\trte_eth_random_addr(adapter->mac_addr.addr_bytes);\n-\teth_dev->data->mac_addrs = &adapter->mac_addr;\n+\tif (ice_dcf_init_parent_adapter(eth_dev) != 0) {\n+\t\tPMD_INIT_LOG(ERR, \"Failed to init DCF parent adapter\");\n+\t\tice_dcf_uninit_hw(eth_dev, &adapter->real_hw);\n+\t\treturn -1;\n+\t}\n \n \treturn 0;\n }\ndiff --git a/drivers/net/ice/ice_dcf_ethdev.h b/drivers/net/ice/ice_dcf_ethdev.h\nindex 0c34a0095..e60e808d8 100644\n--- a/drivers/net/ice/ice_dcf_ethdev.h\n+++ b/drivers/net/ice/ice_dcf_ethdev.h\n@@ -5,6 +5,9 @@\n #ifndef _ICE_DCF_ETHDEV_H_\n #define _ICE_DCF_ETHDEV_H_\n \n+#include \"base/ice_common.h\"\n+#include \"base/ice_adminq_cmd.h\"\n+\n #include \"ice_ethdev.h\"\n #include \"ice_dcf.h\"\n \n@@ -15,10 +18,16 @@ struct ice_dcf_queue {\n };\n \n struct ice_dcf_adapter {\n+\tstruct ice_adapter parent; /* Must be first */\n+\n \tstruct ice_dcf_hw real_hw;\n-\tstruct rte_ether_addr mac_addr;\n \tstruct ice_dcf_queue rxqs[ICE_DCF_MAX_RINGS];\n \tstruct ice_dcf_queue txqs[ICE_DCF_MAX_RINGS];\n };\n \n+void ice_dcf_handle_pf_event_msg(struct ice_dcf_hw *dcf_hw,\n+\t\t\t\t uint8_t *msg, uint16_t msglen);\n+int ice_dcf_init_parent_adapter(struct rte_eth_dev *eth_dev);\n+void ice_dcf_uninit_parent_adapter(struct rte_eth_dev *eth_dev);\n+\n #endif /* _ICE_DCF_ETHDEV_H_ */\ndiff --git a/drivers/net/ice/ice_dcf_parent.c b/drivers/net/ice/ice_dcf_parent.c\nnew file mode 100644\nindex 000000000..4c3bb68b1\n--- /dev/null\n+++ b/drivers/net/ice/ice_dcf_parent.c\n@@ -0,0 +1,263 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright(c) 2020 Intel Corporation\n+ */\n+#include <sys/types.h>\n+#include <sys/stat.h>\n+#include <unistd.h>\n+\n+#include \"ice_dcf_ethdev.h\"\n+\n+void\n+ice_dcf_handle_pf_event_msg(__rte_unused struct ice_dcf_hw *dcf_hw,\n+\t\t\t    uint8_t *msg, uint16_t msglen)\n+{\n+\tstruct virtchnl_pf_event *pf_msg = (struct virtchnl_pf_event *)msg;\n+\n+\tif (msglen < sizeof(struct virtchnl_pf_event)) {\n+\t\tPMD_DRV_LOG(DEBUG, \"Invalid event message length : %u\", msglen);\n+\t\treturn;\n+\t}\n+\n+\tswitch (pf_msg->event) {\n+\tcase VIRTCHNL_EVENT_RESET_IMPENDING:\n+\t\tPMD_DRV_LOG(DEBUG, \"VIRTCHNL_EVENT_RESET_IMPENDING event\");\n+\t\tbreak;\n+\tcase VIRTCHNL_EVENT_LINK_CHANGE:\n+\t\tPMD_DRV_LOG(DEBUG, \"VIRTCHNL_EVENT_LINK_CHANGE event\");\n+\t\tbreak;\n+\tcase VIRTCHNL_EVENT_PF_DRIVER_CLOSE:\n+\t\tPMD_DRV_LOG(DEBUG, \"VIRTCHNL_EVENT_PF_DRIVER_CLOSE event\");\n+\t\tbreak;\n+\tdefault:\n+\t\tPMD_DRV_LOG(ERR, \"Unknown event received %u\", pf_msg->event);\n+\t\tbreak;\n+\t}\n+}\n+\n+static int\n+ice_dcf_init_parent_hw(struct ice_hw *hw)\n+{\n+\tstruct ice_aqc_get_phy_caps_data *pcaps;\n+\tenum ice_status status;\n+\n+\tstatus = ice_aq_get_fw_ver(hw, NULL);\n+\tif (status)\n+\t\treturn status;\n+\n+\tstatus = ice_get_caps(hw);\n+\tif (status)\n+\t\treturn status;\n+\n+\thw->port_info = (struct ice_port_info *)\n+\t\t\tice_malloc(hw, sizeof(*hw->port_info));\n+\tif (!hw->port_info)\n+\t\treturn ICE_ERR_NO_MEMORY;\n+\n+\t/* set the back pointer to HW */\n+\thw->port_info->hw = hw;\n+\n+\t/* Initialize port_info struct with switch configuration data */\n+\tstatus = ice_get_initial_sw_cfg(hw);\n+\tif (status)\n+\t\tgoto err_unroll_alloc;\n+\n+\tpcaps = (struct ice_aqc_get_phy_caps_data *)\n+\t\tice_malloc(hw, sizeof(*pcaps));\n+\tif (!pcaps) {\n+\t\tstatus = ICE_ERR_NO_MEMORY;\n+\t\tgoto err_unroll_alloc;\n+\t}\n+\n+\t/* Initialize port_info struct with PHY capabilities */\n+\tstatus = ice_aq_get_phy_caps(hw->port_info, false,\n+\t\t\t\t     ICE_AQC_REPORT_TOPO_CAP, pcaps, NULL);\n+\tice_free(hw, pcaps);\n+\tif (status)\n+\t\tgoto err_unroll_alloc;\n+\n+\t/* Initialize port_info struct with link information */\n+\tstatus = ice_aq_get_link_info(hw->port_info, false, NULL, NULL);\n+\tif (status)\n+\t\tgoto err_unroll_alloc;\n+\n+\tstatus = ice_init_fltr_mgmt_struct(hw);\n+\tif (status)\n+\t\tgoto err_unroll_alloc;\n+\n+\tstatus = ice_init_hw_tbls(hw);\n+\tif (status)\n+\t\tgoto err_unroll_fltr_mgmt_struct;\n+\n+\tPMD_INIT_LOG(INFO,\n+\t\t     \"firmware %d.%d.%d api %d.%d.%d build 0x%08x\",\n+\t\t     hw->fw_maj_ver, hw->fw_min_ver, hw->fw_patch,\n+\t\t     hw->api_maj_ver, hw->api_min_ver, hw->api_patch,\n+\t\t     hw->fw_build);\n+\n+\treturn ICE_SUCCESS;\n+\n+err_unroll_fltr_mgmt_struct:\n+\tice_cleanup_fltr_mgmt_struct(hw);\n+err_unroll_alloc:\n+\tice_free(hw, hw->port_info);\n+\thw->port_info = NULL;\n+\n+\treturn status;\n+}\n+\n+static void ice_dcf_uninit_parent_hw(struct ice_hw *hw)\n+{\n+\tice_cleanup_fltr_mgmt_struct(hw);\n+\n+\tice_free_seg(hw);\n+\tice_free_hw_tbls(hw);\n+\n+\tice_free(hw, hw->port_info);\n+\thw->port_info = NULL;\n+\n+\tice_clear_all_vsi_ctx(hw);\n+}\n+\n+static int\n+ice_dcf_request_pkg_name(struct ice_hw *hw, char *pkg_name)\n+{\n+\tstruct ice_dcf_adapter *dcf_adapter =\n+\t\t\tcontainer_of(hw, struct ice_dcf_adapter, parent.hw);\n+\n+\t/* TODO: check with DSN firstly by iAVF */\n+\tPMD_INIT_LOG(DEBUG,\n+\t\t     \"DCF VSI_ID = %u\",\n+\t\t     dcf_adapter->real_hw.vsi_id);\n+\n+\tsnprintf(pkg_name,\n+\t\t ICE_MAX_PKG_FILENAME_SIZE, \"%s\", ICE_PKG_FILE_UPDATES);\n+\tif (!access(pkg_name, 0))\n+\t\treturn 0;\n+\n+\tsnprintf(pkg_name,\n+\t\t ICE_MAX_PKG_FILENAME_SIZE, \"%s\", ICE_PKG_FILE_DEFAULT);\n+\tif (!access(pkg_name, 0))\n+\t\treturn 0;\n+\n+\treturn -1;\n+}\n+\n+static int\n+ice_dcf_load_pkg(struct ice_hw *hw)\n+{\n+\tchar pkg_name[ICE_MAX_PKG_FILENAME_SIZE];\n+\tuint8_t *pkg_buf;\n+\tuint32_t buf_len;\n+\tstruct stat st;\n+\tFILE *fp;\n+\tint err;\n+\n+\tif (ice_dcf_request_pkg_name(hw, pkg_name)) {\n+\t\tPMD_INIT_LOG(ERR, \"failed to locate the package file\");\n+\t\treturn -ENOENT;\n+\t}\n+\n+\tPMD_INIT_LOG(DEBUG, \"DDP package name: %s\", pkg_name);\n+\n+\terr = stat(pkg_name, &st);\n+\tif (err) {\n+\t\tPMD_INIT_LOG(ERR, \"failed to get file status\");\n+\t\treturn err;\n+\t}\n+\n+\tbuf_len = st.st_size;\n+\tpkg_buf = rte_malloc(NULL, buf_len, 0);\n+\tif (!pkg_buf) {\n+\t\tPMD_INIT_LOG(ERR, \"failed to allocate buffer of size %u for package\",\n+\t\t\t     buf_len);\n+\t\treturn -1;\n+\t}\n+\n+\tfp = fopen(pkg_name, \"rb\");\n+\tif (!fp)  {\n+\t\tPMD_INIT_LOG(ERR, \"failed to open file: %s\", pkg_name);\n+\t\terr = -1;\n+\t\tgoto ret;\n+\t}\n+\n+\terr = fread(pkg_buf, buf_len, 1, fp);\n+\tfclose(fp);\n+\tif (err != 1) {\n+\t\tPMD_INIT_LOG(ERR, \"failed to read package data\");\n+\t\terr = -1;\n+\t\tgoto ret;\n+\t}\n+\n+\terr = ice_copy_and_init_pkg(hw, pkg_buf, buf_len);\n+\tif (err)\n+\t\tPMD_INIT_LOG(ERR, \"ice_copy_and_init_hw failed: %d\", err);\n+\n+ret:\n+\trte_free(pkg_buf);\n+\treturn err;\n+}\n+\n+int\n+ice_dcf_init_parent_adapter(struct rte_eth_dev *eth_dev)\n+{\n+\tstruct ice_dcf_adapter *adapter = eth_dev->data->dev_private;\n+\tstruct ice_adapter *parent_adapter = &adapter->parent;\n+\tstruct ice_hw *parent_hw = &parent_adapter->hw;\n+\tstruct ice_dcf_hw *hw = &adapter->real_hw;\n+\tconst struct rte_ether_addr *mac;\n+\tint err;\n+\n+\tparent_adapter->eth_dev = eth_dev;\n+\tparent_adapter->pf.adapter = parent_adapter;\n+\tparent_adapter->pf.dev_data = eth_dev->data;\n+\tparent_hw->back = parent_adapter;\n+\tparent_hw->mac_type = ICE_MAC_GENERIC;\n+\tparent_hw->vendor_id = ICE_INTEL_VENDOR_ID;\n+\n+\tice_init_lock(&parent_hw->adminq.sq_lock);\n+\tice_init_lock(&parent_hw->adminq.rq_lock);\n+\tparent_hw->aq_send_cmd_fn = ice_dcf_send_aq_cmd;\n+\tparent_hw->aq_send_cmd_param = &adapter->real_hw;\n+\tparent_hw->dcf_enabled = true;\n+\n+\terr = ice_dcf_init_parent_hw(parent_hw);\n+\tif (err) {\n+\t\tPMD_INIT_LOG(ERR, \"failed to init the DCF parent hardware with error %d\",\n+\t\t\t     err);\n+\t\treturn err;\n+\t}\n+\n+\terr = ice_dcf_load_pkg(parent_hw);\n+\tif (err) {\n+\t\tPMD_INIT_LOG(ERR, \"failed to load package with error %d\",\n+\t\t\t     err);\n+\t\tgoto uninit_hw;\n+\t}\n+\tparent_adapter->active_pkg_type = ice_load_pkg_type(parent_hw);\n+\n+\tmac = (const struct rte_ether_addr *)hw->avf.mac.addr;\n+\tif (rte_is_valid_assigned_ether_addr(mac))\n+\t\trte_ether_addr_copy(mac, &parent_adapter->pf.dev_addr);\n+\telse\n+\t\trte_eth_random_addr(parent_adapter->pf.dev_addr.addr_bytes);\n+\n+\teth_dev->data->mac_addrs = &parent_adapter->pf.dev_addr;\n+\n+\treturn 0;\n+\n+uninit_hw:\n+\tice_dcf_uninit_parent_hw(parent_hw);\n+\treturn err;\n+}\n+\n+void\n+ice_dcf_uninit_parent_adapter(struct rte_eth_dev *eth_dev)\n+{\n+\tstruct ice_dcf_adapter *adapter = eth_dev->data->dev_private;\n+\tstruct ice_adapter *parent_adapter = &adapter->parent;\n+\tstruct ice_hw *parent_hw = &parent_adapter->hw;\n+\n+\teth_dev->data->mac_addrs = NULL;\n+\n+\tice_dcf_uninit_parent_hw(parent_hw);\n+}\ndiff --git a/drivers/net/ice/meson.build b/drivers/net/ice/meson.build\nindex 0ba9668d1..7e9037f3b 100644\n--- a/drivers/net/ice/meson.build\n+++ b/drivers/net/ice/meson.build\n@@ -38,6 +38,7 @@ if arch_subdir == 'x86'\n endif\n \n sources += files('ice_dcf.c',\n-\t\t 'ice_dcf_ethdev.c')\n+\t\t 'ice_dcf_ethdev.c',\n+\t\t 'ice_dcf_parent.c')\n \n install_headers('rte_pmd_ice.h')\n",
    "prefixes": [
        "v2",
        "6/7"
    ]
}