From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 2CFA6A0552; Thu, 20 Oct 2022 13:16:10 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 17E6E42D4A; Thu, 20 Oct 2022 13:16:10 +0200 (CEST) Received: from NAM02-SN1-obe.outbound.protection.outlook.com (mail-sn1anam02on2057.outbound.protection.outlook.com [40.107.96.57]) by mails.dpdk.org (Postfix) with ESMTP id 5B65242C80 for ; Thu, 20 Oct 2022 13:16:08 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=XXbzHnK4mRqTgFj6aCGWvCeo4f6o3Ux6eJzB5g0CvSt0EIFyTBTYP1VErKJz9XEdgwZkSoKUo5mcJ8EaMuFIQ9GFFa518u0WqnEreqAECbbWED7CY/rLaIdAL8ju7KNnr4cMIBuMImRpYOt+L3/Yrsr7b+xPdaWRapXUxZtzsnnrskqIKvsK64VvU4nr9tBGefj64jqMC7ll+ZxSShK0+Wu//GG0idNMajxwV4iMmS2w2PRouFijr/W/7hKLYV1oYyDCGPDn8v2CJMNdNSfjJA5l6Zj93iQG5R20pAgNCeid199vPANX2ZyDYYhT8/zUKZt3MJENCHpObJHxKqnhOQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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; bh=dVpdlcvmIEvyThLsNl8yhVsj+S2No+Uw5iQZftY3uwU=; b=odZjykmUnoyEZ+wu16JWoA12R7kDIAaDs7CL6WxmYdGkMO6v17WQlJ71sMM7932dP5TIipTmMNKL2zqzuTI9glNwDUlEp03qdKalIk7iZxApv7mL7xeyiUY4j9JZWVtHnx8MHAM6eKwGYFUJJk8ZPrRc5I4LVtogLy3oATAFwsby4bw63VAzbEvVlMqgf+w1/M2EQ5AMRT5zhQPepUqzZjbqsU4hZ7M7HjsIhnMdAdBBuV0WQt2e8oxxQg/2taf1ra3rvOptzFf40DqR5uk87HScV2/btFymc5HZiE/rTv0+GObZFQJJ6SgfoA6sDFHjevLlw2iHXE/BZaN2pyHrsw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=dVpdlcvmIEvyThLsNl8yhVsj+S2No+Uw5iQZftY3uwU=; b=gl3YUPHuN0hyI8HqGdmB/scUq5aGp/bl71uQC4PV1nQFhz0zxz4zcArsGiZTQdlaHOBjVaulXrdjyGCPqn9ORLrfHJyi6hEgY6rCYlwPyADLtuVtN+C7pq1ZajCjrSQbfPKPaqlVDtPzCKSEDofsW/+X2rnomFLPLvgUHpNG5xs= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=amd.com; Received: from DM6PR12MB4297.namprd12.prod.outlook.com (2603:10b6:5:211::20) by CH2PR12MB4040.namprd12.prod.outlook.com (2603:10b6:610:ac::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.35; Thu, 20 Oct 2022 11:16:04 +0000 Received: from DM6PR12MB4297.namprd12.prod.outlook.com ([fe80::b9fd:e732:4585:6b25]) by DM6PR12MB4297.namprd12.prod.outlook.com ([fe80::b9fd:e732:4585:6b25%7]) with mapi id 15.20.5723.033; Thu, 20 Oct 2022 11:16:04 +0000 Message-ID: Date: Thu, 20 Oct 2022 12:15:58 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.3.3 Subject: Re: [PATCH v5 3/8] net/gve: add support for device initialization Content-Language: en-US To: "Guo, Junfeng" , "Li, Xiaoyun" , "Zhang, Qi Z" , "Wu, Jingjing" Cc: "ferruh.yigit@xilinx.com" , "dev@dpdk.org" , "awogbemila@google.com" , "Richardson, Bruce" , "Lin, Xueqin" , "Wang, Haiyue" References: <20220927073255.1803892-2-junfeng.guo@intel.com> <20221010101757.878317-1-junfeng.guo@intel.com> <20221010101757.878317-4-junfeng.guo@intel.com> <718a5294-822e-40ec-bbe7-0f650c428ad9@amd.com> <64c15da3-d053-395c-ec7f-2b9d8628089e@amd.com> From: Ferruh Yigit In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-ClientProxiedBy: LO4P265CA0265.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:37c::17) To DM6PR12MB4297.namprd12.prod.outlook.com (2603:10b6:5:211::20) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM6PR12MB4297:EE_|CH2PR12MB4040:EE_ X-MS-Office365-Filtering-Correlation-Id: 6c57c989-df57-4111-3966-08dab28c7a01 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: +v7541LoaMI+v5yQHLBAzgc1S/9ozLz/AxDbWSnzM/MFLBbyM2ukCrWHc4X1UJ+EInvFt3wTm7YyGocMqLPk++6WV005ve8u9lVhyaCKxNaPRZEhurAh94sal3QQT7Ly4e5LzkbAqig+Mbj5FFcMOPzwapI/R9+y3pRjYaZ2Wns1CmbG1EdQMYkLVv903wEIAWKzQDg8pcLupSIuov9B4tvfGWTnf/VR9jVA3SBgf9We+aNAO7rwAlkLi5UscQq1ntxfGPdG2Hr6L69m7o+jPVcpTFVVqiv1e4wUz+1/y4UjyNqmWG1in0vtj5f6oy94p/Nin2v3MVeBll5m6nZobIkFADlgtfKU4M0c0pjircB4TVCVU4UHRue8XUtceXe0JrVsrCbzneNF9D6qPipIDK9FgCfP+HrshTbyCZRKxRmVzbZczatEnrlUjZa4l8kGQoaM11/tLVMPcQgNj3VCYtblpOJoRJIIbJkznvpFnxdOkd0TWQ2ARqijiP/xMlk30EYEr/g6R2XPNxJJc+Cqaxx8IVGWlzBZGwomJqY+ndnrO4IhH7NlqheyYtUC+63PbNK/vNVBF5PfBqHHz+zgvoAXFg1atN4QuA3z0CO2Ru+LJtNlXMSMEy2gBLxTnZ2U/K/zin3MpchU+oZkg7aIwl+3n/wvaRbx6OgTO1AuSyipMsxN9hCFUuCRKw+uQ8jNjMnpRzSUfTDgm3PYkYl0cQHsHw/B2aEqbuPvEO4XQxk0RVQMY16gHjeCDN5CC2RVlVA3i9wBt6nRLjZZOWAYBjIYD37A/PeJREK/bCR/DYo= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM6PR12MB4297.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(4636009)(136003)(39860400002)(396003)(346002)(376002)(366004)(451199015)(31686004)(2906002)(31696002)(41300700001)(66556008)(8936002)(86362001)(5660300002)(66476007)(44832011)(53546011)(6506007)(8676002)(6512007)(4326008)(26005)(316002)(54906003)(110136005)(66946007)(83380400001)(6666004)(38100700002)(36756003)(478600001)(6486002)(2616005)(186003)(43740500002)(45980500001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?SEdqQ0p0RmVJWXBadjhpZmdiUDhUSHFMWm1idFo0TmtUcS8rYTNPakJwZ1lZ?= =?utf-8?B?NWp4eDEvbDRZaGhGek8xd3orZlVnWi84UFBwWmpRdW1pTnhJUWYyNWtWODVN?= =?utf-8?B?Q1FGdE9pQlhQb3Y4QSsvRlRuK25RVEI5QTVqKytaZ1gvelJJazcxN2pVRUhF?= =?utf-8?B?WG0yM3lVbzI0clpaQnlQNSs5MTR4RGFBVSttdkxQNy90NTdGMS9EeU9zR1Zk?= =?utf-8?B?Q3FFam40enFDT2pNdTR6bEE0NVByaFdTczRPRkpHRERIbWNPZ1FkRTJXNDY4?= =?utf-8?B?NWZ4V2lyaXR6WGd2UmhDNGVsOXBMVWVZNnVtcDhxTFh3WlF3MWhSMDU5L1Vk?= =?utf-8?B?VmtpQlVKSGcwTFpiYWh4eTZFOWtjQ2Z6VkhSOVBQcVVsSFJFS1p2M0ZJbnRS?= =?utf-8?B?Yzl0cEFVV1lUNS9MWGtXdi9zc1luVFFFSHczQ2cwV1BCSTBpcm12QnpQa3lv?= =?utf-8?B?M05IdlNVSmlZanRYeEgxNGNUK29MdzRlWU4ramdpbTFuZXlDbkFCUTZCYUVT?= =?utf-8?B?bWhXdmlhdms0bmF4cGU3Y3NXMm5iaUxLa204emljL1YvOHpNRlBnQmhGaUNn?= =?utf-8?B?VFdMRUh4ZDNpenBWL09IT1M3Y0RiZFFkcDN5TzJaS1U3bGR4Q0JSUVdYZnBN?= =?utf-8?B?M0RtSWpONUhLVWMwNHBBeHNTaVFtdTdHUEVCbGtoeENQL2QzWjZTR0hnYXRy?= =?utf-8?B?VW9CTytMYU11L01pYTN2YkRGTVF0aU82MUZQU3NYUmFIV1JWS0FqTWVJaFBD?= =?utf-8?B?b1pyYkRnYUJJbjlPTS91SkUxajlUUGxEdGZ0U1RqQVQwVnFwTTZyQXhaM0dQ?= =?utf-8?B?K0cvWlFQdEtRa25LcmJRK0ZBY0ZRUlZhaTN5WEFZdDR6ZzM2cDJKMXlQVjZ2?= =?utf-8?B?TXJCWGNuQnJsK2c4MlJmV24vMjBWSWdZeGtjbnl6Y3RVZVhmWFlhOVkxQnNu?= =?utf-8?B?S2c0OGNUYjhWUE5zaWxLdWUrMXA2ejVlRUZad05uUDdFUUpkRDhwRWRwaVZi?= =?utf-8?B?bDJvTVBQd1pXdzBUSk5MRFVUK2FZdFBoWTJxdTF2Z1ZOYnZGZDV4TWFFcFdx?= =?utf-8?B?SDNuRTB1ZjdZNmQrc3FvT3NEWFh5bHZ1eWluTXRvZXB5QXZ5eG5GdHlnbnFv?= =?utf-8?B?RkZnSlFORWdwcDBRdnBuKzZQMXpqaWorNmczUE1OY2tHOUdnUFd0SEdmcmZh?= =?utf-8?B?ZytQSUNLYUs1V3VtNE14VC9yWXIyRUkwekxaeVNaUy9CVzZtbGdseWZ0RWZT?= =?utf-8?B?bDZVcHRucVVZV3YySVgzK2U1a0JIKytCZXJGeWFxU3hIZTlEV2ZRc3BJOXh2?= =?utf-8?B?Ty8zMklGMUhEVjZ6M3hIM0RCcXZZbjNhYzNuY3VIVC9QRmtGck1jTnNiRTBw?= =?utf-8?B?cmVleVcwS3dCK2pWdWxnaVVuejJmT3FNMDBUM05HdkVXYnlXbCtzVDB6Um10?= =?utf-8?B?VGlsYUFaMTdBckV3V3U5azc2M3VuRFJKQWJTcjhqUFF5ZVZYemlGbnhBMTBJ?= =?utf-8?B?ajJhdkFGOGFTU3JFTHNtOTlSL1BrSmwrcUE2SWpzRWlaOStqdndrb3BTR0hH?= =?utf-8?B?MXFzeVVMeDBZT3hTZTc4ZHpLOHdEd29pM1dmZEt4Y0VYbFpINFQvcTVidDZq?= =?utf-8?B?U1NHeFpiVXBvdnpCS3FqTWE0eFJWak5WUHFva0U0TVpPb3doTnMzYnJ3YldY?= =?utf-8?B?T0RGdmUvUW9rQlF3QWhHWlo4Z203a2tpRmx6VWE1SjVVUXFUcm05Uys1V2JU?= =?utf-8?B?c0crTkVhNllGalEwZGUzMVphYy9ENXV0MWhrNFJUTXZBK0x2QXg0TjBMcW5q?= =?utf-8?B?eHpGWlEvTkF5ME01UWdHa0Jhd3dnSURtQkt0ZkRZcnROV3RMNGU2REYvOEVD?= =?utf-8?B?dERldExTYVVjbzZUbVlEYVZ3WkpwTHRyODdPbUdnUWI4c20vUytLTGIxb3J6?= =?utf-8?B?dXdOYTNzVHBCNW5yc2xQemZFZGIyQ3pxMGpkMXY1SGhtUSt6cldMZkZxcXo5?= =?utf-8?B?WEZBY3ByU2pTUVNjdU1IVEhRMkRIWUVKbk9PeVdlRlR0RUQ4TngxVE1WQkV3?= =?utf-8?B?TGJtTldvQlU5SkQrUmdOcnR1VzJOU2ljQ3ZXUmRsRkNhRkRmSzlUSHV3SkJ1?= =?utf-8?Q?1++XYC3M8c+CE9GT/hpghOxeE?= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6c57c989-df57-4111-3966-08dab28c7a01 X-MS-Exchange-CrossTenant-AuthSource: DM6PR12MB4297.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Oct 2022 11:16:04.0131 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: UvGwK4Xs4PeJK74rgrveGGqwdMo/3mudjGUCOFkl+E6XwmPC2aEHm3KrkdFexC1Y X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH2PR12MB4040 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org On 10/20/2022 10:29 AM, Guo, Junfeng wrote: > CAUTION: This message has originated from an External Source. Please use proper judgment and caution when opening attachments, clicking links, or responding to this email. > > >> -----Original Message----- >> From: Ferruh Yigit >> Sent: Thursday, October 20, 2022 05:01 >> To: Li, Xiaoyun ; Guo, Junfeng >> ; Zhang, Qi Z ; Wu, >> Jingjing >> Cc: ferruh.yigit@xilinx.com; dev@dpdk.org; awogbemila@google.com; >> Richardson, Bruce ; Lin, Xueqin >> ; Wang, Haiyue >> Subject: Re: [PATCH v5 3/8] net/gve: add support for device initialization >> >> On 10/19/2022 4:59 PM, Li, Xiaoyun wrote: >> >>> >>> Hi >>> >>>> -----Original Message----- >>>> From: Ferruh Yigit >>>> Sent: Wednesday, October 19, 2022 14:46 >>>> To: Guo, Junfeng ; Zhang, Qi Z >>>> ; Wu, Jingjing >>>> Cc: ferruh.yigit@xilinx.com; dev@dpdk.org; Li, Xiaoyun >>>> ; awogbemila@google.com; Richardson, Bruce >>>> ; Lin, Xueqin ; >> Wang, >>>> Haiyue >>>> Subject: Re: [PATCH v5 3/8] net/gve: add support for device >> initialization >>>> >>>> On 10/10/2022 11:17 AM, Junfeng Guo wrote: >>>>> >>>>> Support device init and add following devops skeleton: >>>>> - dev_configure >>>>> - dev_start >>>>> - dev_stop >>>>> - dev_close >>>>> >>>>> Note that build system (including doc) is also added in this patch. >>>>> >>>>> Signed-off-by: Haiyue Wang >>>>> Signed-off-by: Xiaoyun Li >>>>> Signed-off-by: Junfeng Guo >>>> >>>> <...> >>>> >>>>> diff --git a/doc/guides/rel_notes/release_22_11.rst >>>>> b/doc/guides/rel_notes/release_22_11.rst >>>>> index fbb575255f..c1162ea1a4 100644 >>>>> --- a/doc/guides/rel_notes/release_22_11.rst >>>>> +++ b/doc/guides/rel_notes/release_22_11.rst >>>>> @@ -200,6 +200,11 @@ New Features >>>>> into single event containing ``rte_event_vector`` >>>>> whose event type is ``RTE_EVENT_TYPE_CRYPTODEV_VECTOR``. >>>>> >>>>> +* **Added GVE net PMD** >>>>> + >>>>> + * Added the new ``gve`` net driver for Google Virtual Ethernet >> devices. >>>>> + * See the :doc:`../nics/gve` NIC guide for more details on this new >> driver. >>>>> + >>>>> >>>> >>>> Can you please move the block amaong the other ethdev drivers, as >>>> alphabetically sorted? >>>> >>>> <...> >>>> >>>>> +static int >>>>> +gve_dev_init(struct rte_eth_dev *eth_dev) { >>>>> + struct gve_priv *priv = eth_dev->data->dev_private; >>>>> + int max_tx_queues, max_rx_queues; >>>>> + struct rte_pci_device *pci_dev; >>>>> + struct gve_registers *reg_bar; >>>>> + rte_be32_t *db_bar; >>>>> + int err; >>>>> + >>>>> + eth_dev->dev_ops = &gve_eth_dev_ops; >>>>> + >>>>> + if (rte_eal_process_type() != RTE_PROC_PRIMARY) >>>>> + return 0; >>>>> + >>>>> + pci_dev = RTE_DEV_TO_PCI(eth_dev->device); >>>>> + >>>>> + reg_bar = pci_dev->mem_resource[GVE_REG_BAR].addr; >>>>> + if (!reg_bar) { >>>>> + PMD_DRV_LOG(ERR, "Failed to map pci bar!"); >>>>> + return -ENOMEM; >>>>> + } >>>>> + >>>>> + db_bar = pci_dev->mem_resource[GVE_DB_BAR].addr; >>>>> + if (!db_bar) { >>>>> + PMD_DRV_LOG(ERR, "Failed to map doorbell bar!"); >>>>> + return -ENOMEM; >>>>> + } >>>>> + >>>>> + gve_write_version(®_bar->driver_version); >>>>> + /* Get max queues to alloc etherdev */ >>>>> + max_tx_queues = ioread32be(®_bar->max_tx_queues); >>>>> + max_rx_queues = ioread32be(®_bar->max_rx_queues); >>>>> + >>>>> + priv->reg_bar0 = reg_bar; >>>>> + priv->db_bar2 = db_bar; >>>>> + priv->pci_dev = pci_dev; >>>>> + priv->state_flags = 0x0; >>>>> + >>>>> + priv->max_nb_txq = max_tx_queues; >>>>> + priv->max_nb_rxq = max_rx_queues; >>>>> + >>>>> + err = gve_init_priv(priv, false); >>>>> + if (err) >>>>> + return err; >>>>> + >>>>> + eth_dev->data->mac_addrs = rte_zmalloc("gve_mac", >> sizeof(struct >>>> rte_ether_addr), 0); >>>>> + if (!eth_dev->data->mac_addrs) { >>>>> + PMD_DRV_LOG(ERR, "Failed to allocate memory to store >> mac >>>> address"); >>>>> + return -ENOMEM; >>>>> + } >>>>> + rte_ether_addr_copy(&priv->dev_addr, >>>>> + eth_dev->data->mac_addrs); >>>>> + >>>> >>>> Is anything assinged to 'priv->dev_addr' to copy? >>>> Also since there is a 'priv->dev_addr' field, why not use it directly, >> instead of >>>> allocating memory for 'eth_dev->data->mac_addrs'? >>>> I mean why not "eth_dev->data->mac_addrs = &priv->dev_addr"? >>> >>> Makes sense. There's no need to allocate a new memory. @Guo, >> Junfeng Can you update this? > > Thanks Xiaoyun and Ferruh for the comments! > I tried to update the code as suggested but may get "Invalid Memory" > warning when quit the testpmd. I found it was caused at the function > rte_eth_dev_release_port with " rte_free(eth_dev->data->mac_addrs); ". > Seems that allocating memory for 'eth_dev->data->mac_addrs' is still > needed. Please help correct me if I misunderstood this. Thanks! I'll keep > this part unchanged for the coming patchset first. > No it is not needed, you need to set pointer to NULL on release path to prevent common code free it (the problem you are getting). There are samples in various PMDs, please check. >>>> >>>> <...> >>>> >>>>> +struct gve_priv { >>>>> + struct gve_irq_db *irq_dbs; /* array of num_ntfy_blks */ >>>>> + const struct rte_memzone *irq_dbs_mz; >>>>> + uint32_t mgmt_msix_idx; >>>>> + rte_be32_t *cnt_array; /* array of num_event_counters */ >>>>> + const struct rte_memzone *cnt_array_mz; >>>>> + >>>>> + uint16_t num_event_counters; >>>>> + uint16_t tx_desc_cnt; /* txq size */ >>>>> + uint16_t rx_desc_cnt; /* rxq size */ >>>>> + uint16_t tx_pages_per_qpl; /* tx buffer length */ >>>>> + uint16_t rx_data_slot_cnt; /* rx buffer length */ >>>> >>>> These fields are not used in this patch, I guess some will be used in >> datapath >>>> patch. >>> >>> This is needed for base code gve_adminq.c not for datapath. Most of >> the stuff in gve_priv is for gve_adminq.c. >>> The adminq will update this info which dpdk pmd will need later. >> Compiler will complain if these don't exsit. >>> >> >> You are right they are used by 'gve_adminq.c', so OK to keep them, if >> there are ones not used at this stage, can you add them whenever they >> are used, or remove them if not used at all. If all used/required, no >> change required. > > Yes, we have already tried to move all the unused items to the corresponding > stages patch by patch. Thanks for reminding this! > thanks. >> >>>> >>>> Can you please only add fields that is used in the patch? This way it will >> be >>>> clear in which functionality that field is used and enable to detect not >> used >>>> fields. >>>> We are accepting batch updates for base code, but this is dpdk related >> code, >>>> lets only add things that are used when they are used. >>>> Same for all data structures. >>>> >>>> <...> >>>> >>>>> diff --git a/drivers/net/gve/version.map >> b/drivers/net/gve/version.map >>>>> new file mode 100644 index 0000000000..c2e0723b4c >>>>> --- /dev/null >>>>> +++ b/drivers/net/gve/version.map >>>>> @@ -0,0 +1,3 @@ >>>>> +DPDK_22 { >>>> >>>> DPDK_23 >