get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 123099,
    "url": "http://patches.dpdk.org/api/patches/123099/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20230206054618.40975-2-beilei.xing@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": "<20230206054618.40975-2-beilei.xing@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20230206054618.40975-2-beilei.xing@intel.com",
    "date": "2023-02-06T05:46:00",
    "name": "[v7,01/19] common/idpf: add adapter structure",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "c147672ee725365b4d984312babdeccd63629e1f",
    "submitter": {
        "id": 410,
        "url": "http://patches.dpdk.org/api/people/410/?format=api",
        "name": "Xing, Beilei",
        "email": "beilei.xing@intel.com"
    },
    "delegate": {
        "id": 1540,
        "url": "http://patches.dpdk.org/api/users/1540/?format=api",
        "username": "qzhan15",
        "first_name": "Qi",
        "last_name": "Zhang",
        "email": "qi.z.zhang@intel.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20230206054618.40975-2-beilei.xing@intel.com/mbox/",
    "series": [
        {
            "id": 26809,
            "url": "http://patches.dpdk.org/api/series/26809/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=26809",
            "date": "2023-02-06T05:45:59",
            "name": "net/idpf: introduce idpf common modle",
            "version": 7,
            "mbox": "http://patches.dpdk.org/series/26809/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/123099/comments/",
    "check": "warning",
    "checks": "http://patches.dpdk.org/api/patches/123099/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 3E88341BE7;\n\tMon,  6 Feb 2023 07:13:15 +0100 (CET)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 8015B42BD9;\n\tMon,  6 Feb 2023 07:13:11 +0100 (CET)",
            "from mga12.intel.com (mga12.intel.com [192.55.52.136])\n by mails.dpdk.org (Postfix) with ESMTP id D92CB40A7D\n for <dev@dpdk.org>; Mon,  6 Feb 2023 07:13:08 +0100 (CET)",
            "from fmsmga003.fm.intel.com ([10.253.24.29])\n by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 05 Feb 2023 22:13:08 -0800",
            "from dpdk-beileix-3.sh.intel.com ([10.67.110.253])\n by FMSMGA003.fm.intel.com with ESMTP; 05 Feb 2023 22:13:06 -0800"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple;\n d=intel.com; i=@intel.com; q=dns/txt; s=Intel;\n t=1675663989; x=1707199989;\n h=from:to:cc:subject:date:message-id:in-reply-to:\n references:mime-version:content-transfer-encoding;\n bh=Sq9FMjSF+7Oh0kjWIUjZsCAOjsCXbTa55X4JPVad4o0=;\n b=DUxVP6oImo1JRdulzOJqFqLu6T2JiIIoQgf4qTd09hgfAsgJQv1DeJhC\n nXSxQrt3UFbjvrqh8va3xMd4ypYsxLOpmhvnF2U6PiZPOSTIPvUMZh6+n\n n2jwdKEHaur1O2dYVvIYdTyhddvDDpRuu96z5FkEUKx51GwCMkonsPRiM\n ayEh2Tey5VQIOi2JRWscqmzGx72Fy49pu8hu5jEcilE+OuD6tZoVV+SUa\n B8Hwo7ccxRvtLd6NCW10gkGLuyfYhyejDr+WBr1CajaiCdmfSyibFyqkC\n 6b4zAkiLy+GFrPJQ1ZEdeZ32PxtlMSLWhSL0cpaTsnJSuqsTDKPmOXyeN g==;",
        "X-IronPort-AV": [
            "E=McAfee;i=\"6500,9779,10612\"; a=\"308780477\"",
            "E=Sophos;i=\"5.97,276,1669104000\"; d=\"scan'208\";a=\"308780477\"",
            "E=McAfee;i=\"6500,9779,10612\"; a=\"755142869\"",
            "E=Sophos;i=\"5.97,276,1669104000\"; d=\"scan'208\";a=\"755142869\""
        ],
        "X-ExtLoop1": "1",
        "From": "beilei.xing@intel.com",
        "To": "jingjing.wu@intel.com",
        "Cc": "dev@dpdk.org, qi.z.zhang@intel.com, Beilei Xing <beilei.xing@intel.com>,\n Wenjun Wu <wenjun1.wu@intel.com>",
        "Subject": "[PATCH v7 01/19] common/idpf: add adapter structure",
        "Date": "Mon,  6 Feb 2023 05:46:00 +0000",
        "Message-Id": "<20230206054618.40975-2-beilei.xing@intel.com>",
        "X-Mailer": "git-send-email 2.26.2",
        "In-Reply-To": "<20230206054618.40975-1-beilei.xing@intel.com>",
        "References": "<20230203094340.8103-1-beilei.xing@intel.com>\n <20230206054618.40975-1-beilei.xing@intel.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "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": "From: Beilei Xing <beilei.xing@intel.com>\n\nAdd structure idpf_adapter in common module, the structure includes\nsome basic fields.\nIntroduce structure idpf_adapter_ext in PMD, this structure includes\nextra fields except idpf_adapter.\n\nSigned-off-by: Wenjun Wu <wenjun1.wu@intel.com>\nSigned-off-by: Beilei Xing <beilei.xing@intel.com>\n---\n drivers/common/idpf/idpf_common_device.h | 20 ++++++\n drivers/net/idpf/idpf_ethdev.c           | 91 ++++++++++--------------\n drivers/net/idpf/idpf_ethdev.h           | 25 +++----\n drivers/net/idpf/idpf_rxtx.c             | 16 ++---\n drivers/net/idpf/idpf_rxtx.h             |  4 +-\n drivers/net/idpf/idpf_rxtx_vec_avx512.c  |  3 +-\n drivers/net/idpf/idpf_vchnl.c            | 30 ++++----\n 7 files changed, 99 insertions(+), 90 deletions(-)\n create mode 100644 drivers/common/idpf/idpf_common_device.h",
    "diff": "diff --git a/drivers/common/idpf/idpf_common_device.h b/drivers/common/idpf/idpf_common_device.h\nnew file mode 100644\nindex 0000000000..358e68cb8c\n--- /dev/null\n+++ b/drivers/common/idpf/idpf_common_device.h\n@@ -0,0 +1,20 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright(c) 2023 Intel Corporation\n+ */\n+\n+#ifndef _IDPF_COMMON_DEVICE_H_\n+#define _IDPF_COMMON_DEVICE_H_\n+\n+#include <base/idpf_prototype.h>\n+#include <base/virtchnl2.h>\n+\n+struct idpf_adapter {\n+\tstruct idpf_hw hw;\n+\tstruct virtchnl2_version_info virtchnl_version;\n+\tstruct virtchnl2_get_capabilities caps;\n+\tvolatile uint32_t pend_cmd; /* pending command not finished */\n+\tuint32_t cmd_retval; /* return value of the cmd response from cp */\n+\tuint8_t *mbx_resp; /* buffer to store the mailbox response from cp */\n+};\n+\n+#endif /* _IDPF_COMMON_DEVICE_H_ */\ndiff --git a/drivers/net/idpf/idpf_ethdev.c b/drivers/net/idpf/idpf_ethdev.c\nindex 3f1b77144c..1b13d081a7 100644\n--- a/drivers/net/idpf/idpf_ethdev.c\n+++ b/drivers/net/idpf/idpf_ethdev.c\n@@ -53,8 +53,8 @@ idpf_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)\n \tstruct idpf_vport *vport = dev->data->dev_private;\n \tstruct idpf_adapter *adapter = vport->adapter;\n \n-\tdev_info->max_rx_queues = adapter->caps->max_rx_q;\n-\tdev_info->max_tx_queues = adapter->caps->max_tx_q;\n+\tdev_info->max_rx_queues = adapter->caps.max_rx_q;\n+\tdev_info->max_tx_queues = adapter->caps.max_tx_q;\n \tdev_info->min_rx_bufsize = IDPF_MIN_BUF_SIZE;\n \tdev_info->max_rx_pktlen = vport->max_mtu + IDPF_ETH_OVERHEAD;\n \n@@ -147,7 +147,7 @@ idpf_init_vport_req_info(struct rte_eth_dev *dev,\n \t\t\t struct virtchnl2_create_vport *vport_info)\n {\n \tstruct idpf_vport *vport = dev->data->dev_private;\n-\tstruct idpf_adapter *adapter = vport->adapter;\n+\tstruct idpf_adapter_ext *adapter = IDPF_ADAPTER_TO_EXT(vport->adapter);\n \n \tvport_info->vport_type = rte_cpu_to_le_16(VIRTCHNL2_VPORT_TYPE_DEFAULT);\n \tif (adapter->txq_model == 0) {\n@@ -379,7 +379,7 @@ idpf_dev_configure(struct rte_eth_dev *dev)\n \t\treturn -ENOTSUP;\n \t}\n \n-\tif (adapter->caps->rss_caps != 0 && dev->data->nb_rx_queues != 0) {\n+\tif (adapter->caps.rss_caps != 0 && dev->data->nb_rx_queues != 0) {\n \t\tret = idpf_init_rss(vport);\n \t\tif (ret != 0) {\n \t\t\tPMD_INIT_LOG(ERR, \"Failed to init rss\");\n@@ -420,7 +420,7 @@ idpf_config_rx_queues_irqs(struct rte_eth_dev *dev)\n \n \t/* Rx interrupt disabled, Map interrupt only for writeback */\n \n-\t/* The capability flags adapter->caps->other_caps should be\n+\t/* The capability flags adapter->caps.other_caps should be\n \t * compared with bit VIRTCHNL2_CAP_WB_ON_ITR here. The if\n \t * condition should be updated when the FW can return the\n \t * correct flag bits.\n@@ -518,9 +518,9 @@ static int\n idpf_dev_start(struct rte_eth_dev *dev)\n {\n \tstruct idpf_vport *vport = dev->data->dev_private;\n-\tstruct idpf_adapter *adapter = vport->adapter;\n-\tuint16_t num_allocated_vectors =\n-\t\tadapter->caps->num_allocated_vectors;\n+\tstruct idpf_adapter *base = vport->adapter;\n+\tstruct idpf_adapter_ext *adapter = IDPF_ADAPTER_TO_EXT(base);\n+\tuint16_t num_allocated_vectors = base->caps.num_allocated_vectors;\n \tuint16_t req_vecs_num;\n \tint ret;\n \n@@ -596,7 +596,7 @@ static int\n idpf_dev_close(struct rte_eth_dev *dev)\n {\n \tstruct idpf_vport *vport = dev->data->dev_private;\n-\tstruct idpf_adapter *adapter = vport->adapter;\n+\tstruct idpf_adapter_ext *adapter = IDPF_ADAPTER_TO_EXT(vport->adapter);\n \n \tidpf_dev_stop(dev);\n \n@@ -728,7 +728,7 @@ parse_bool(const char *key, const char *value, void *args)\n }\n \n static int\n-idpf_parse_devargs(struct rte_pci_device *pci_dev, struct idpf_adapter *adapter,\n+idpf_parse_devargs(struct rte_pci_device *pci_dev, struct idpf_adapter_ext *adapter,\n \t\t   struct idpf_devargs *idpf_args)\n {\n \tstruct rte_devargs *devargs = pci_dev->device.devargs;\n@@ -875,14 +875,14 @@ idpf_init_mbx(struct idpf_hw *hw)\n }\n \n static int\n-idpf_adapter_init(struct rte_pci_device *pci_dev, struct idpf_adapter *adapter)\n+idpf_adapter_init(struct rte_pci_device *pci_dev, struct idpf_adapter_ext *adapter)\n {\n-\tstruct idpf_hw *hw = &adapter->hw;\n+\tstruct idpf_hw *hw = &adapter->base.hw;\n \tint ret = 0;\n \n \thw->hw_addr = (void *)pci_dev->mem_resource[0].addr;\n \thw->hw_addr_len = pci_dev->mem_resource[0].len;\n-\thw->back = adapter;\n+\thw->back = &adapter->base;\n \thw->vendor_id = pci_dev->id.vendor_id;\n \thw->device_id = pci_dev->id.device_id;\n \thw->subsystem_vendor_id = pci_dev->id.subsystem_vendor_id;\n@@ -902,15 +902,15 @@ idpf_adapter_init(struct rte_pci_device *pci_dev, struct idpf_adapter *adapter)\n \t\tgoto err;\n \t}\n \n-\tadapter->mbx_resp = rte_zmalloc(\"idpf_adapter_mbx_resp\",\n-\t\t\t\t\tIDPF_DFLT_MBX_BUF_SIZE, 0);\n-\tif (adapter->mbx_resp == NULL) {\n+\tadapter->base.mbx_resp = rte_zmalloc(\"idpf_adapter_mbx_resp\",\n+\t\t\t\t\t     IDPF_DFLT_MBX_BUF_SIZE, 0);\n+\tif (adapter->base.mbx_resp == NULL) {\n \t\tPMD_INIT_LOG(ERR, \"Failed to allocate idpf_adapter_mbx_resp memory\");\n \t\tret = -ENOMEM;\n \t\tgoto err_mbx;\n \t}\n \n-\tret = idpf_vc_check_api_version(adapter);\n+\tret = idpf_vc_check_api_version(&adapter->base);\n \tif (ret != 0) {\n \t\tPMD_INIT_LOG(ERR, \"Failed to check api version\");\n \t\tgoto err_api;\n@@ -922,21 +922,13 @@ idpf_adapter_init(struct rte_pci_device *pci_dev, struct idpf_adapter *adapter)\n \t\tgoto err_api;\n \t}\n \n-\tadapter->caps = rte_zmalloc(\"idpf_caps\",\n-\t\t\t\tsizeof(struct virtchnl2_get_capabilities), 0);\n-\tif (adapter->caps == NULL) {\n-\t\tPMD_INIT_LOG(ERR, \"Failed to allocate idpf_caps memory\");\n-\t\tret = -ENOMEM;\n-\t\tgoto err_api;\n-\t}\n-\n-\tret = idpf_vc_get_caps(adapter);\n+\tret = idpf_vc_get_caps(&adapter->base);\n \tif (ret != 0) {\n \t\tPMD_INIT_LOG(ERR, \"Failed to get capabilities\");\n-\t\tgoto err_caps;\n+\t\tgoto err_api;\n \t}\n \n-\tadapter->max_vport_nb = adapter->caps->max_vports;\n+\tadapter->max_vport_nb = adapter->base.caps.max_vports;\n \n \tadapter->vports = rte_zmalloc(\"vports\",\n \t\t\t\t      adapter->max_vport_nb *\n@@ -945,7 +937,7 @@ idpf_adapter_init(struct rte_pci_device *pci_dev, struct idpf_adapter *adapter)\n \tif (adapter->vports == NULL) {\n \t\tPMD_INIT_LOG(ERR, \"Failed to allocate vports memory\");\n \t\tret = -ENOMEM;\n-\t\tgoto err_vports;\n+\t\tgoto err_api;\n \t}\n \n \tadapter->max_rxq_per_msg = (IDPF_DFLT_MBX_BUF_SIZE -\n@@ -962,13 +954,9 @@ idpf_adapter_init(struct rte_pci_device *pci_dev, struct idpf_adapter *adapter)\n \n \treturn ret;\n \n-err_vports:\n-err_caps:\n-\trte_free(adapter->caps);\n-\tadapter->caps = NULL;\n err_api:\n-\trte_free(adapter->mbx_resp);\n-\tadapter->mbx_resp = NULL;\n+\trte_free(adapter->base.mbx_resp);\n+\tadapter->base.mbx_resp = NULL;\n err_mbx:\n \tidpf_ctlq_deinit(hw);\n err:\n@@ -995,7 +983,7 @@ static const struct eth_dev_ops idpf_eth_dev_ops = {\n };\n \n static uint16_t\n-idpf_vport_idx_alloc(struct idpf_adapter *ad)\n+idpf_vport_idx_alloc(struct idpf_adapter_ext *ad)\n {\n \tuint16_t vport_idx;\n \tuint16_t i;\n@@ -1018,13 +1006,13 @@ idpf_dev_vport_init(struct rte_eth_dev *dev, void *init_params)\n {\n \tstruct idpf_vport *vport = dev->data->dev_private;\n \tstruct idpf_vport_param *param = init_params;\n-\tstruct idpf_adapter *adapter = param->adapter;\n+\tstruct idpf_adapter_ext *adapter = param->adapter;\n \t/* for sending create vport virtchnl msg prepare */\n \tstruct virtchnl2_create_vport vport_req_info;\n \tint ret = 0;\n \n \tdev->dev_ops = &idpf_eth_dev_ops;\n-\tvport->adapter = adapter;\n+\tvport->adapter = &adapter->base;\n \tvport->sw_idx = param->idx;\n \tvport->devarg_id = param->devarg_id;\n \n@@ -1085,10 +1073,10 @@ static const struct rte_pci_id pci_id_idpf_map[] = {\n \t{ .vendor_id = 0, /* sentinel */ },\n };\n \n-struct idpf_adapter *\n-idpf_find_adapter(struct rte_pci_device *pci_dev)\n+struct idpf_adapter_ext *\n+idpf_find_adapter_ext(struct rte_pci_device *pci_dev)\n {\n-\tstruct idpf_adapter *adapter;\n+\tstruct idpf_adapter_ext *adapter;\n \tint found = 0;\n \n \tif (pci_dev == NULL)\n@@ -1110,17 +1098,14 @@ idpf_find_adapter(struct rte_pci_device *pci_dev)\n }\n \n static void\n-idpf_adapter_rel(struct idpf_adapter *adapter)\n+idpf_adapter_rel(struct idpf_adapter_ext *adapter)\n {\n-\tstruct idpf_hw *hw = &adapter->hw;\n+\tstruct idpf_hw *hw = &adapter->base.hw;\n \n \tidpf_ctlq_deinit(hw);\n \n-\trte_free(adapter->caps);\n-\tadapter->caps = NULL;\n-\n-\trte_free(adapter->mbx_resp);\n-\tadapter->mbx_resp = NULL;\n+\trte_free(adapter->base.mbx_resp);\n+\tadapter->base.mbx_resp = NULL;\n \n \trte_free(adapter->vports);\n \tadapter->vports = NULL;\n@@ -1131,7 +1116,7 @@ idpf_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,\n \t       struct rte_pci_device *pci_dev)\n {\n \tstruct idpf_vport_param vport_param;\n-\tstruct idpf_adapter *adapter;\n+\tstruct idpf_adapter_ext *adapter;\n \tstruct idpf_devargs devargs;\n \tchar name[RTE_ETH_NAME_MAX_LEN];\n \tint i, retval;\n@@ -1143,11 +1128,11 @@ idpf_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,\n \t\tidpf_adapter_list_init = true;\n \t}\n \n-\tadapter = idpf_find_adapter(pci_dev);\n+\tadapter = idpf_find_adapter_ext(pci_dev);\n \tif (adapter == NULL) {\n \t\tfirst_probe = true;\n-\t\tadapter = rte_zmalloc(\"idpf_adapter\",\n-\t\t\t\t\t\tsizeof(struct idpf_adapter), 0);\n+\t\tadapter = rte_zmalloc(\"idpf_adapter_ext\",\n+\t\t\t\t      sizeof(struct idpf_adapter_ext), 0);\n \t\tif (adapter == NULL) {\n \t\t\tPMD_INIT_LOG(ERR, \"Failed to allocate adapter.\");\n \t\t\treturn -ENOMEM;\n@@ -1225,7 +1210,7 @@ idpf_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,\n static int\n idpf_pci_remove(struct rte_pci_device *pci_dev)\n {\n-\tstruct idpf_adapter *adapter = idpf_find_adapter(pci_dev);\n+\tstruct idpf_adapter_ext *adapter = idpf_find_adapter_ext(pci_dev);\n \tuint16_t port_id;\n \n \t/* Ethdev created can be found RTE_ETH_FOREACH_DEV_OF through rte_device */\ndiff --git a/drivers/net/idpf/idpf_ethdev.h b/drivers/net/idpf/idpf_ethdev.h\nindex b0746e5041..e956fa989c 100644\n--- a/drivers/net/idpf/idpf_ethdev.h\n+++ b/drivers/net/idpf/idpf_ethdev.h\n@@ -15,6 +15,7 @@\n \n #include \"idpf_logs.h\"\n \n+#include <idpf_common_device.h>\n #include <base/idpf_prototype.h>\n #include <base/virtchnl2.h>\n \n@@ -91,7 +92,7 @@ struct idpf_chunks_info {\n };\n \n struct idpf_vport_param {\n-\tstruct idpf_adapter *adapter;\n+\tstruct idpf_adapter_ext *adapter;\n \tuint16_t devarg_id; /* arg id from user */\n \tuint16_t idx;       /* index in adapter->vports[]*/\n };\n@@ -144,17 +145,11 @@ struct idpf_devargs {\n \tuint16_t req_vport_nb;\n };\n \n-struct idpf_adapter {\n-\tTAILQ_ENTRY(idpf_adapter) next;\n-\tstruct idpf_hw hw;\n-\tchar name[IDPF_ADAPTER_NAME_LEN];\n-\n-\tstruct virtchnl2_version_info virtchnl_version;\n-\tstruct virtchnl2_get_capabilities *caps;\n+struct idpf_adapter_ext {\n+\tTAILQ_ENTRY(idpf_adapter_ext) next;\n+\tstruct idpf_adapter base;\n \n-\tvolatile uint32_t pend_cmd; /* pending command not finished */\n-\tuint32_t cmd_retval; /* return value of the cmd response from ipf */\n-\tuint8_t *mbx_resp; /* buffer to store the mailbox response from ipf */\n+\tchar name[IDPF_ADAPTER_NAME_LEN];\n \n \tuint32_t txq_model; /* 0 - split queue model, non-0 - single queue model */\n \tuint32_t rxq_model; /* 0 - split queue model, non-0 - single queue model */\n@@ -182,10 +177,12 @@ struct idpf_adapter {\n \tuint64_t time_hw;\n };\n \n-TAILQ_HEAD(idpf_adapter_list, idpf_adapter);\n+TAILQ_HEAD(idpf_adapter_list, idpf_adapter_ext);\n \n #define IDPF_DEV_TO_PCI(eth_dev)\t\t\\\n \tRTE_DEV_TO_PCI((eth_dev)->device)\n+#define IDPF_ADAPTER_TO_EXT(p)\t\t\t\t\t\\\n+\tcontainer_of((p), struct idpf_adapter_ext, base)\n \n /* structure used for sending and checking response of virtchnl ops */\n struct idpf_cmd_info {\n@@ -234,10 +231,10 @@ atomic_set_cmd(struct idpf_adapter *adapter, uint32_t ops)\n \treturn !ret;\n }\n \n-struct idpf_adapter *idpf_find_adapter(struct rte_pci_device *pci_dev);\n+struct idpf_adapter_ext *idpf_find_adapter_ext(struct rte_pci_device *pci_dev);\n void idpf_handle_virtchnl_msg(struct rte_eth_dev *dev);\n int idpf_vc_check_api_version(struct idpf_adapter *adapter);\n-int idpf_get_pkt_type(struct idpf_adapter *adapter);\n+int idpf_get_pkt_type(struct idpf_adapter_ext *adapter);\n int idpf_vc_get_caps(struct idpf_adapter *adapter);\n int idpf_vc_create_vport(struct idpf_vport *vport,\n \t\t\t struct virtchnl2_create_vport *vport_info);\ndiff --git a/drivers/net/idpf/idpf_rxtx.c b/drivers/net/idpf/idpf_rxtx.c\nindex 5aef8ba2b6..4845f2ea0a 100644\n--- a/drivers/net/idpf/idpf_rxtx.c\n+++ b/drivers/net/idpf/idpf_rxtx.c\n@@ -1384,7 +1384,7 @@ idpf_splitq_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,\n \tstruct idpf_rx_queue *rxq;\n \tconst uint32_t *ptype_tbl;\n \tuint8_t status_err0_qw1;\n-\tstruct idpf_adapter *ad;\n+\tstruct idpf_adapter_ext *ad;\n \tstruct rte_mbuf *rxm;\n \tuint16_t rx_id_bufq1;\n \tuint16_t rx_id_bufq2;\n@@ -1398,7 +1398,7 @@ idpf_splitq_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,\n \n \tnb_rx = 0;\n \trxq = rx_queue;\n-\tad = rxq->adapter;\n+\tad = IDPF_ADAPTER_TO_EXT(rxq->adapter);\n \n \tif (unlikely(rxq == NULL) || unlikely(!rxq->q_started))\n \t\treturn nb_rx;\n@@ -1407,7 +1407,7 @@ idpf_splitq_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,\n \trx_id_bufq1 = rxq->bufq1->rx_next_avail;\n \trx_id_bufq2 = rxq->bufq2->rx_next_avail;\n \trx_desc_ring = rxq->rx_ring;\n-\tptype_tbl = rxq->adapter->ptype_tbl;\n+\tptype_tbl = ad->ptype_tbl;\n \n \tif ((rxq->offloads & RTE_ETH_RX_OFFLOAD_TIMESTAMP) != 0)\n \t\trxq->hw_register_set = 1;\n@@ -1791,7 +1791,7 @@ idpf_singleq_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,\n \tconst uint32_t *ptype_tbl;\n \tuint16_t rx_id, nb_hold;\n \tstruct rte_eth_dev *dev;\n-\tstruct idpf_adapter *ad;\n+\tstruct idpf_adapter_ext *ad;\n \tuint16_t rx_packet_len;\n \tstruct rte_mbuf *rxm;\n \tstruct rte_mbuf *nmb;\n@@ -1805,14 +1805,14 @@ idpf_singleq_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,\n \tnb_hold = 0;\n \trxq = rx_queue;\n \n-\tad = rxq->adapter;\n+\tad = IDPF_ADAPTER_TO_EXT(rxq->adapter);\n \n \tif (unlikely(rxq == NULL) || unlikely(!rxq->q_started))\n \t\treturn nb_rx;\n \n \trx_id = rxq->rx_tail;\n \trx_ring = rxq->rx_ring;\n-\tptype_tbl = rxq->adapter->ptype_tbl;\n+\tptype_tbl = ad->ptype_tbl;\n \n \tif ((rxq->offloads & RTE_ETH_RX_OFFLOAD_TIMESTAMP) != 0)\n \t\trxq->hw_register_set = 1;\n@@ -2221,7 +2221,7 @@ idpf_set_rx_function(struct rte_eth_dev *dev)\n {\n \tstruct idpf_vport *vport = dev->data->dev_private;\n #ifdef RTE_ARCH_X86\n-\tstruct idpf_adapter *ad = vport->adapter;\n+\tstruct idpf_adapter_ext *ad = IDPF_ADAPTER_TO_EXT(vport->adapter);\n \tstruct idpf_rx_queue *rxq;\n \tint i;\n \n@@ -2275,7 +2275,7 @@ idpf_set_tx_function(struct rte_eth_dev *dev)\n {\n \tstruct idpf_vport *vport = dev->data->dev_private;\n #ifdef RTE_ARCH_X86\n-\tstruct idpf_adapter *ad = vport->adapter;\n+\tstruct idpf_adapter_ext *ad = IDPF_ADAPTER_TO_EXT(vport->adapter);\n #ifdef CC_AVX512_SUPPORT\n \tstruct idpf_tx_queue *txq;\n \tint i;\ndiff --git a/drivers/net/idpf/idpf_rxtx.h b/drivers/net/idpf/idpf_rxtx.h\nindex 730dc64ebc..047fc03614 100644\n--- a/drivers/net/idpf/idpf_rxtx.h\n+++ b/drivers/net/idpf/idpf_rxtx.h\n@@ -247,11 +247,11 @@ void idpf_set_tx_function(struct rte_eth_dev *dev);\n /* Helper function to convert a 32b nanoseconds timestamp to 64b. */\n static inline uint64_t\n \n-idpf_tstamp_convert_32b_64b(struct idpf_adapter *ad, uint32_t flag,\n+idpf_tstamp_convert_32b_64b(struct idpf_adapter_ext *ad, uint32_t flag,\n \t\t\t    uint32_t in_timestamp)\n {\n #ifdef RTE_ARCH_X86_64\n-\tstruct idpf_hw *hw = &ad->hw;\n+\tstruct idpf_hw *hw = &ad->base.hw;\n \tconst uint64_t mask = 0xFFFFFFFF;\n \tuint32_t hi, lo, lo2, delta;\n \tuint64_t ns;\ndiff --git a/drivers/net/idpf/idpf_rxtx_vec_avx512.c b/drivers/net/idpf/idpf_rxtx_vec_avx512.c\nindex fb2b6bb53c..efa7cd2187 100644\n--- a/drivers/net/idpf/idpf_rxtx_vec_avx512.c\n+++ b/drivers/net/idpf/idpf_rxtx_vec_avx512.c\n@@ -245,7 +245,8 @@ _idpf_singleq_recv_raw_pkts_avx512(struct idpf_rx_queue *rxq,\n \t\t\t\t   struct rte_mbuf **rx_pkts,\n \t\t\t\t   uint16_t nb_pkts)\n {\n-\tconst uint32_t *type_table = rxq->adapter->ptype_tbl;\n+\tstruct idpf_adapter_ext *adapter = IDPF_ADAPTER_TO_EXT(rxq->adapter);\n+\tconst uint32_t *type_table = adapter->ptype_tbl;\n \n \tconst __m256i mbuf_init = _mm256_set_epi64x(0, 0, 0,\n \t\t\t\t\t\t    rxq->mbuf_initializer);\ndiff --git a/drivers/net/idpf/idpf_vchnl.c b/drivers/net/idpf/idpf_vchnl.c\nindex 14b34619af..ca481bb915 100644\n--- a/drivers/net/idpf/idpf_vchnl.c\n+++ b/drivers/net/idpf/idpf_vchnl.c\n@@ -311,13 +311,17 @@ idpf_vc_check_api_version(struct idpf_adapter *adapter)\n }\n \n int __rte_cold\n-idpf_get_pkt_type(struct idpf_adapter *adapter)\n+idpf_get_pkt_type(struct idpf_adapter_ext *adapter)\n {\n \tstruct virtchnl2_get_ptype_info *ptype_info;\n-\tuint16_t ptype_recvd = 0, ptype_offset, i, j;\n+\tstruct idpf_adapter *base;\n+\tuint16_t ptype_offset, i, j;\n+\tuint16_t ptype_recvd = 0;\n \tint ret;\n \n-\tret = idpf_vc_query_ptype_info(adapter);\n+\tbase = &adapter->base;\n+\n+\tret = idpf_vc_query_ptype_info(base);\n \tif (ret != 0) {\n \t\tPMD_DRV_LOG(ERR, \"Fail to query packet type information\");\n \t\treturn ret;\n@@ -328,7 +332,7 @@ idpf_get_pkt_type(struct idpf_adapter *adapter)\n \t\t\treturn -ENOMEM;\n \n \twhile (ptype_recvd < IDPF_MAX_PKT_TYPE) {\n-\t\tret = idpf_read_one_msg(adapter, VIRTCHNL2_OP_GET_PTYPE_INFO,\n+\t\tret = idpf_read_one_msg(base, VIRTCHNL2_OP_GET_PTYPE_INFO,\n \t\t\t\t\tIDPF_DFLT_MBX_BUF_SIZE, (u8 *)ptype_info);\n \t\tif (ret != 0) {\n \t\t\tPMD_DRV_LOG(ERR, \"Fail to get packet type information\");\n@@ -515,7 +519,7 @@ idpf_get_pkt_type(struct idpf_adapter *adapter)\n \n free_ptype_info:\n \trte_free(ptype_info);\n-\tclear_cmd(adapter);\n+\tclear_cmd(base);\n \treturn ret;\n }\n \n@@ -577,7 +581,7 @@ idpf_vc_get_caps(struct idpf_adapter *adapter)\n \t\treturn err;\n \t}\n \n-\trte_memcpy(adapter->caps, args.out_buffer, sizeof(caps_msg));\n+\trte_memcpy(&adapter->caps, args.out_buffer, sizeof(caps_msg));\n \n \treturn 0;\n }\n@@ -740,7 +744,8 @@ idpf_vc_set_rss_hash(struct idpf_vport *vport)\n int\n idpf_vc_config_rxqs(struct idpf_vport *vport)\n {\n-\tstruct idpf_adapter *adapter = vport->adapter;\n+\tstruct idpf_adapter *base = vport->adapter;\n+\tstruct idpf_adapter_ext *adapter = IDPF_ADAPTER_TO_EXT(base);\n \tstruct idpf_rx_queue **rxq =\n \t\t(struct idpf_rx_queue **)vport->dev_data->rx_queues;\n \tstruct virtchnl2_config_rx_queues *vc_rxqs = NULL;\n@@ -832,10 +837,10 @@ idpf_vc_config_rxqs(struct idpf_vport *vport)\n \t\targs.ops = VIRTCHNL2_OP_CONFIG_RX_QUEUES;\n \t\targs.in_args = (uint8_t *)vc_rxqs;\n \t\targs.in_args_size = size;\n-\t\targs.out_buffer = adapter->mbx_resp;\n+\t\targs.out_buffer = base->mbx_resp;\n \t\targs.out_size = IDPF_DFLT_MBX_BUF_SIZE;\n \n-\t\terr = idpf_execute_vc_cmd(adapter, &args);\n+\t\terr = idpf_execute_vc_cmd(base, &args);\n \t\trte_free(vc_rxqs);\n \t\tif (err != 0) {\n \t\t\tPMD_DRV_LOG(ERR, \"Failed to execute command of VIRTCHNL2_OP_CONFIG_RX_QUEUES\");\n@@ -940,7 +945,8 @@ idpf_vc_config_rxq(struct idpf_vport *vport, uint16_t rxq_id)\n int\n idpf_vc_config_txqs(struct idpf_vport *vport)\n {\n-\tstruct idpf_adapter *adapter = vport->adapter;\n+\tstruct idpf_adapter *base = vport->adapter;\n+\tstruct idpf_adapter_ext *adapter = IDPF_ADAPTER_TO_EXT(base);\n \tstruct idpf_tx_queue **txq =\n \t\t(struct idpf_tx_queue **)vport->dev_data->tx_queues;\n \tstruct virtchnl2_config_tx_queues *vc_txqs = NULL;\n@@ -1010,10 +1016,10 @@ idpf_vc_config_txqs(struct idpf_vport *vport)\n \t\targs.ops = VIRTCHNL2_OP_CONFIG_TX_QUEUES;\n \t\targs.in_args = (uint8_t *)vc_txqs;\n \t\targs.in_args_size = size;\n-\t\targs.out_buffer = adapter->mbx_resp;\n+\t\targs.out_buffer = base->mbx_resp;\n \t\targs.out_size = IDPF_DFLT_MBX_BUF_SIZE;\n \n-\t\terr = idpf_execute_vc_cmd(adapter, &args);\n+\t\terr = idpf_execute_vc_cmd(base, &args);\n \t\trte_free(vc_txqs);\n \t\tif (err != 0) {\n \t\t\tPMD_DRV_LOG(ERR, \"Failed to execute command of VIRTCHNL2_OP_CONFIG_TX_QUEUES\");\n",
    "prefixes": [
        "v7",
        "01/19"
    ]
}