From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM01-BN3-obe.outbound.protection.outlook.com (mail-bn3nam01on0049.outbound.protection.outlook.com [104.47.33.49]) by dpdk.org (Postfix) with ESMTP id DFFA19205 for ; Wed, 7 Sep 2016 16:10:25 +0200 (CEST) Received: from BN3PR0301CA0078.namprd03.prod.outlook.com (10.160.152.174) by BLUPR0301MB2004.namprd03.prod.outlook.com (10.164.22.18) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.1.599.9; Wed, 7 Sep 2016 14:10:24 +0000 Received: from BN1BFFO11FD017.protection.gbl (2a01:111:f400:7c10::1:181) by BN3PR0301CA0078.outlook.office365.com (2a01:111:e400:401e::46) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.1.609.9 via Frontend Transport; Wed, 7 Sep 2016 14:10:24 +0000 Authentication-Results: spf=fail (sender IP is 192.88.168.50) smtp.mailfrom=nxp.com; rehivetech.com; dkim=none (message not signed) header.d=none;rehivetech.com; dmarc=fail action=none header.from=nxp.com; Received-SPF: Fail (protection.outlook.com: domain of nxp.com does not designate 192.88.168.50 as permitted sender) receiver=protection.outlook.com; client-ip=192.88.168.50; helo=tx30smr01.am.freescale.net; Received: from tx30smr01.am.freescale.net (192.88.168.50) by BN1BFFO11FD017.mail.protection.outlook.com (10.58.144.80) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.587.6 via Frontend Transport; Wed, 7 Sep 2016 14:10:23 +0000 Received: from Tophie.ap.freescale.net ([10.232.14.87]) by tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id u87E8BD7013556; Wed, 7 Sep 2016 07:10:21 -0700 From: Shreyansh Jain To: CC: , Shreyansh Jain , "Jan Viktorin" Date: Wed, 7 Sep 2016 19:38:14 +0530 Message-ID: <1473257297-7221-23-git-send-email-shreyansh.jain@nxp.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1473257297-7221-1-git-send-email-shreyansh.jain@nxp.com> References: <1466510566-9240-1-git-send-email-shreyansh.jain@nxp.com> <1473257297-7221-1-git-send-email-shreyansh.jain@nxp.com> X-EOPAttributedMessage: 0 X-Matching-Connectors: 131177310239872437; (91ab9b29-cfa4-454e-5278-08d120cd25b8); () X-Forefront-Antispam-Report: CIP:192.88.168.50; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(7916002)(2980300002)(1110001)(1109001)(339900001)(189002)(199003)(2351001)(2950100001)(19580405001)(305945005)(19580395003)(586003)(86362001)(189998001)(575784001)(8676002)(626004)(7846002)(5890100001)(8936002)(48376002)(36756003)(8666005)(68736007)(77096005)(5660300001)(5003940100001)(2906002)(110136002)(85426001)(47776003)(50466002)(229853001)(33646002)(356003)(104016004)(11100500001)(106466001)(76176999)(4326007)(50986999)(87936001)(92566002)(81166006)(81156014)(97736004)(105606002)(50226002)(7059030); DIR:OUT; SFP:1101; SCL:1; SRVR:BLUPR0301MB2004; H:tx30smr01.am.freescale.net; FPR:; SPF:Fail; PTR:InfoDomainNonexistent; MX:1; A:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BN1BFFO11FD017; 1:cqQAjFuR7TsiDgS2nL5i7RiCTRu5kyyOF2kZgleWiCT8gUuBWG9bgN3ZNKeSxc5dmaGt1UxWLs5SYZ4/FVoc8bRxgU5FkCcohzD2tT1skwe2dNYUbHZa9Wa2bNOVnowEnlkC/tyQBt/AbtrDAoda2qgn6jlQpEP+DR94la+ksMJNd6diYluIr2j2AYZ4mQNpXsoss/myKanmCIzxUZZif85q9FCiraHmzth57m+PKBpyWaCUPf1mRoivTKUwr4FS2jmTQqkGX5h2KePlZeFOmVw8yPeFzmQXyZ6HAkumuEpwI3zGvUZ27skYsvEbGsVE/c1fonrVPlTdhy8pHqyHI3099Qt8VljT9SjIxA0pwJGHFjIv+1eP3t/haey9XP4ODy2jsNqF5aaaorwdAEoGw9Z2qX8tRYzRjZFC9YR6QZpq14167pF2JpcrN9IE16SlOwMHNkLALoExZGhjQS2Q/0wO8U0+wT7neW6jTeyH02VekGVqt8DrTc+FSaDwj62AjqtoheBeertqddIuuRmRRwEeh9Qf9UgTxTX67gZlKRQSt7ndsPrOiREe7cuyvV+t8VvLo4Z2AsG3s9zJQtIfKleWUTvIftJDaXm1jYyM9lDS7n64SJ8n1hTFhtFB1IXt MIME-Version: 1.0 Content-Type: text/plain X-MS-Office365-Filtering-Correlation-Id: 096f025d-f9d4-42c8-55b5-08d3d728b5e7 X-Microsoft-Exchange-Diagnostics: 1; BLUPR0301MB2004; 2:yL47kkq2yBjj/NIZVFE75QjXuqlgDwpsXCOhThBY8YnzuLlEyE9oMkl2Em4noLmUkiDDvGBV3yW4cRVFxUOWOEyMvanpVS4K0+zHUs/12V5yIu/HuyfHKbzRYV7do3GkW5hab4cAAUPvaIRCnriEaooXskY27vOWEQ7ykpY/JaMayon5cmqYRiG7NVi5AErN; 3:2iP74naNtsy02TibeUVPxFxYy8MDA9Dz46u/sX6BL2HLXWfsPImshe9AqTuMLpYVU3fQwsvjBKylgLvM2hG0nLtOrTzg6G6kQohCwaSSH5h5nzLe3S0BZj6VI8DLWgZ11IOL3HXGJLaweB+Eii3nU6G3O5Y5mzP+QtnslxJicLLyoUWrVu0cPx/3PF9etbAqBfzuIxtVvMsDrwcgWQTRPOof1iZ5j9lFVoWpz2r81U8= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BLUPR0301MB2004; X-Microsoft-Exchange-Diagnostics: 1; BLUPR0301MB2004; 25:WrJDlZMPOiCPa9UcqsYWajaMlrlIc5loeGXQKq448hTvBuh6zBPJRNY+3y+3vXn6yqGh9IuOCrOb8VxU3Yc3elKQddmw3XjgZTiNNFfFkv4I1CxUhPY+AkxNl/3P419EhV6n8q3N0kB6MhZH0ryPb1DJ41F6rj0lnkZWDfooTdspHp4Tr2os5ZE58dKAGToMuzOb0X55PjRRGfJTy3m8lpIfagPH3ixu/dENIySlZiqPhukD4y6PpHwsRK5NxG43uqQ7bYb+hBG3pzy3ra5PDNHLlH0y/5zSOISykUJcDU7Qz4qTHV2zaywBgXUOQxfUbr7OR4vHq85U2YoYEPkYh0poBMO6CRRD2kjih3iz0Cv5/XUonHQjPQWUTnVUt2+OUF9YZ8CoRcwqVlMEkL1/kmPmdLDbNJqg3aMDvkpsQii+ChK++c7ekXlcA2KVwcJ2FQK8zENFSYImvT749pGcOfW/7yzt2ZB2ICMs4azWVmHarIvumB5ftT5/5yYnjjMSxBFO9yRrpsDJRmAENulI9cp6GHJgBwOX7p+yiU2WbIJHu0uOfTP+NtBBMH1LcS5CdFuN3yS+bTiwTDROaui/dZ2+TMiBDSEQXtxb8h741h4GvVhueYzNz3I3ooK2bREgntUz71WQ90QmdfE8zu5IWDjiekpFRCqzScn4rn118JM0nZRu9SFdNwQnuIq3pVJoAX1+IHzv+uBgg9h0CAP5Z5M1hrcc33W5jDfJlgVE5n0= X-Microsoft-Exchange-Diagnostics: 1; BLUPR0301MB2004; 31:J65jJ6gsHU2VphvFMbRiCUuvyri4rZKCM1hfo8eZSrC1kdRnufbWf78NAD0HfbQk8cwrUJSG4R7tKVXIGpZkLlqd8HcQmj/VWnD1wId/4EpGaAerBlWNY5JrvfLCaHBB3onri7ZdzOMVJjzHgS1J0vVwfApEKzKGYAqS5EBoLn2GnkRQTm2MCMkXdVaLGsDRavWu54LTQo3US94PA4CbKbJrRChZGkmcALHQEz16eQA=; 4:fBb2AGFT1xsMvSePLsr6nmFWHzP3qwUX9GeKcjIcs/GqnHVm2TyYsAFavvQnCigZLbLyoZfQ6HRMCUEZgjHQLZ0TfcqY6joa829zQXzlcr+lZCXQwNl+KpQucYZb3Aa0avgSIVqTdZk9hWP6c5+LnjNhQ+ZFIzcy8/YiQuJ/eHYQH8NEjBvwDNwZnKFtchT7vURJwuxwPA6zOGqlRYBXm3EyKU9N6ab4P0gpFNRI8P9D+oTqZjYAzqrXXxFb2sFZHXncpzapO/BB+zu1T+z2vdUJndjkGVFYMPJH020E+mdPQzcbJ84tEedicVIXPXgQxr5UNsvm61KmfhJii/TMH9uNQXXnjCF4UHz5zhqRw3j3ilXVTYwe96wjeUCqNOw8P/SrGLyebA2S3ccAoOD4jbVkHx1DwK/w5A1MStWemCcBIXbDvonsAERBKLN+Vp5tjgpdkpFjPVXbBttkVRXy1IRkAtZ2aVA4rZP7gZEz969V8NObPyTxV15ghQ3h9co+BcqL0up1amyXIHWwHJgLBQoI0wnIuV6AO8eKjcU8I50= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040176)(601004)(2401047)(13015025)(13017025)(13023025)(13024025)(13018025)(8121501046)(5005006)(3002001)(10201501046)(6055026); SRVR:BLUPR0301MB2004; BCL:0; PCL:0; RULEID:(400006); SRVR:BLUPR0301MB2004; X-Forefront-PRVS: 0058ABBBC7 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BLUPR0301MB2004; 23:Sgdl+P8+JzqfPoQe3GbP1Mat1kwzqEvLLy/YEWr?= =?us-ascii?Q?SaeYagrxFbfvQvFG8HL4jseSJqIxJRzYaXeXUtZwU/T2n4L1Pm60QXs6DPEr?= =?us-ascii?Q?FA24g501PcYYkCPNRwxLvAGIUDTO1R4PMPTkqUOQ7DjHvmg5VZov8y8XrETE?= =?us-ascii?Q?EzCBEcSK6MwNPCxssUQz8nDWIj1h9zAgl7aQjTig0HdV7hotaaXwK63thfGp?= =?us-ascii?Q?vh9YRXfzR8E3XNzMCReXVaFiHXCLrhQ80ASeqNK5uPPVpTdSOWvYNdrUTArH?= =?us-ascii?Q?hlA0jk6KzVd5j6vfTzpMq+pVtNN3VBJgBdx/YEAl2BctOgsTZcVGdEGXWqD/?= =?us-ascii?Q?yszK5TWAiVq7Ji2WZRHjPfOzuUqdBL34nPnB9A9nrba+wbb42qsOIQJICXg+?= =?us-ascii?Q?EUzEVaJG+o6o7FYDrYBto4zyegjnnrPQYN50wnKvkq1O8oM2eqa+E+lryXJu?= =?us-ascii?Q?AsexfSpUDAT4ebvojqeGeaZM6Ev7F98nZg7wDO1sDE7nHhavP9bagxvAqPTi?= =?us-ascii?Q?c3TCsTRAK5EnPrDbojzeDpqhDLQcC+gV+Y2NC+jPWME99T5bDgIxbF5FWZOa?= =?us-ascii?Q?56NPi8oJbCU/csF1iJcF/JKV6Alp/RAuaEdfpdrwdoYxgM7EOJTm/c5Zeh5i?= =?us-ascii?Q?YD82ow3lnbq2nOw01x2I3eBSBjXsT0TlXRxPqvG8Wby5jdqXuk6/cJM1kQCe?= =?us-ascii?Q?hOwOOQinbW7RbkVS18vyFuPjZUSazhQ5c9hSRXDGCyTplFDMr0hIExrUsqpe?= =?us-ascii?Q?h6RoqUEBBwLd8daHsgi+Z6QHfKyDhkMM3Lcmvy8rH5kdu9Aab1kzwvmrOWpF?= =?us-ascii?Q?jgw878eJWotlmcWzyjmRKdVu/SJgfUZPitL/i4dr216IKJXXkQdCnKD66N4v?= =?us-ascii?Q?TSsXZscuypXhFZuysv8uAtytqZFH/Kqw2Y058jCWrqvD7jjbBgougHoPS8ov?= =?us-ascii?Q?Sd9rb74RJHWZjUgpDDbinwbNykfH62rvf3QAHZiZv9U2b73GiTGzTrpYY3Y3?= =?us-ascii?Q?+MNw3t1cWwfYi5V36UIMQWfphZW0quoB8yxZu5kVZhPU71ZEVrAGzw/wqt4d?= =?us-ascii?Q?yZhEyWY4yGvcSy1/ALfiDQ5Vk5YKLpsuwQldMfXLLOB8iWgyLCF0lN1187Zv?= =?us-ascii?Q?U7Q+GiFjrBcRty9uAsTz7i7JPLVU0S+vtmhKfQkfmTLlr8wqY7YoU8ZQdLn5?= =?us-ascii?Q?XOsbl281/dtlfXTzLSr4WMG4VhqLaqdG4ybQV4trc5WCKomJu4TBgZgod+w?= =?us-ascii?Q?=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; BLUPR0301MB2004; 6:1j8AyBQHglF5V9RTLlEFhwaVh/RUZRuJksASATRubXcgwr1LaeN/IXMDlTKs7yGqCzDd6oraLuFUkxqEvdW/kNjJpVXtz9FrF8xMYX1w2CaCFAtoNxsZgBC09y+nfhJDGrxsgMU48Tcjvl5XySzmx/cxA6MERIYI0J0t5rE8RtPCwIKfWin9efEiZpdNrRgl4cnh+6EV+997g24jdbxZwRJ2vQjOoAJr2KAVEiwx0f7j+2nWOeXScayeiKSDC49trq5e8k4ORiP18VSGxFwdLBS9ascqh1plW8VduiRELmg=; 5:WCJDxEEXM83BprKynlefRch+oAkqRE36We6MVW2YR7yhpLY30tz78wSnhMN3qAyhnGOjisvOpanJgFiO1qoX9FhjiDRZeN4UrS25Fx+LRu4E98su0iYj8/fMVpPOovQ0btbQuh02qVFhqzM2n+9WPUCFTuE/FvvIMXxyRMV/km8=; 24:1cbgb3H7jyISopKHngmqfXEhhjQXuppCRbMu85GWnh4RESy55EWOwVYTReCX5VADXxZyFKi41uRxohV6zsBvg/bFmd3twRlP/Ten7Ml3pH8=; 7:qPvbqGh9+q/ovejrFzoUD8xJ2jN5msqDO8kdblrmn7d6EVYt+F5pn/vbu1zRv4iQMU0+R+FYDfFspRDw2V0gC313irs2+2Vf54sIT8+AHrf2vvZn00x33/3tpwQmvARnfXUd6Qu1ahAufBglEg9Z4/fVfesXsCZFlfdwCWXc53cqKaZ2xWBti8vA4bzNAx86Z7Gt7Ov6HEWIqRN0PkZ6EiWXCEzoYaH4UtZ3tqzwFBS+DdoyeiMzwNMRBed2y84o SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Sep 2016 14:10:23.8000 (UTC) X-MS-Exchange-CrossTenant-Id: 5afe0b00-7697-4969-b663-5eab37d5f47e X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e; Ip=[192.88.168.50]; Helo=[tx30smr01.am.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLUPR0301MB2004 Subject: [dpdk-dev] [PATCH v9 22/25] eal/pci: inherit rte_driver by rte_pci_driver X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 07 Sep 2016 14:10:26 -0000 Remove the 'name' member from rte_pci_driver and move to generic rte_driver. Most of the PMD drivers were initially using DRIVER_REGISTER_PCI(..) as well as assigning a name to eth_driver.pci_drv.name member. In this patch, only the original DRIVER_REGISTER_PCI(..) name has been populated into the rte_driver.name member - assignments through eth_driver has been removed. Signed-off-by: Jan Viktorin Signed-off-by: Shreyansh Jain --- app/test/test_pci.c | 10 +++++++--- app/test/virtual_pmd.c | 2 +- drivers/crypto/qat/qat_qp.c | 2 +- drivers/net/bnx2x/bnx2x_ethdev.c | 2 -- drivers/net/bnx2x/bnx2x_rxtx.c | 3 ++- drivers/net/bnxt/bnxt_ethdev.c | 1 - drivers/net/cxgbe/cxgbe_ethdev.c | 1 - drivers/net/cxgbe/sge.c | 7 ++++--- drivers/net/e1000/em_ethdev.c | 1 - drivers/net/e1000/igb_ethdev.c | 2 -- drivers/net/ena/ena_ethdev.c | 1 - drivers/net/enic/enic_ethdev.c | 1 - drivers/net/fm10k/fm10k_ethdev.c | 1 - drivers/net/i40e/i40e_ethdev.c | 1 - drivers/net/i40e/i40e_ethdev_vf.c | 1 - drivers/net/i40e/i40e_fdir.c | 2 +- drivers/net/ixgbe/ixgbe_ethdev.c | 2 -- drivers/net/mlx4/mlx4.c | 4 +++- drivers/net/mlx5/mlx5.c | 4 +++- drivers/net/nfp/nfp_net.c | 5 ++--- drivers/net/qede/qede_ethdev.c | 2 -- drivers/net/szedata2/rte_eth_szedata2.c | 1 - drivers/net/thunderx/nicvf_ethdev.c | 1 - drivers/net/virtio/virtio_ethdev.c | 3 +-- drivers/net/vmxnet3/vmxnet3_ethdev.c | 4 ++-- drivers/net/vmxnet3/vmxnet3_rxtx.c | 2 +- lib/librte_cryptodev/rte_cryptodev.c | 4 ++-- lib/librte_eal/common/eal_common_pci.c | 4 ++-- lib/librte_eal/common/include/rte_pci.h | 4 ++-- lib/librte_eal/linuxapp/eal/rte_eal_version.map | 3 +++ lib/librte_ether/rte_ethdev.c | 6 +++--- 31 files changed, 40 insertions(+), 47 deletions(-) diff --git a/app/test/test_pci.c b/app/test/test_pci.c index 69f78d9..ae597ab 100644 --- a/app/test/test_pci.c +++ b/app/test/test_pci.c @@ -78,14 +78,18 @@ struct rte_pci_id my_driver_id2[] = { }; struct rte_pci_driver my_driver = { - .name = "test_driver", + .driver = { + .name = "test_driver" + }, .devinit = my_driver_init, .id_table = my_driver_id, .drv_flags = 0, }; struct rte_pci_driver my_driver2 = { - .name = "test_driver2", + .driver = { + .name = "test_driver2" + }, .devinit = my_driver_init, .id_table = my_driver_id2, .drv_flags = 0, @@ -95,7 +99,7 @@ static int my_driver_init(__attribute__((unused)) struct rte_pci_driver *dr, struct rte_pci_device *dev) { - printf("My driver init called in %s\n", dr->name); + printf("My driver init called in %s\n", dr->driver.name); printf("%x:%x:%x.%d", dev->addr.domain, dev->addr.bus, dev->addr.devid, dev->addr.function); printf(" - vendor:%x device:%x\n", dev->id.vendor_id, dev->id.device_id); diff --git a/app/test/virtual_pmd.c b/app/test/virtual_pmd.c index 8a1f0d0..56eeb99 100644 --- a/app/test/virtual_pmd.c +++ b/app/test/virtual_pmd.c @@ -586,7 +586,7 @@ virtual_ethdev_create(const char *name, struct ether_addr *mac_addr, goto err; pci_dev->numa_node = socket_id; - pci_drv->name = virtual_ethdev_driver_name; + pci_drv->driver.name = virtual_ethdev_driver_name; pci_drv->id_table = id_table; if (isr_support) diff --git a/drivers/crypto/qat/qat_qp.c b/drivers/crypto/qat/qat_qp.c index 5de47e3..2e7188b 100644 --- a/drivers/crypto/qat/qat_qp.c +++ b/drivers/crypto/qat/qat_qp.c @@ -300,7 +300,7 @@ qat_queue_create(struct rte_cryptodev *dev, struct qat_queue *queue, * Allocate a memzone for the queue - create a unique name. */ snprintf(queue->memz_name, sizeof(queue->memz_name), "%s_%s_%d_%d_%d", - dev->driver->pci_drv.name, "qp_mem", dev->data->dev_id, + dev->driver->pci_drv.driver.name, "qp_mem", dev->data->dev_id, queue->hw_bundle_number, queue->hw_queue_number); qp_mz = queue_dma_zone_reserve(queue->memz_name, queue_size_bytes, socket_id); diff --git a/drivers/net/bnx2x/bnx2x_ethdev.c b/drivers/net/bnx2x/bnx2x_ethdev.c index 214b655..847888e 100644 --- a/drivers/net/bnx2x/bnx2x_ethdev.c +++ b/drivers/net/bnx2x/bnx2x_ethdev.c @@ -618,7 +618,6 @@ eth_bnx2xvf_dev_init(struct rte_eth_dev *eth_dev) static struct eth_driver rte_bnx2x_pmd = { .pci_drv = { - .name = "rte_bnx2x_pmd", .id_table = pci_id_bnx2x_map, .drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_INTR_LSC, .devinit = rte_eth_dev_pci_probe, @@ -633,7 +632,6 @@ static struct eth_driver rte_bnx2x_pmd = { */ static struct eth_driver rte_bnx2xvf_pmd = { .pci_drv = { - .name = "rte_bnx2xvf_pmd", .id_table = pci_id_bnx2xvf_map, .drv_flags = RTE_PCI_DRV_NEED_MAPPING, .devinit = rte_eth_dev_pci_probe, diff --git a/drivers/net/bnx2x/bnx2x_rxtx.c b/drivers/net/bnx2x/bnx2x_rxtx.c index 0ec4f89..7adea99 100644 --- a/drivers/net/bnx2x/bnx2x_rxtx.c +++ b/drivers/net/bnx2x/bnx2x_rxtx.c @@ -19,7 +19,8 @@ ring_dma_zone_reserve(struct rte_eth_dev *dev, const char *ring_name, const struct rte_memzone *mz; snprintf(z_name, sizeof(z_name), "%s_%s_%d_%d", - dev->driver->pci_drv.name, ring_name, dev->data->port_id, queue_id); + dev->driver->pci_drv.driver.name, ring_name, + dev->data->port_id, queue_id); mz = rte_memzone_lookup(z_name); if (mz) diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c index 28eb8b9..d5ca9bf 100644 --- a/drivers/net/bnxt/bnxt_ethdev.c +++ b/drivers/net/bnxt/bnxt_ethdev.c @@ -1045,7 +1045,6 @@ bnxt_dev_uninit(struct rte_eth_dev *eth_dev) { static struct eth_driver bnxt_rte_pmd = { .pci_drv = { - .name = "rte_" DRV_MODULE_NAME "_pmd", .id_table = bnxt_pci_id_map, .drv_flags = RTE_PCI_DRV_NEED_MAPPING, .devinit = rte_eth_dev_pci_probe, diff --git a/drivers/net/cxgbe/cxgbe_ethdev.c b/drivers/net/cxgbe/cxgbe_ethdev.c index 431b06d..a37b124 100644 --- a/drivers/net/cxgbe/cxgbe_ethdev.c +++ b/drivers/net/cxgbe/cxgbe_ethdev.c @@ -1039,7 +1039,6 @@ out_free_adapter: static struct eth_driver rte_cxgbe_pmd = { .pci_drv = { - .name = "rte_cxgbe_pmd", .id_table = cxgb4_pci_tbl, .drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_INTR_LSC, .devinit = rte_eth_dev_pci_probe, diff --git a/drivers/net/cxgbe/sge.c b/drivers/net/cxgbe/sge.c index ab5a842..736f08c 100644 --- a/drivers/net/cxgbe/sge.c +++ b/drivers/net/cxgbe/sge.c @@ -1645,7 +1645,8 @@ int t4_sge_alloc_rxq(struct adapter *adap, struct sge_rspq *iq, bool fwevtq, iq->size = cxgbe_roundup(iq->size, 16); snprintf(z_name, sizeof(z_name), "%s_%s_%d_%d", - eth_dev->driver->pci_drv.name, fwevtq ? "fwq_ring" : "rx_ring", + eth_dev->driver->pci_drv.driver.name, + fwevtq ? "fwq_ring" : "rx_ring", eth_dev->data->port_id, queue_id); snprintf(z_name_sw, sizeof(z_name_sw), "%s_sw_ring", z_name); @@ -1697,7 +1698,7 @@ int t4_sge_alloc_rxq(struct adapter *adap, struct sge_rspq *iq, bool fwevtq, fl->size = cxgbe_roundup(fl->size, 8); snprintf(z_name, sizeof(z_name), "%s_%s_%d_%d", - eth_dev->driver->pci_drv.name, + eth_dev->driver->pci_drv.driver.name, fwevtq ? "fwq_ring" : "fl_ring", eth_dev->data->port_id, queue_id); snprintf(z_name_sw, sizeof(z_name_sw), "%s_sw_ring", z_name); @@ -1893,7 +1894,7 @@ int t4_sge_alloc_eth_txq(struct adapter *adap, struct sge_eth_txq *txq, nentries = txq->q.size + s->stat_len / sizeof(struct tx_desc); snprintf(z_name, sizeof(z_name), "%s_%s_%d_%d", - eth_dev->driver->pci_drv.name, "tx_ring", + eth_dev->driver->pci_drv.driver.name, "tx_ring", eth_dev->data->port_id, queue_id); snprintf(z_name_sw, sizeof(z_name_sw), "%s_sw_ring", z_name); diff --git a/drivers/net/e1000/em_ethdev.c b/drivers/net/e1000/em_ethdev.c index 1281c8b..7f8fc21 100644 --- a/drivers/net/e1000/em_ethdev.c +++ b/drivers/net/e1000/em_ethdev.c @@ -391,7 +391,6 @@ eth_em_dev_uninit(struct rte_eth_dev *eth_dev) static struct eth_driver rte_em_pmd = { .pci_drv = { - .name = "rte_em_pmd", .id_table = pci_id_em_map, .drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_INTR_LSC | RTE_PCI_DRV_DETACHABLE, diff --git a/drivers/net/e1000/igb_ethdev.c b/drivers/net/e1000/igb_ethdev.c index 395477e..811d9ae 100644 --- a/drivers/net/e1000/igb_ethdev.c +++ b/drivers/net/e1000/igb_ethdev.c @@ -1078,7 +1078,6 @@ eth_igbvf_dev_uninit(struct rte_eth_dev *eth_dev) static struct eth_driver rte_igb_pmd = { .pci_drv = { - .name = "rte_igb_pmd", .id_table = pci_id_igb_map, .drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_INTR_LSC | RTE_PCI_DRV_DETACHABLE, @@ -1095,7 +1094,6 @@ static struct eth_driver rte_igb_pmd = { */ static struct eth_driver rte_igbvf_pmd = { .pci_drv = { - .name = "rte_igbvf_pmd", .id_table = pci_id_igbvf_map, .drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_DETACHABLE, .devinit = rte_eth_dev_pci_probe, diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c index ee906d4..4d6e83f 100644 --- a/drivers/net/ena/ena_ethdev.c +++ b/drivers/net/ena/ena_ethdev.c @@ -1686,7 +1686,6 @@ static uint16_t eth_ena_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, static struct eth_driver rte_ena_pmd = { .pci_drv = { - .name = "rte_ena_pmd", .id_table = pci_id_ena_map, .drv_flags = RTE_PCI_DRV_NEED_MAPPING, .devinit = rte_eth_dev_pci_probe, diff --git a/drivers/net/enic/enic_ethdev.c b/drivers/net/enic/enic_ethdev.c index 59812d0..c80b8f7 100644 --- a/drivers/net/enic/enic_ethdev.c +++ b/drivers/net/enic/enic_ethdev.c @@ -613,7 +613,6 @@ static int eth_enicpmd_dev_init(struct rte_eth_dev *eth_dev) static struct eth_driver rte_enic_pmd = { .pci_drv = { - .name = "rte_enic_pmd", .id_table = pci_id_enic_map, .drv_flags = RTE_PCI_DRV_NEED_MAPPING, .devinit = rte_eth_dev_pci_probe, diff --git a/drivers/net/fm10k/fm10k_ethdev.c b/drivers/net/fm10k/fm10k_ethdev.c index 26cdc10..11e4014 100644 --- a/drivers/net/fm10k/fm10k_ethdev.c +++ b/drivers/net/fm10k/fm10k_ethdev.c @@ -3055,7 +3055,6 @@ static const struct rte_pci_id pci_id_fm10k_map[] = { static struct eth_driver rte_pmd_fm10k = { .pci_drv = { - .name = "rte_pmd_fm10k", .id_table = pci_id_fm10k_map, .drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_INTR_LSC | RTE_PCI_DRV_DETACHABLE, diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c index dacaaea..892a221 100644 --- a/drivers/net/i40e/i40e_ethdev.c +++ b/drivers/net/i40e/i40e_ethdev.c @@ -663,7 +663,6 @@ static const struct rte_i40e_xstats_name_off rte_i40e_txq_prio_strings[] = { static struct eth_driver rte_i40e_pmd = { .pci_drv = { - .name = "rte_i40e_pmd", .id_table = pci_id_i40e_map, .drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_INTR_LSC | RTE_PCI_DRV_DETACHABLE, diff --git a/drivers/net/i40e/i40e_ethdev_vf.c b/drivers/net/i40e/i40e_ethdev_vf.c index 4a745f9..952bcd3 100644 --- a/drivers/net/i40e/i40e_ethdev_vf.c +++ b/drivers/net/i40e/i40e_ethdev_vf.c @@ -1554,7 +1554,6 @@ i40evf_dev_uninit(struct rte_eth_dev *eth_dev) */ static struct eth_driver rte_i40evf_pmd = { .pci_drv = { - .name = "rte_i40evf_pmd", .id_table = pci_id_i40evf_map, .drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_DETACHABLE, .devinit = rte_eth_dev_pci_probe, diff --git a/drivers/net/i40e/i40e_fdir.c b/drivers/net/i40e/i40e_fdir.c index f65c411..a4efc6d 100644 --- a/drivers/net/i40e/i40e_fdir.c +++ b/drivers/net/i40e/i40e_fdir.c @@ -251,7 +251,7 @@ i40e_fdir_setup(struct i40e_pf *pf) /* reserve memory for the fdir programming packet */ snprintf(z_name, sizeof(z_name), "%s_%s_%d", - eth_dev->driver->pci_drv.name, + eth_dev->driver->pci_drv.driver.name, I40E_FDIR_MZ_NAME, eth_dev->data->port_id); mz = i40e_memzone_reserve(z_name, I40E_FDIR_PKT_LEN, SOCKET_ID_ANY); diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c index d2f46bc..65ec846 100644 --- a/drivers/net/ixgbe/ixgbe_ethdev.c +++ b/drivers/net/ixgbe/ixgbe_ethdev.c @@ -1562,7 +1562,6 @@ eth_ixgbevf_dev_uninit(struct rte_eth_dev *eth_dev) static struct eth_driver rte_ixgbe_pmd = { .pci_drv = { - .name = "rte_ixgbe_pmd", .id_table = pci_id_ixgbe_map, .drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_INTR_LSC | RTE_PCI_DRV_DETACHABLE, @@ -1579,7 +1578,6 @@ static struct eth_driver rte_ixgbe_pmd = { */ static struct eth_driver rte_ixgbevf_pmd = { .pci_drv = { - .name = "rte_ixgbevf_pmd", .id_table = pci_id_ixgbevf_map, .drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_DETACHABLE, .devinit = rte_eth_dev_pci_probe, diff --git a/drivers/net/mlx4/mlx4.c b/drivers/net/mlx4/mlx4.c index b333ad6..3d2df9c 100644 --- a/drivers/net/mlx4/mlx4.c +++ b/drivers/net/mlx4/mlx4.c @@ -5911,7 +5911,9 @@ static const struct rte_pci_id mlx4_pci_id_map[] = { static struct eth_driver mlx4_driver = { .pci_drv = { - .name = MLX4_DRIVER_NAME, + .driver = { + .name = MLX4_DRIVER_NAME + }, .id_table = mlx4_pci_id_map, .devinit = mlx4_pci_devinit, .drv_flags = RTE_PCI_DRV_INTR_LSC, diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c index ebad7cb..82c11f3 100644 --- a/drivers/net/mlx5/mlx5.c +++ b/drivers/net/mlx5/mlx5.c @@ -728,7 +728,9 @@ static const struct rte_pci_id mlx5_pci_id_map[] = { static struct eth_driver mlx5_driver = { .pci_drv = { - .name = MLX5_DRIVER_NAME, + .driver = { + .name = MLX5_DRIVER_NAME + }, .id_table = mlx5_pci_id_map, .devinit = mlx5_pci_devinit, .drv_flags = RTE_PCI_DRV_INTR_LSC, diff --git a/drivers/net/nfp/nfp_net.c b/drivers/net/nfp/nfp_net.c index cbaf219..764d58d 100644 --- a/drivers/net/nfp/nfp_net.c +++ b/drivers/net/nfp/nfp_net.c @@ -214,7 +214,7 @@ ring_dma_zone_reserve(struct rte_eth_dev *dev, const char *ring_name, const struct rte_memzone *mz; snprintf(z_name, sizeof(z_name), "%s_%s_%d_%d", - dev->driver->pci_drv.name, + dev->driver->pci_drv.driver.name, ring_name, dev->data->port_id, queue_id); mz = rte_memzone_lookup(z_name); @@ -1000,7 +1000,7 @@ nfp_net_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) hw = NFP_NET_DEV_PRIVATE_TO_HW(dev->data->dev_private); - dev_info->driver_name = dev->driver->pci_drv.name; + dev_info->driver_name = dev->driver->pci_drv.driver.name; dev_info->max_rx_queues = (uint16_t)hw->max_rx_queues; dev_info->max_tx_queues = (uint16_t)hw->max_tx_queues; dev_info->min_rx_bufsize = ETHER_MIN_MTU; @@ -2460,7 +2460,6 @@ static struct rte_pci_id pci_id_nfp_net_map[] = { static struct eth_driver rte_nfp_net_pmd = { .pci_drv = { - .name = "rte_nfp_net_pmd", .id_table = pci_id_nfp_net_map, .drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_INTR_LSC | RTE_PCI_DRV_DETACHABLE, diff --git a/drivers/net/qede/qede_ethdev.c b/drivers/net/qede/qede_ethdev.c index a92dd3b..2ef432f 100644 --- a/drivers/net/qede/qede_ethdev.c +++ b/drivers/net/qede/qede_ethdev.c @@ -1478,7 +1478,6 @@ static struct rte_pci_id pci_id_qede_map[] = { static struct eth_driver rte_qedevf_pmd = { .pci_drv = { - .name = "rte_qedevf_pmd", .id_table = pci_id_qedevf_map, .drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_INTR_LSC, @@ -1492,7 +1491,6 @@ static struct eth_driver rte_qedevf_pmd = { static struct eth_driver rte_qede_pmd = { .pci_drv = { - .name = "rte_qede_pmd", .id_table = pci_id_qede_map, .drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_INTR_LSC, diff --git a/drivers/net/szedata2/rte_eth_szedata2.c b/drivers/net/szedata2/rte_eth_szedata2.c index 1b9e88a..4e4a318 100644 --- a/drivers/net/szedata2/rte_eth_szedata2.c +++ b/drivers/net/szedata2/rte_eth_szedata2.c @@ -1572,7 +1572,6 @@ static const struct rte_pci_id rte_szedata2_pci_id_table[] = { static struct eth_driver szedata2_eth_driver = { .pci_drv = { - .name = RTE_SZEDATA2_PCI_DRIVER_NAME, .id_table = rte_szedata2_pci_id_table, .devinit = rte_eth_dev_pci_probe, .devuninit = rte_eth_dev_pci_remove, diff --git a/drivers/net/thunderx/nicvf_ethdev.c b/drivers/net/thunderx/nicvf_ethdev.c index ad7d607..783acbf 100644 --- a/drivers/net/thunderx/nicvf_ethdev.c +++ b/drivers/net/thunderx/nicvf_ethdev.c @@ -1759,7 +1759,6 @@ static const struct rte_pci_id pci_id_nicvf_map[] = { static struct eth_driver rte_nicvf_pmd = { .pci_drv = { - .name = "rte_nicvf_pmd", .id_table = pci_id_nicvf_map, .drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_INTR_LSC, .devinit = rte_eth_dev_pci_probe, diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c index 5453709..7abacd3 100644 --- a/drivers/net/virtio/virtio_ethdev.c +++ b/drivers/net/virtio/virtio_ethdev.c @@ -1304,7 +1304,6 @@ eth_virtio_dev_uninit(struct rte_eth_dev *eth_dev) static struct eth_driver rte_virtio_pmd = { .pci_drv = { - .name = "rte_virtio_pmd", .id_table = pci_id_virtio_map, .drv_flags = RTE_PCI_DRV_DETACHABLE, .devinit = rte_eth_dev_pci_probe, @@ -1534,7 +1533,7 @@ virtio_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) struct virtio_hw *hw = dev->data->dev_private; if (dev->pci_dev) - dev_info->driver_name = dev->driver->pci_drv.name; + dev_info->driver_name = dev->driver->pci_drv.driver.name; else dev_info->driver_name = "virtio_user PMD"; dev_info->max_rx_queues = (uint16_t)hw->max_rx_queues; diff --git a/drivers/net/vmxnet3/vmxnet3_ethdev.c b/drivers/net/vmxnet3/vmxnet3_ethdev.c index d732979..857e59a 100644 --- a/drivers/net/vmxnet3/vmxnet3_ethdev.c +++ b/drivers/net/vmxnet3/vmxnet3_ethdev.c @@ -137,7 +137,8 @@ gpa_zone_reserve(struct rte_eth_dev *dev, uint32_t size, const struct rte_memzone *mz; snprintf(z_name, sizeof(z_name), "%s_%d_%s", - dev->driver->pci_drv.name, dev->data->port_id, post_string); + dev->driver->pci_drv.driver.name, + dev->data->port_id, post_string); mz = rte_memzone_lookup(z_name); if (mz) @@ -328,7 +329,6 @@ eth_vmxnet3_dev_uninit(struct rte_eth_dev *eth_dev) static struct eth_driver rte_vmxnet3_pmd = { .pci_drv = { - .name = "rte_vmxnet3_pmd", .id_table = pci_id_vmxnet3_map, .drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_DETACHABLE, .devinit = rte_eth_dev_pci_probe, diff --git a/drivers/net/vmxnet3/vmxnet3_rxtx.c b/drivers/net/vmxnet3/vmxnet3_rxtx.c index 9deeb3f..e6d93f3 100644 --- a/drivers/net/vmxnet3/vmxnet3_rxtx.c +++ b/drivers/net/vmxnet3/vmxnet3_rxtx.c @@ -774,7 +774,7 @@ ring_dma_zone_reserve(struct rte_eth_dev *dev, const char *ring_name, const struct rte_memzone *mz; snprintf(z_name, sizeof(z_name), "%s_%s_%d_%d", - dev->driver->pci_drv.name, ring_name, + dev->driver->pci_drv.driver.name, ring_name, dev->data->port_id, queue_id); mz = rte_memzone_lookup(z_name); diff --git a/lib/librte_cryptodev/rte_cryptodev.c b/lib/librte_cryptodev/rte_cryptodev.c index c81e366..2e17169 100644 --- a/lib/librte_cryptodev/rte_cryptodev.c +++ b/lib/librte_cryptodev/rte_cryptodev.c @@ -459,7 +459,7 @@ rte_cryptodev_pci_probe(struct rte_pci_driver *pci_drv, return 0; CDEV_LOG_ERR("driver %s: crypto_dev_init(vendor_id=0x%x device_id=0x%x)" - " failed", pci_drv->name, + " failed", pci_drv->driver.name, (unsigned) pci_dev->id.vendor_id, (unsigned) pci_dev->id.device_id); @@ -870,7 +870,7 @@ rte_cryptodev_info_get(uint8_t dev_id, struct rte_cryptodev_info *dev_info) dev_info->pci_dev = dev->pci_dev; if (dev->driver) - dev_info->driver_name = dev->driver->pci_drv.name; + dev_info->driver_name = dev->driver->pci_drv.driver.name; } diff --git a/lib/librte_eal/common/eal_common_pci.c b/lib/librte_eal/common/eal_common_pci.c index da0038f..308c2a9 100644 --- a/lib/librte_eal/common/eal_common_pci.c +++ b/lib/librte_eal/common/eal_common_pci.c @@ -195,7 +195,7 @@ rte_eal_pci_probe_one_driver(struct rte_pci_driver *dr, struct rte_pci_device *d } RTE_LOG(INFO, EAL, " probe driver: %x:%x %s\n", dev->id.vendor_id, - dev->id.device_id, dr->name); + dev->id.device_id, dr->driver.name); if (dr->drv_flags & RTE_PCI_DRV_NEED_MAPPING) { /* map resources for devices that use igb_uio */ @@ -255,7 +255,7 @@ rte_eal_pci_detach_dev(struct rte_pci_driver *dr, loc->function, dev->numa_node); RTE_LOG(DEBUG, EAL, " remove driver: %x:%x %s\n", dev->id.vendor_id, - dev->id.device_id, dr->name); + dev->id.device_id, dr->driver.name); if (dr->devuninit && (dr->devuninit(dev) < 0)) return -1; /* negative value is an error */ diff --git a/lib/librte_eal/common/include/rte_pci.h b/lib/librte_eal/common/include/rte_pci.h index e2d457a..4d8daf7 100644 --- a/lib/librte_eal/common/include/rte_pci.h +++ b/lib/librte_eal/common/include/rte_pci.h @@ -199,7 +199,7 @@ typedef int (pci_devuninit_t)(struct rte_pci_device *); */ struct rte_pci_driver { TAILQ_ENTRY(rte_pci_driver) next; /**< Next in list. */ - const char *name; /**< Driver name. */ + struct rte_driver driver; /**< Inherit core driver. */ pci_devinit_t *devinit; /**< Device init. function. */ pci_devuninit_t *devuninit; /**< Device uninit function. */ const struct rte_pci_id *id_table; /**< ID table, NULL terminated. */ @@ -491,7 +491,7 @@ void rte_eal_pci_register(struct rte_pci_driver *driver); RTE_INIT(pciinitfn_ ##nm); \ static void pciinitfn_ ##nm(void) \ { \ - (pci_drv).name = RTE_STR(nm);\ + (pci_drv).driver.name = RTE_STR(nm);\ rte_eal_pci_register(&pci_drv); \ }\ DRIVER_EXPORT_NAME(nm, __COUNTER__) diff --git a/lib/librte_eal/linuxapp/eal/rte_eal_version.map b/lib/librte_eal/linuxapp/eal/rte_eal_version.map index c0bd391..b8bfd4b 100644 --- a/lib/librte_eal/linuxapp/eal/rte_eal_version.map +++ b/lib/librte_eal/linuxapp/eal/rte_eal_version.map @@ -172,4 +172,7 @@ DPDK_16.11 { rte_eal_dev_attach; rte_eal_dev_detach; + rte_eal_vdrv_register; + rte_eal_vdrv_unregister; + } DPDK_16.07; diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c index cf38f32..d7179e1 100644 --- a/lib/librte_ether/rte_ethdev.c +++ b/lib/librte_ether/rte_ethdev.c @@ -276,7 +276,7 @@ rte_eth_dev_pci_probe(struct rte_pci_driver *pci_drv, return 0; RTE_PMD_DEBUG_TRACE("driver %s: eth_dev_init(vendor_id=0x%u device_id=0x%x) failed\n", - pci_drv->name, + pci_drv->driver.name, (unsigned) pci_dev->id.vendor_id, (unsigned) pci_dev->id.device_id); if (rte_eal_process_type() == RTE_PROC_PRIMARY) @@ -2566,7 +2566,7 @@ rte_eth_dma_zone_reserve(const struct rte_eth_dev *dev, const char *ring_name, const struct rte_memzone *mz; snprintf(z_name, sizeof(z_name), "%s_%s_%d_%d", - dev->driver->pci_drv.name, ring_name, + dev->driver->pci_drv.driver.name, ring_name, dev->data->port_id, queue_id); mz = rte_memzone_lookup(z_name); @@ -3208,7 +3208,7 @@ rte_eth_copy_pci_info(struct rte_eth_dev *eth_dev, struct rte_pci_device *pci_de eth_dev->data->kdrv = pci_dev->kdrv; eth_dev->data->numa_node = pci_dev->numa_node; - eth_dev->data->drv_name = pci_dev->driver->name; + eth_dev->data->drv_name = pci_dev->driver->driver.name; } int -- 2.7.4