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 6EA24A0C4C; Tue, 5 Oct 2021 18:27:22 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 489084139F; Tue, 5 Oct 2021 18:27:22 +0200 (CEST) Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by mails.dpdk.org (Postfix) with ESMTP id 8C35E4132B for ; Tue, 5 Oct 2021 18:27:20 +0200 (CEST) X-IronPort-AV: E=McAfee;i="6200,9189,10128"; a="206601047" X-IronPort-AV: E=Sophos;i="5.85,349,1624345200"; d="scan'208";a="206601047" Received: from orsmga007.jf.intel.com ([10.7.209.58]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 05 Oct 2021 09:19:32 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.85,349,1624345200"; d="scan'208";a="477740810" Received: from orsmsx604.amr.corp.intel.com ([10.22.229.17]) by orsmga007.jf.intel.com with ESMTP; 05 Oct 2021 09:19:31 -0700 Received: from orsmsx608.amr.corp.intel.com (10.22.229.21) by ORSMSX604.amr.corp.intel.com (10.22.229.17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.12; Tue, 5 Oct 2021 09:19:30 -0700 Received: from orsmsx607.amr.corp.intel.com (10.22.229.20) by ORSMSX608.amr.corp.intel.com (10.22.229.21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.12; Tue, 5 Oct 2021 09:19:30 -0700 Received: from ORSEDG601.ED.cps.intel.com (10.7.248.6) by orsmsx607.amr.corp.intel.com (10.22.229.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.12 via Frontend Transport; Tue, 5 Oct 2021 09:19:30 -0700 Received: from NAM02-DM3-obe.outbound.protection.outlook.com (104.47.56.43) by edgegateway.intel.com (134.134.137.102) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2242.12; Tue, 5 Oct 2021 09:19:30 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=XY/cKG0dzN2jMTy2SHKVGZ31Aqw/oInXmYSg5o9RTI6FQBRDgCXjB+/nsmvt+KWWUsb03dkVJAvlohrPo7T5YEfUoCWtomw2vAFSKxzxFxmXvTmU1TK8hd35Xq8lFKITXiUlWcgKSIqSxxD6QGdCG8+kolkHLi0UJPmf9OqJIAD9SCjSSD6yghpwJcH5E/geMxdNcRBD07CRV7QicrXgnTysVhkBncT7wMaX9IwKlcq8RitDLks0ikLH0GUj4tO3X4R0yk40hNQSOJV/anQfxhOuvYAhuPDZirQEwiGo5nlJn+ESAir1XHmHCslyScV2iqzf9NHMMcH5R1d2vUFXBA== 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=VtBcDLwMZDJ4W3FeE/Cghu60yJhgQd+9AjqvaCWGJEY=; b=a4IkbT4Z01gmTXP6KNAXok+lLDvMZA1Q4JKmwuS3kGGijM73ut/WYbwEjE02xUTJu8F7He0b9fKJUKQFzJaU8yMMoGhfonszyL66nKo/bOmcazAkSTSf2BiP9k+5ADmMn46YkgwYFQcko2d5SV9wWGAqL9Ev1Mv/Q6Y5UTW+ToPlp0YtixqhJQjUl7CRF2R7HoG1J9c9Yhs2I0px804lU0sGyXvYfaTmnzRjDLDoeWu934eF2Mit2ri8/Mdf3gPsx/kvPpPobizY2+UiztSkGv5h5pDNno4hJ8GCW9sBYyX1VqYPIL2E42vWMAsiDLiGsY9O0ZVDSKNT200ru3onoA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=VtBcDLwMZDJ4W3FeE/Cghu60yJhgQd+9AjqvaCWGJEY=; b=U/PeetFvoJREO4gmpWogY2/z98AsVSS/PKpWpm0nHGD7D8J+wnTtQsSG1cu4qayDsDJjgVnYCkTF/2WwDBy3IBTr2oujkLdO6QGH5pJz2E4ST2c7I3hdnuDKRSls10tEhbQWJ5fLQXSoqWIzaamff/BxKKZNTgkwIYHmxIXj8o0= Received: from DM6PR11MB4491.namprd11.prod.outlook.com (2603:10b6:5:204::19) by DM6PR11MB4235.namprd11.prod.outlook.com (2603:10b6:5:205::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4566.14; Tue, 5 Oct 2021 16:19:25 +0000 Received: from DM6PR11MB4491.namprd11.prod.outlook.com ([fe80::740e:126e:c785:c8fd]) by DM6PR11MB4491.namprd11.prod.outlook.com ([fe80::740e:126e:c785:c8fd%4]) with mapi id 15.20.4566.022; Tue, 5 Oct 2021 16:19:25 +0000 From: "Ananyev, Konstantin" To: Thomas Monjalon CC: "dev@dpdk.org" , "Li, Xiaoyun" , "anoobj@marvell.com" , "jerinj@marvell.com" , "ndabilpuram@marvell.com" , "adwivedi@marvell.com" , "shepard.siegel@atomicrules.com" , "ed.czeck@atomicrules.com" , "john.miller@atomicrules.com" , "irusskikh@marvell.com" , "ajit.khaparde@broadcom.com" , "somnath.kotur@broadcom.com" , "rahul.lakkireddy@chelsio.com" , "hemant.agrawal@nxp.com" , "sachin.saxena@oss.nxp.com" , "Wang, Haiyue" , "Daley, John" , "hyonkim@cisco.com" , "Zhang, Qi Z" , "Wang, Xiao W" , "humin29@huawei.com" , "yisen.zhuang@huawei.com" , "oulijun@huawei.com" , "Xing, Beilei" , "Wu, Jingjing" , "Yang, Qiming" , "matan@nvidia.com" , "viacheslavo@nvidia.com" , "sthemmin@microsoft.com" , "longli@microsoft.com" , "heinrich.kuhn@corigine.com" , "kirankumark@marvell.com" , "andrew.rybchenko@oktetlabs.ru" , "mczekaj@marvell.com" , "jiawenwu@trustnetic.com" , "jianwang@trustnetic.com" , "maxime.coquelin@redhat.com" , "Xia, Chenbo" , "Yigit, Ferruh" , "mdr@ashroe.eu" , "Jayatheerthan, Jay" Thread-Topic: [dpdk-dev] [PATCH v4 7/7] ethdev: hide eth dev related structures Thread-Index: AQHXuSf6gPPvn88XmEiXimTKLsgPCavEZk+AgAAqsUA= Date: Tue, 5 Oct 2021 16:19:25 +0000 Message-ID: References: <20211001140255.5726-1-konstantin.ananyev@intel.com> <20211004135603.20593-1-konstantin.ananyev@intel.com> <20211004135603.20593-8-konstantin.ananyev@intel.com> <3078390.3ff9TgJ5vr@thomas> In-Reply-To: <3078390.3ff9TgJ5vr@thomas> Accept-Language: en-GB, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.6.200.16 authentication-results: monjalon.net; dkim=none (message not signed) header.d=none;monjalon.net; dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 654c1392-82c8-46a6-8f3a-08d9881be627 x-ms-traffictypediagnostic: DM6PR11MB4235: x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:2582; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: hjGcBeFO1qeo/JUJSpWEeSuXNenQpTJXFldJG4xcxx4qU4neQCtqShZB2xGvfvA02BBaTCeH2rF+KCDOYN6B7B6ztrd7Q8GpuGokc4vBmom4vTPfPpB18CmVFtMdeEvg5b6WXxANb2B8cA2LYbykEfLeUwRtrvl59r0ClQApjX+JWwKsW9nnBzAm94aPB2zO+1Ye4KQ3rr8mY7kmUtsD1Nk4NYsKUAfbZNiq0i4rZNH/MxFcwhi8RT9C2q7KipCzYecj+E2/jNVYZuvSI4+T+3s1saYpA1q37glaaf4GukvwDlaaXvPqYBSuF0aPo1D+bUyQvdvZslWyeKlofPZ0/N0BA1RrEup+NHZCdd1ed78m9EDqrzwE+C3Roq/k/8RiyMyxAqASY0DpaUwMF5LtAattAzBo2dbCw79a/Kua/xWoPrHd5mvZiCu9zSNtZtOlAxbBf0lSu0HgiQe1OJUBOSousbyBDjSI6UAxWaDx4LhIjgA3Lswa0cMfahxAULUvkROWAqy6u0KcjxJ7/ksW/2qYR5va5AqIAccGOaavUeLI8Pnz1yDwVQbdELvZW6rbTLGb39A0Xzslt37ADVyqjdyJuxiFl0XgFq5pz84jpTmGRqlOgTXfwNUy7ytRFv842F/CbGAVL4WEEU1pUUFNY4OJi2sROw1ZyWfki2wftOt0FhP5bPjVdE9OGfIrwWxQ+2wwUDx1u6OrAE+U2+2IFw== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM6PR11MB4491.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(186003)(7696005)(52536014)(7416002)(86362001)(7406005)(26005)(4326008)(8936002)(54906003)(107886003)(9686003)(122000001)(2906002)(8676002)(76116006)(66476007)(6916009)(55236004)(38100700002)(33656002)(6506007)(66946007)(316002)(38070700005)(66446008)(64756008)(83380400001)(66556008)(55016002)(508600001)(71200400001)(5660300002); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?tSaF3my/MvyQbuGIvjm6elccSUwqwhxeU4X4udnrC/ISjHVn1XQ6O7HQWMnh?= =?us-ascii?Q?FrYUkuRCHwo7W1Vu6ELU6X7VlrRzzxdSdC4xyaEELZPSXE69d7DdYAB2usSY?= =?us-ascii?Q?LGgmASo1oKZabsUaVTP7uvEkcjpWSFHVyP/GzW1Akd7MYqgSAQPQWYMjtpds?= =?us-ascii?Q?5tnP/N6pzr1YdDi+tIpRaHdUxo1QaKYuynEwk/Z+XOkzQdCWggdf/CXvvIhN?= =?us-ascii?Q?NvPwGPBOjgHCe2pl2I7Bj2JvCGRS5Y5ggiIm7/+67o2L5dwncnddO6QHWOq7?= =?us-ascii?Q?gWrrDGd3Lqb4oQJWrfLGBgXjgSjtk5j+HSOCBfR0RSPzeZhVgNjdgA+WsY8M?= =?us-ascii?Q?sI2bnoQV7ixOVffxfIOWvKVdhmhbjI3jlBPcbplRNgqE9wU4pUBXIZ0n3RKg?= =?us-ascii?Q?sRN6NgT9UbgNK+REy40GYpOU2bw6rqPHTavc+gpmx1wV/jyLGUZlN+yYQ1NN?= =?us-ascii?Q?C1Bjnk84BpFHdZBsv2Qbd1wWB1wXqEAUoYEUukAIzSq/gAJSuGgEefOx1gHi?= =?us-ascii?Q?pfv48kYQodT6l5c/rRdzwcm/uJwfmKtVQ5N7kQhf62b4s2RV+ZNgMBYHlVyt?= =?us-ascii?Q?YtEBCd5f0wlHCC/O9twLcvgTDzTQQrQCO4R0eXfehu3mI/5AHSByORtJPo7Y?= =?us-ascii?Q?7dWuh2UFzZU7z5vPqDbwQ2yyLyiYy2snl5qUYSHFaqoaTYtFNwdVvZu4VnZT?= =?us-ascii?Q?e1sWI2h83f3fiOJluxZPScqSp4OxtxcIA5DCwyul9CdxbByemBhJ4LjbZ1yE?= =?us-ascii?Q?VLRlWQdgVV7wRuNzEBoeYNkfmR3K6NID24u1obHCoZmU0mEXEUk8PTmxlfDC?= =?us-ascii?Q?lYAXnpRy67LPDRMYRY0I4NIVgXsJesienzbTHINSrIYGiV/YfGyPE+WF7EYz?= =?us-ascii?Q?T9pDJHq4MtSwa4zbKC9hEH1oZEcP0GSorL6WWI0OCIYNy1F5igk778SzRVmi?= =?us-ascii?Q?P5LNPRrrdW/aLoSKXX4zgVZrNLvEtY6YHB6wyPScZvf0y9zZbiDjIeWbzKp0?= =?us-ascii?Q?YUz7geUtt+pE3qOXH/I0jIuLykqI00aux5LpqXITlHSNl9wB2sWlYrffjnjV?= =?us-ascii?Q?8VulaMFZmsyM1IIRzPOFE3hXyK/5whgdVKDe6WNOzzr/NiRpEmWAzvCy1t0/?= =?us-ascii?Q?TkR4wIcz7VD/qIxK5N+Bfc/LmTy2iG1MHI6ofVvyJXAkSUZGaDMoUPmF2BqK?= =?us-ascii?Q?90xuLP9CxFFhjX0BYS9vgFjSjboly3OcViV81OZm6i8FEBGnnKW3LMvRckHd?= =?us-ascii?Q?S5+08pc+YA3OFZdVtI90yJVfFkS3L6UQevGU17jlSV5y8iqqqiCNh5DiqGNT?= =?us-ascii?Q?J/uKjOSzCyl6vDrgEwRsGxn/?= Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM6PR11MB4491.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 654c1392-82c8-46a6-8f3a-08d9881be627 X-MS-Exchange-CrossTenant-originalarrivaltime: 05 Oct 2021 16:19:25.4323 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 7Qgeh8rlbeNN+ODqG51tmo7TmRz6kvZUIyD+MEnRxWVJwTEf5p3ZX+xSomzHE98NEy0aJL86zvRf6VvRJOMNwjzuVJhI8ZO8jvh5NK8ZKN0= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR11MB4235 X-OriginatorOrg: intel.com Subject: Re: [dpdk-dev] [PATCH v4 7/7] ethdev: hide eth dev related structures 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 Sender: "dev" =20 > 04/10/2021 15:56, Konstantin Ananyev: > > Move rte_eth_dev, rte_eth_dev_data, rte_eth_rxtx_callback and related > > data into private header (ethdev_driver.h). > [...] > > +/** > > + * @internal > > + * Structure used to hold information about the callbacks to be called= for a > > + * queue on RX and TX. > > + */ > > +struct rte_eth_rxtx_callback { > > + struct rte_eth_rxtx_callback *next; > > + union{ > > + rte_rx_callback_fn rx; > > + rte_tx_callback_fn tx; > > + } fn; > > + void *param; > > +}; > > + > > +/** > > + * @internal > > + * The generic data structure associated with each ethernet device. > > + * > > + * Pointers to burst-oriented packet receive and transmit functions ar= e > > + * located at the beginning of the structure, along with the pointer t= o > > + * where all the data elements for the particular device are stored in= shared > > + * memory. This split allows the function pointer and driver data to b= e per- > > + * process, while the actual configuration data for the device is shar= ed. > > + */ > > +struct rte_eth_dev { > > + eth_rx_burst_t rx_pkt_burst; /**< Pointer to PMD receive function. */ > > + eth_tx_burst_t tx_pkt_burst; /**< Pointer to PMD transmit function. *= / > > + eth_tx_prep_t tx_pkt_prepare; > > + /**< Pointer to PMD transmit prepare function. */ > > + eth_rx_queue_count_t rx_queue_count; > > + /**< Get the number of used RX descriptors. */ > > + eth_rx_descriptor_status_t rx_descriptor_status; > > + /**< Check the status of a Rx descriptor. */ > > + eth_tx_descriptor_status_t tx_descriptor_status; > > + /**< Check the status of a Tx descriptor. */ >=20 > Why not using the new struct rte_eth_fp_ops? We don't want to change each and every driver for this change. The idea beyond it: 1. PMDs keep to setup fast-path function pointers and related data=20 inside rte_eth_dev struct in the same way they did it before. 2. Inside rte_eth_dev_start() and inside rte_eth_dev_probing_finish() (for secondary process) we call eth_dev_fp_ops_setup, which copies these function and data pointers into rte_eth_fp_ops[port_id]. 3. Inside rte_eth_dev_stop() and inside rte_eth_dev_release_port() we call eth_dev_fp_ops_reset(), which resets rte_eth_fp_ops[port_id] into some dummy values. >=20 > > + > > + /** > > + * Next two fields are per-device data but *data is shared between > > + * primary and secondary processes and *process_private is per-proces= s > > + * private. The second one is managed by PMDs if necessary. > > + */ > > + struct rte_eth_dev_data *data; /**< Pointer to device data. */ >=20 > We should mention that "data" is shared between processes. I think the comment above states exactly that. In fact, it is just cut and paste from lib/ethdev/rte_ethdev_core.h to=20 lib/ethdev/ethdev_driver.h. >=20 > > + void *process_private; /**< Pointer to per-process device data. */ > > + const struct eth_dev_ops *dev_ops; /**< Functions exported by PMD */ > > + struct rte_device *device; /**< Backing device */ > > + struct rte_intr_handle *intr_handle; /**< Device interrupt handle */ > > + /** User application callbacks for NIC interrupts */ > > + struct rte_eth_dev_cb_list link_intr_cbs; > > + /** > > + * User-supplied functions called from rx_burst to post-process > > + * received packets before passing them to the user > > + */ > > + struct rte_eth_rxtx_callback *post_rx_burst_cbs[RTE_MAX_QUEUES_PER_PO= RT]; > > + /** > > + * User-supplied functions called from tx_burst to pre-process > > + * received packets before passing them to the driver for transmissio= n. > > + */ > > + struct rte_eth_rxtx_callback *pre_tx_burst_cbs[RTE_MAX_QUEUES_PER_POR= T]; > > + enum rte_eth_dev_state state; /**< Flag indicating the port state */ > > + void *security_ctx; /**< Context for security ops */ > > + > > + uint64_t reserved_64s[4]; /**< Reserved for future fields */ > > + void *reserved_ptrs[4]; /**< Reserved for future fields */ > > +} __rte_cache_aligned; > > + > > +struct rte_eth_dev_sriov; > > +struct rte_eth_dev_owner; > > + > > +/** > > + * @internal > > + * The data part, with no function pointers, associated with each ethe= rnet > > + * device. This structure is safe to place in shared memory to be comm= on > > + * among different processes in a multi-process configuration. > > + */ > > +struct rte_eth_dev_data { > > + char name[RTE_ETH_NAME_MAX_LEN]; /**< Unique identifier name */ > > + > > + void **rx_queues; /**< Array of pointers to RX queues. */ > > + void **tx_queues; /**< Array of pointers to TX queues. */ > > + uint16_t nb_rx_queues; /**< Number of RX queues. */ > > + uint16_t nb_tx_queues; /**< Number of TX queues. */ > > + > > + struct rte_eth_dev_sriov sriov; /**< SRIOV data */ > > + > > + void *dev_private; > > + /**< PMD-specific private data. > > + * @see rte_eth_dev_release_port() > > + */ > > + > > + struct rte_eth_link dev_link; /**< Link-level information & status.= */ > > + struct rte_eth_conf dev_conf; /**< Configuration applied to device.= */ > > + uint16_t mtu; /**< Maximum Transmission Unit. */ > > + uint32_t min_rx_buf_size; > > + /**< Common RX buffer size handled by all queues. */ > > + > > + uint64_t rx_mbuf_alloc_failed; /**< RX ring mbuf allocation failures.= */ > > + struct rte_ether_addr *mac_addrs; > > + /**< Device Ethernet link address. > > + * @see rte_eth_dev_release_port() > > + */ > > + uint64_t mac_pool_sel[ETH_NUM_RECEIVE_MAC_ADDR]; > > + /**< Bitmap associating MAC addresses to pools. */ > > + struct rte_ether_addr *hash_mac_addrs; > > + /**< Device Ethernet MAC addresses of hash filtering. > > + * @see rte_eth_dev_release_port() > > + */ > > + uint16_t port_id; /**< Device [external] port identifier. *= / > > + > > + __extension__ > > + uint8_t promiscuous : 1, > > + /**< RX promiscuous mode ON(1) / OFF(0). */ > > + scattered_rx : 1, > > + /**< RX of scattered packets is ON(1) / OFF(0) */ > > + all_multicast : 1, > > + /**< RX all multicast mode ON(1) / OFF(0). */ > > + dev_started : 1, > > + /**< Device state: STARTED(1) / STOPPED(0). */ > > + lro : 1, > > + /**< RX LRO is ON(1) / OFF(0) */ > > + dev_configured : 1; > > + /**< Indicates whether the device is configured. > > + * CONFIGURED(1) / NOT CONFIGURED(0). > > + */ > > + uint8_t rx_queue_state[RTE_MAX_QUEUES_PER_PORT]; > > + /**< Queues state: HAIRPIN(2) / STARTED(1) / STOPPED(0). */ > > + uint8_t tx_queue_state[RTE_MAX_QUEUES_PER_PORT]; > > + /**< Queues state: HAIRPIN(2) / STARTED(1) / STOPPED(0). */ > > + uint32_t dev_flags; /**< Capabilities. */ > > + int numa_node; /**< NUMA node connection. */ > > + struct rte_vlan_filter_conf vlan_filter_conf; > > + /**< VLAN filter configuration. */ > > + struct rte_eth_dev_owner owner; /**< The port owner. */ > > + uint16_t representor_id; > > + /**< Switch-specific identifier. > > + * Valid if RTE_ETH_DEV_REPRESENTOR in dev_flags. > > + */ > > + > > + pthread_mutex_t flow_ops_mutex; /**< rte_flow ops mutex. */ > > + uint64_t reserved_64s[4]; /**< Reserved for future fields */ > > + void *reserved_ptrs[4]; /**< Reserved for future fields */ > > +} __rte_cache_aligned; > > + > > +/** > > + * @internal > > + * The pool of *rte_eth_dev* structures. The size of the pool > > + * is configured at compile-time in the file. > > + */ > > +extern struct rte_eth_dev rte_eth_devices[]; >=20 > Later we should add a function to configure the size of this array dynami= cally > in the early DPDK init stage. After we will hide rte_eth_devices[] and friends, we should be able to do with them whatever we want. But I suppose, that should be a subject of separate patch/discussion, Probably not in 21.11 timeframe. =20