get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 15675,
    "url": "https://patches.dpdk.org/api/patches/15675/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/1473257297-7221-23-git-send-email-shreyansh.jain@nxp.com/",
    "project": {
        "id": 1,
        "url": "https://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": "<1473257297-7221-23-git-send-email-shreyansh.jain@nxp.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1473257297-7221-23-git-send-email-shreyansh.jain@nxp.com",
    "date": "2016-09-07T14:08:14",
    "name": "[dpdk-dev,v9,22/25] eal/pci: inherit rte_driver by rte_pci_driver",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "17b1f4c0f341b5e057b55cfe2d249e3d2113ea27",
    "submitter": {
        "id": 497,
        "url": "https://patches.dpdk.org/api/people/497/?format=api",
        "name": "Shreyansh Jain",
        "email": "shreyansh.jain@nxp.com"
    },
    "delegate": null,
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/1473257297-7221-23-git-send-email-shreyansh.jain@nxp.com/mbox/",
    "series": [],
    "comments": "https://patches.dpdk.org/api/patches/15675/comments/",
    "check": "pending",
    "checks": "https://patches.dpdk.org/api/patches/15675/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@dpdk.org",
        "Delivered-To": "patchwork@dpdk.org",
        "Received": [
            "from [92.243.14.124] (localhost [IPv6:::1])\n\tby dpdk.org (Postfix) with ESMTP id 22225922C;\n\tWed,  7 Sep 2016 16:10:29 +0200 (CEST)",
            "from NAM01-BN3-obe.outbound.protection.outlook.com\n\t(mail-bn3nam01on0049.outbound.protection.outlook.com [104.47.33.49])\n\tby dpdk.org (Postfix) with ESMTP id DFFA19205\n\tfor <dev@dpdk.org>; Wed,  7 Sep 2016 16:10:25 +0200 (CEST)",
            "from BN3PR0301CA0078.namprd03.prod.outlook.com (10.160.152.174) by\n\tBLUPR0301MB2004.namprd03.prod.outlook.com (10.164.22.18) with\n\tMicrosoft SMTP Server (version=TLS1_0,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id\n\t15.1.599.9; Wed, 7 Sep 2016 14:10:24 +0000",
            "from BN1BFFO11FD017.protection.gbl (2a01:111:f400:7c10::1:181) by\n\tBN3PR0301CA0078.outlook.office365.com (2a01:111:e400:401e::46)\n\twith Microsoft SMTP Server (version=TLS1_0,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384)\n\tid 15.1.609.9 via Frontend Transport; Wed, 7 Sep 2016 14:10:24 +0000",
            "from tx30smr01.am.freescale.net (192.88.168.50) by\n\tBN1BFFO11FD017.mail.protection.outlook.com (10.58.144.80) with\n\tMicrosoft SMTP Server (version=TLS1_0,\n\tcipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.587.6\n\tvia Frontend Transport; Wed, 7 Sep 2016 14:10:23 +0000",
            "from Tophie.ap.freescale.net ([10.232.14.87])\n\tby tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id\n\tu87E8BD7013556; Wed, 7 Sep 2016 07:10:21 -0700"
        ],
        "Authentication-Results": "spf=fail (sender IP is 192.88.168.50)\n\tsmtp.mailfrom=nxp.com; rehivetech.com; dkim=none (message not signed)\n\theader.d=none; rehivetech.com;\n\tdmarc=fail action=none header.from=nxp.com; ",
        "Received-SPF": "Fail (protection.outlook.com: domain of nxp.com does not\n\tdesignate 192.88.168.50 as permitted sender)\n\treceiver=protection.outlook.com; \n\tclient-ip=192.88.168.50; helo=tx30smr01.am.freescale.net;",
        "From": "Shreyansh Jain <shreyansh.jain@nxp.com>",
        "To": "<dev@dpdk.org>",
        "CC": "<hemant.agrawal@nxp.com>, Shreyansh Jain <shreyansh.jain@nxp.com>, \"Jan\n\tViktorin\" <viktorin@rehivetech.com>",
        "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>\n\t<1473257297-7221-1-git-send-email-shreyansh.jain@nxp.com>",
        "X-EOPAttributedMessage": "0",
        "X-Matching-Connectors": "131177310239872437;\n\t(91ab9b29-cfa4-454e-5278-08d120cd25b8); ()",
        "X-Forefront-Antispam-Report": "CIP:192.88.168.50; IPV:NLI; CTRY:US; EFV:NLI;\n\tSFV:NSPM;\n\tSFS:(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);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:BLUPR0301MB2004;\n\tH:tx30smr01.am.freescale.net; \n\tFPR:; SPF:Fail; PTR:InfoDomainNonexistent; MX:1; A:1; LANG:en; ",
        "X-Microsoft-Exchange-Diagnostics": [
            "1; BN1BFFO11FD017;\n\t1:cqQAjFuR7TsiDgS2nL5i7RiCTRu5kyyOF2kZgleWiCT8gUuBWG9bgN3ZNKeSxc5dmaGt1UxWLs5SYZ4/FVoc8bRxgU5FkCcohzD2tT1skwe2dNYUbHZa9Wa2bNOVnowEnlkC/tyQBt/AbtrDAoda2qgn6jlQpEP+DR94la+ksMJNd6diYluIr2j2AYZ4mQNpXsoss/myKanmCIzxUZZif85q9FCiraHmzth57m+PKBpyWaCUPf1mRoivTKUwr4FS2jmTQqkGX5h2KePlZeFOmVw8yPeFzmQXyZ6HAkumuEpwI3zGvUZ27skYsvEbGsVE/c1fonrVPlTdhy8pHqyHI3099Qt8VljT9SjIxA0pwJGHFjIv+1eP3t/haey9XP4ODy2jsNqF5aaaorwdAEoGw9Z2qX8tRYzRjZFC9YR6QZpq14167pF2JpcrN9IE16SlOwMHNkLALoExZGhjQS2Q/0wO8U0+wT7neW6jTeyH02VekGVqt8DrTc+FSaDwj62AjqtoheBeertqddIuuRmRRwEeh9Qf9UgTxTX67gZlKRQSt7ndsPrOiREe7cuyvV+t8VvLo4Z2AsG3s9zJQtIfKleWUTvIftJDaXm1jYyM9lDS7n64SJ8n1hTFhtFB1IXt",
            "1; BLUPR0301MB2004;\n\t2:yL47kkq2yBjj/NIZVFE75QjXuqlgDwpsXCOhThBY8YnzuLlEyE9oMkl2Em4noLmUkiDDvGBV3yW4cRVFxUOWOEyMvanpVS4K0+zHUs/12V5yIu/HuyfHKbzRYV7do3GkW5hab4cAAUPvaIRCnriEaooXskY27vOWEQ7ykpY/JaMayon5cmqYRiG7NVi5AErN;\n\t3:2iP74naNtsy02TibeUVPxFxYy8MDA9Dz46u/sX6BL2HLXWfsPImshe9AqTuMLpYVU3fQwsvjBKylgLvM2hG0nLtOrTzg6G6kQohCwaSSH5h5nzLe3S0BZj6VI8DLWgZ11IOL3HXGJLaweB+Eii3nU6G3O5Y5mzP+QtnslxJicLLyoUWrVu0cPx/3PF9etbAqBfzuIxtVvMsDrwcgWQTRPOof1iZ5j9lFVoWpz2r81U8=",
            "1; BLUPR0301MB2004;\n\t25:WrJDlZMPOiCPa9UcqsYWajaMlrlIc5loeGXQKq448hTvBuh6zBPJRNY+3y+3vXn6yqGh9IuOCrOb8VxU3Yc3elKQddmw3XjgZTiNNFfFkv4I1CxUhPY+AkxNl/3P419EhV6n8q3N0kB6MhZH0ryPb1DJ41F6rj0lnkZWDfooTdspHp4Tr2os5ZE58dKAGToMuzOb0X55PjRRGfJTy3m8lpIfagPH3ixu/dENIySlZiqPhukD4y6PpHwsRK5NxG43uqQ7bYb+hBG3pzy3ra5PDNHLlH0y/5zSOISykUJcDU7Qz4qTHV2zaywBgXUOQxfUbr7OR4vHq85U2YoYEPkYh0poBMO6CRRD2kjih3iz0Cv5/XUonHQjPQWUTnVUt2+OUF9YZ8CoRcwqVlMEkL1/kmPmdLDbNJqg3aMDvkpsQii+ChK++c7ekXlcA2KVwcJ2FQK8zENFSYImvT749pGcOfW/7yzt2ZB2ICMs4azWVmHarIvumB5ftT5/5yYnjjMSxBFO9yRrpsDJRmAENulI9cp6GHJgBwOX7p+yiU2WbIJHu0uOfTP+NtBBMH1LcS5CdFuN3yS+bTiwTDROaui/dZ2+TMiBDSEQXtxb8h741h4GvVhueYzNz3I3ooK2bREgntUz71WQ90QmdfE8zu5IWDjiekpFRCqzScn4rn118JM0nZRu9SFdNwQnuIq3pVJoAX1+IHzv+uBgg9h0CAP5Z5M1hrcc33W5jDfJlgVE5n0=",
            "1; BLUPR0301MB2004;\n\t31:J65jJ6gsHU2VphvFMbRiCUuvyri4rZKCM1hfo8eZSrC1kdRnufbWf78NAD0HfbQk8cwrUJSG4R7tKVXIGpZkLlqd8HcQmj/VWnD1wId/4EpGaAerBlWNY5JrvfLCaHBB3onri7ZdzOMVJjzHgS1J0vVwfApEKzKGYAqS5EBoLn2GnkRQTm2MCMkXdVaLGsDRavWu54LTQo3US94PA4CbKbJrRChZGkmcALHQEz16eQA=;\n\t4:fBb2AGFT1xsMvSePLsr6nmFWHzP3qwUX9GeKcjIcs/GqnHVm2TyYsAFavvQnCigZLbLyoZfQ6HRMCUEZgjHQLZ0TfcqY6joa829zQXzlcr+lZCXQwNl+KpQucYZb3Aa0avgSIVqTdZk9hWP6c5+LnjNhQ+ZFIzcy8/YiQuJ/eHYQH8NEjBvwDNwZnKFtchT7vURJwuxwPA6zOGqlRYBXm3EyKU9N6ab4P0gpFNRI8P9D+oTqZjYAzqrXXxFb2sFZHXncpzapO/BB+zu1T+z2vdUJndjkGVFYMPJH020E+mdPQzcbJ84tEedicVIXPXgQxr5UNsvm61KmfhJii/TMH9uNQXXnjCF4UHz5zhqRw3j3ilXVTYwe96wjeUCqNOw8P/SrGLyebA2S3ccAoOD4jbVkHx1DwK/w5A1MStWemCcBIXbDvonsAERBKLN+Vp5tjgpdkpFjPVXbBttkVRXy1IRkAtZ2aVA4rZP7gZEz969V8NObPyTxV15ghQ3h9co+BcqL0up1amyXIHWwHJgLBQoI0wnIuV6AO8eKjcU8I50=",
            "=?us-ascii?Q?1; BLUPR0301MB2004;\n\t23:Sgdl+P8+JzqfPoQe3GbP1Mat1kwzqEvLLy/YEWr?=\n\t=?us-ascii?Q?SaeYagrxFbfvQvFG8HL4jseSJqIxJRzYaXeXUtZwU/T2n4L1Pm60QXs6DPEr?=\n\t=?us-ascii?Q?FA24g501PcYYkCPNRwxLvAGIUDTO1R4PMPTkqUOQ7DjHvmg5VZov8y8XrETE?=\n\t=?us-ascii?Q?EzCBEcSK6MwNPCxssUQz8nDWIj1h9zAgl7aQjTig0HdV7hotaaXwK63thfGp?=\n\t=?us-ascii?Q?vh9YRXfzR8E3XNzMCReXVaFiHXCLrhQ80ASeqNK5uPPVpTdSOWvYNdrUTArH?=\n\t=?us-ascii?Q?hlA0jk6KzVd5j6vfTzpMq+pVtNN3VBJgBdx/YEAl2BctOgsTZcVGdEGXWqD/?=\n\t=?us-ascii?Q?yszK5TWAiVq7Ji2WZRHjPfOzuUqdBL34nPnB9A9nrba+wbb42qsOIQJICXg+?=\n\t=?us-ascii?Q?EUzEVaJG+o6o7FYDrYBto4zyegjnnrPQYN50wnKvkq1O8oM2eqa+E+lryXJu?=\n\t=?us-ascii?Q?AsexfSpUDAT4ebvojqeGeaZM6Ev7F98nZg7wDO1sDE7nHhavP9bagxvAqPTi?=\n\t=?us-ascii?Q?c3TCsTRAK5EnPrDbojzeDpqhDLQcC+gV+Y2NC+jPWME99T5bDgIxbF5FWZOa?=\n\t=?us-ascii?Q?56NPi8oJbCU/csF1iJcF/JKV6Alp/RAuaEdfpdrwdoYxgM7EOJTm/c5Zeh5i?=\n\t=?us-ascii?Q?YD82ow3lnbq2nOw01x2I3eBSBjXsT0TlXRxPqvG8Wby5jdqXuk6/cJM1kQCe?=\n\t=?us-ascii?Q?hOwOOQinbW7RbkVS18vyFuPjZUSazhQ5c9hSRXDGCyTplFDMr0hIExrUsqpe?=\n\t=?us-ascii?Q?h6RoqUEBBwLd8daHsgi+Z6QHfKyDhkMM3Lcmvy8rH5kdu9Aab1kzwvmrOWpF?=\n\t=?us-ascii?Q?jgw878eJWotlmcWzyjmRKdVu/SJgfUZPitL/i4dr216IKJXXkQdCnKD66N4v?=\n\t=?us-ascii?Q?TSsXZscuypXhFZuysv8uAtytqZFH/Kqw2Y058jCWrqvD7jjbBgougHoPS8ov?=\n\t=?us-ascii?Q?Sd9rb74RJHWZjUgpDDbinwbNykfH62rvf3QAHZiZv9U2b73GiTGzTrpYY3Y3?=\n\t=?us-ascii?Q?+MNw3t1cWwfYi5V36UIMQWfphZW0quoB8yxZu5kVZhPU71ZEVrAGzw/wqt4d?=\n\t=?us-ascii?Q?yZhEyWY4yGvcSy1/ALfiDQ5Vk5YKLpsuwQldMfXLLOB8iWgyLCF0lN1187Zv?=\n\t=?us-ascii?Q?U7Q+GiFjrBcRty9uAsTz7i7JPLVU0S+vtmhKfQkfmTLlr8wqY7YoU8ZQdLn5?=\n\t=?us-ascii?Q?XOsbl281/dtlfXTzLSr4WMG4VhqLaqdG4ybQV4trc5WCKomJu4TBgZgod+w?=\n\t=?us-ascii?Q?=3D=3D?=",
            "1; BLUPR0301MB2004;\n\t6:1j8AyBQHglF5V9RTLlEFhwaVh/RUZRuJksASATRubXcgwr1LaeN/IXMDlTKs7yGqCzDd6oraLuFUkxqEvdW/kNjJpVXtz9FrF8xMYX1w2CaCFAtoNxsZgBC09y+nfhJDGrxsgMU48Tcjvl5XySzmx/cxA6MERIYI0J0t5rE8RtPCwIKfWin9efEiZpdNrRgl4cnh+6EV+997g24jdbxZwRJ2vQjOoAJr2KAVEiwx0f7j+2nWOeXScayeiKSDC49trq5e8k4ORiP18VSGxFwdLBS9ascqh1plW8VduiRELmg=;\n\t5:WCJDxEEXM83BprKynlefRch+oAkqRE36We6MVW2YR7yhpLY30tz78wSnhMN3qAyhnGOjisvOpanJgFiO1qoX9FhjiDRZeN4UrS25Fx+LRu4E98su0iYj8/fMVpPOovQ0btbQuh02qVFhqzM2n+9WPUCFTuE/FvvIMXxyRMV/km8=;\n\t24:1cbgb3H7jyISopKHngmqfXEhhjQXuppCRbMu85GWnh4RESy55EWOwVYTReCX5VADXxZyFKi41uRxohV6zsBvg/bFmd3twRlP/Ten7Ml3pH8=;\n\t7:qPvbqGh9+q/ovejrFzoUD8xJ2jN5msqDO8kdblrmn7d6EVYt+F5pn/vbu1zRv4iQMU0+R+FYDfFspRDw2V0gC313irs2+2Vf54sIT8+AHrf2vvZn00x33/3tpwQmvARnfXUd6Qu1ahAufBglEg9Z4/fVfesXsCZFlfdwCWXc53cqKaZ2xWBti8vA4bzNAx86Z7Gt7Ov6HEWIqRN0PkZ6EiWXCEzoYaH4UtZ3tqzwFBS+DdoyeiMzwNMRBed2y84o"
        ],
        "MIME-Version": "1.0",
        "Content-Type": "text/plain",
        "X-MS-Office365-Filtering-Correlation-Id": "096f025d-f9d4-42c8-55b5-08d3d728b5e7",
        "X-Microsoft-Antispam": "UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BLUPR0301MB2004;",
        "X-Microsoft-Antispam-PRVS": "<BLUPR0301MB2004D51A487CBE7262BAC16690F80@BLUPR0301MB2004.namprd03.prod.outlook.com>",
        "X-Exchange-Antispam-Report-Test": "UriScan:(185117386973197);",
        "X-Exchange-Antispam-Report-CFA-Test": "BCL:0; PCL:0;\n\tRULEID:(6040176)(601004)(2401047)(13015025)(13017025)(13023025)(13024025)(13018025)(8121501046)(5005006)(3002001)(10201501046)(6055026);\n\tSRVR:BLUPR0301MB2004; BCL:0; PCL:0; RULEID:(400006);\n\tSRVR:BLUPR0301MB2004; ",
        "X-Forefront-PRVS": "0058ABBBC7",
        "SpamDiagnosticOutput": "1:99",
        "SpamDiagnosticMetadata": "NSPM",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "07 Sep 2016 14:10:23.8000\n\t(UTC)",
        "X-MS-Exchange-CrossTenant-Id": "5afe0b00-7697-4969-b663-5eab37d5f47e",
        "X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp": "TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e;\n\tIp=[192.88.168.50]; \n\tHelo=[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\n\trte_pci_driver",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "patches and discussions about DPDK <dev.dpdk.org>",
        "List-Unsubscribe": "<http://dpdk.org/ml/options/dev>,\n\t<mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://dpdk.org/ml/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<http://dpdk.org/ml/listinfo/dev>,\n\t<mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "Remove the 'name' member from rte_pci_driver and move to generic rte_driver.\n\nMost of the PMD drivers were initially using DRIVER_REGISTER_PCI(<name>..)\nas well as assigning a name to eth_driver.pci_drv.name member.\nIn this patch, only the original DRIVER_REGISTER_PCI(<name>..) name has been\npopulated into the rte_driver.name member - assignments through eth_driver\nhas been removed.\n\nSigned-off-by: Jan Viktorin <viktorin@rehivetech.com>\nSigned-off-by: Shreyansh Jain <shreyansh.jain@nxp.com>\n---\n app/test/test_pci.c                             | 10 +++++++---\n app/test/virtual_pmd.c                          |  2 +-\n drivers/crypto/qat/qat_qp.c                     |  2 +-\n drivers/net/bnx2x/bnx2x_ethdev.c                |  2 --\n drivers/net/bnx2x/bnx2x_rxtx.c                  |  3 ++-\n drivers/net/bnxt/bnxt_ethdev.c                  |  1 -\n drivers/net/cxgbe/cxgbe_ethdev.c                |  1 -\n drivers/net/cxgbe/sge.c                         |  7 ++++---\n drivers/net/e1000/em_ethdev.c                   |  1 -\n drivers/net/e1000/igb_ethdev.c                  |  2 --\n drivers/net/ena/ena_ethdev.c                    |  1 -\n drivers/net/enic/enic_ethdev.c                  |  1 -\n drivers/net/fm10k/fm10k_ethdev.c                |  1 -\n drivers/net/i40e/i40e_ethdev.c                  |  1 -\n drivers/net/i40e/i40e_ethdev_vf.c               |  1 -\n drivers/net/i40e/i40e_fdir.c                    |  2 +-\n drivers/net/ixgbe/ixgbe_ethdev.c                |  2 --\n drivers/net/mlx4/mlx4.c                         |  4 +++-\n drivers/net/mlx5/mlx5.c                         |  4 +++-\n drivers/net/nfp/nfp_net.c                       |  5 ++---\n drivers/net/qede/qede_ethdev.c                  |  2 --\n drivers/net/szedata2/rte_eth_szedata2.c         |  1 -\n drivers/net/thunderx/nicvf_ethdev.c             |  1 -\n drivers/net/virtio/virtio_ethdev.c              |  3 +--\n drivers/net/vmxnet3/vmxnet3_ethdev.c            |  4 ++--\n drivers/net/vmxnet3/vmxnet3_rxtx.c              |  2 +-\n lib/librte_cryptodev/rte_cryptodev.c            |  4 ++--\n lib/librte_eal/common/eal_common_pci.c          |  4 ++--\n lib/librte_eal/common/include/rte_pci.h         |  4 ++--\n lib/librte_eal/linuxapp/eal/rte_eal_version.map |  3 +++\n lib/librte_ether/rte_ethdev.c                   |  6 +++---\n 31 files changed, 40 insertions(+), 47 deletions(-)",
    "diff": "diff --git a/app/test/test_pci.c b/app/test/test_pci.c\nindex 69f78d9..ae597ab 100644\n--- a/app/test/test_pci.c\n+++ b/app/test/test_pci.c\n@@ -78,14 +78,18 @@ struct rte_pci_id my_driver_id2[] = {\n };\n \n struct rte_pci_driver my_driver = {\n-\t.name = \"test_driver\",\n+\t.driver = {\n+\t\t.name = \"test_driver\"\n+\t},\n \t.devinit = my_driver_init,\n \t.id_table = my_driver_id,\n \t.drv_flags = 0,\n };\n \n struct rte_pci_driver my_driver2 = {\n-\t.name = \"test_driver2\",\n+\t.driver = {\n+\t\t.name = \"test_driver2\"\n+\t},\n \t.devinit = my_driver_init,\n \t.id_table = my_driver_id2,\n \t.drv_flags = 0,\n@@ -95,7 +99,7 @@ static int\n my_driver_init(__attribute__((unused)) struct rte_pci_driver *dr,\n \t       struct rte_pci_device *dev)\n {\n-\tprintf(\"My driver init called in %s\\n\", dr->name);\n+\tprintf(\"My driver init called in %s\\n\", dr->driver.name);\n \tprintf(\"%x:%x:%x.%d\", dev->addr.domain, dev->addr.bus,\n \t       dev->addr.devid, dev->addr.function);\n \tprintf(\" - vendor:%x device:%x\\n\", dev->id.vendor_id, dev->id.device_id);\ndiff --git a/app/test/virtual_pmd.c b/app/test/virtual_pmd.c\nindex 8a1f0d0..56eeb99 100644\n--- a/app/test/virtual_pmd.c\n+++ b/app/test/virtual_pmd.c\n@@ -586,7 +586,7 @@ virtual_ethdev_create(const char *name, struct ether_addr *mac_addr,\n \t\tgoto err;\n \n \tpci_dev->numa_node = socket_id;\n-\tpci_drv->name = virtual_ethdev_driver_name;\n+\tpci_drv->driver.name = virtual_ethdev_driver_name;\n \tpci_drv->id_table = id_table;\n \n \tif (isr_support)\ndiff --git a/drivers/crypto/qat/qat_qp.c b/drivers/crypto/qat/qat_qp.c\nindex 5de47e3..2e7188b 100644\n--- a/drivers/crypto/qat/qat_qp.c\n+++ b/drivers/crypto/qat/qat_qp.c\n@@ -300,7 +300,7 @@ qat_queue_create(struct rte_cryptodev *dev, struct qat_queue *queue,\n \t * Allocate a memzone for the queue - create a unique name.\n \t */\n \tsnprintf(queue->memz_name, sizeof(queue->memz_name), \"%s_%s_%d_%d_%d\",\n-\t\tdev->driver->pci_drv.name, \"qp_mem\", dev->data->dev_id,\n+\t\tdev->driver->pci_drv.driver.name, \"qp_mem\", dev->data->dev_id,\n \t\tqueue->hw_bundle_number, queue->hw_queue_number);\n \tqp_mz = queue_dma_zone_reserve(queue->memz_name, queue_size_bytes,\n \t\t\tsocket_id);\ndiff --git a/drivers/net/bnx2x/bnx2x_ethdev.c b/drivers/net/bnx2x/bnx2x_ethdev.c\nindex 214b655..847888e 100644\n--- a/drivers/net/bnx2x/bnx2x_ethdev.c\n+++ b/drivers/net/bnx2x/bnx2x_ethdev.c\n@@ -618,7 +618,6 @@ eth_bnx2xvf_dev_init(struct rte_eth_dev *eth_dev)\n \n static struct eth_driver rte_bnx2x_pmd = {\n \t.pci_drv = {\n-\t\t.name = \"rte_bnx2x_pmd\",\n \t\t.id_table = pci_id_bnx2x_map,\n \t\t.drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_INTR_LSC,\n \t\t.devinit = rte_eth_dev_pci_probe,\n@@ -633,7 +632,6 @@ static struct eth_driver rte_bnx2x_pmd = {\n  */\n static struct eth_driver rte_bnx2xvf_pmd = {\n \t.pci_drv = {\n-\t\t.name = \"rte_bnx2xvf_pmd\",\n \t\t.id_table = pci_id_bnx2xvf_map,\n \t\t.drv_flags = RTE_PCI_DRV_NEED_MAPPING,\n \t\t.devinit = rte_eth_dev_pci_probe,\ndiff --git a/drivers/net/bnx2x/bnx2x_rxtx.c b/drivers/net/bnx2x/bnx2x_rxtx.c\nindex 0ec4f89..7adea99 100644\n--- a/drivers/net/bnx2x/bnx2x_rxtx.c\n+++ b/drivers/net/bnx2x/bnx2x_rxtx.c\n@@ -19,7 +19,8 @@ ring_dma_zone_reserve(struct rte_eth_dev *dev, const char *ring_name,\n \tconst struct rte_memzone *mz;\n \n \tsnprintf(z_name, sizeof(z_name), \"%s_%s_%d_%d\",\n-\t\t\tdev->driver->pci_drv.name, ring_name, dev->data->port_id, queue_id);\n+\t\t\tdev->driver->pci_drv.driver.name, ring_name,\n+\t\t\tdev->data->port_id, queue_id);\n \n \tmz = rte_memzone_lookup(z_name);\n \tif (mz)\ndiff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c\nindex 28eb8b9..d5ca9bf 100644\n--- a/drivers/net/bnxt/bnxt_ethdev.c\n+++ b/drivers/net/bnxt/bnxt_ethdev.c\n@@ -1045,7 +1045,6 @@ bnxt_dev_uninit(struct rte_eth_dev *eth_dev) {\n \n static struct eth_driver bnxt_rte_pmd = {\n \t.pci_drv = {\n-\t\t    .name = \"rte_\" DRV_MODULE_NAME \"_pmd\",\n \t\t    .id_table = bnxt_pci_id_map,\n \t\t    .drv_flags = RTE_PCI_DRV_NEED_MAPPING,\n \t\t    .devinit = rte_eth_dev_pci_probe,\ndiff --git a/drivers/net/cxgbe/cxgbe_ethdev.c b/drivers/net/cxgbe/cxgbe_ethdev.c\nindex 431b06d..a37b124 100644\n--- a/drivers/net/cxgbe/cxgbe_ethdev.c\n+++ b/drivers/net/cxgbe/cxgbe_ethdev.c\n@@ -1039,7 +1039,6 @@ out_free_adapter:\n \n static struct eth_driver rte_cxgbe_pmd = {\n \t.pci_drv = {\n-\t\t.name = \"rte_cxgbe_pmd\",\n \t\t.id_table = cxgb4_pci_tbl,\n \t\t.drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_INTR_LSC,\n \t\t.devinit = rte_eth_dev_pci_probe,\ndiff --git a/drivers/net/cxgbe/sge.c b/drivers/net/cxgbe/sge.c\nindex ab5a842..736f08c 100644\n--- a/drivers/net/cxgbe/sge.c\n+++ b/drivers/net/cxgbe/sge.c\n@@ -1645,7 +1645,8 @@ int t4_sge_alloc_rxq(struct adapter *adap, struct sge_rspq *iq, bool fwevtq,\n \tiq->size = cxgbe_roundup(iq->size, 16);\n \n \tsnprintf(z_name, sizeof(z_name), \"%s_%s_%d_%d\",\n-\t\t eth_dev->driver->pci_drv.name, fwevtq ? \"fwq_ring\" : \"rx_ring\",\n+\t\t eth_dev->driver->pci_drv.driver.name,\n+\t\t fwevtq ? \"fwq_ring\" : \"rx_ring\",\n \t\t eth_dev->data->port_id, queue_id);\n \tsnprintf(z_name_sw, sizeof(z_name_sw), \"%s_sw_ring\", z_name);\n \n@@ -1697,7 +1698,7 @@ int t4_sge_alloc_rxq(struct adapter *adap, struct sge_rspq *iq, bool fwevtq,\n \t\tfl->size = cxgbe_roundup(fl->size, 8);\n \n \t\tsnprintf(z_name, sizeof(z_name), \"%s_%s_%d_%d\",\n-\t\t\t eth_dev->driver->pci_drv.name,\n+\t\t\t eth_dev->driver->pci_drv.driver.name,\n \t\t\t fwevtq ? \"fwq_ring\" : \"fl_ring\",\n \t\t\t eth_dev->data->port_id, queue_id);\n \t\tsnprintf(z_name_sw, sizeof(z_name_sw), \"%s_sw_ring\", z_name);\n@@ -1893,7 +1894,7 @@ int t4_sge_alloc_eth_txq(struct adapter *adap, struct sge_eth_txq *txq,\n \tnentries = txq->q.size + s->stat_len / sizeof(struct tx_desc);\n \n \tsnprintf(z_name, sizeof(z_name), \"%s_%s_%d_%d\",\n-\t\t eth_dev->driver->pci_drv.name, \"tx_ring\",\n+\t\t eth_dev->driver->pci_drv.driver.name, \"tx_ring\",\n \t\t eth_dev->data->port_id, queue_id);\n \tsnprintf(z_name_sw, sizeof(z_name_sw), \"%s_sw_ring\", z_name);\n \ndiff --git a/drivers/net/e1000/em_ethdev.c b/drivers/net/e1000/em_ethdev.c\nindex 1281c8b..7f8fc21 100644\n--- a/drivers/net/e1000/em_ethdev.c\n+++ b/drivers/net/e1000/em_ethdev.c\n@@ -391,7 +391,6 @@ eth_em_dev_uninit(struct rte_eth_dev *eth_dev)\n \n static struct eth_driver rte_em_pmd = {\n \t.pci_drv = {\n-\t\t.name = \"rte_em_pmd\",\n \t\t.id_table = pci_id_em_map,\n \t\t.drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_INTR_LSC |\n \t\t\tRTE_PCI_DRV_DETACHABLE,\ndiff --git a/drivers/net/e1000/igb_ethdev.c b/drivers/net/e1000/igb_ethdev.c\nindex 395477e..811d9ae 100644\n--- a/drivers/net/e1000/igb_ethdev.c\n+++ b/drivers/net/e1000/igb_ethdev.c\n@@ -1078,7 +1078,6 @@ eth_igbvf_dev_uninit(struct rte_eth_dev *eth_dev)\n \n static struct eth_driver rte_igb_pmd = {\n \t.pci_drv = {\n-\t\t.name = \"rte_igb_pmd\",\n \t\t.id_table = pci_id_igb_map,\n \t\t.drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_INTR_LSC |\n \t\t\tRTE_PCI_DRV_DETACHABLE,\n@@ -1095,7 +1094,6 @@ static struct eth_driver rte_igb_pmd = {\n  */\n static struct eth_driver rte_igbvf_pmd = {\n \t.pci_drv = {\n-\t\t.name = \"rte_igbvf_pmd\",\n \t\t.id_table = pci_id_igbvf_map,\n \t\t.drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_DETACHABLE,\n \t\t.devinit = rte_eth_dev_pci_probe,\ndiff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c\nindex ee906d4..4d6e83f 100644\n--- a/drivers/net/ena/ena_ethdev.c\n+++ b/drivers/net/ena/ena_ethdev.c\n@@ -1686,7 +1686,6 @@ static uint16_t eth_ena_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts,\n \n static struct eth_driver rte_ena_pmd = {\n \t.pci_drv = {\n-\t\t.name = \"rte_ena_pmd\",\n \t\t.id_table = pci_id_ena_map,\n \t\t.drv_flags = RTE_PCI_DRV_NEED_MAPPING,\n \t\t.devinit = rte_eth_dev_pci_probe,\ndiff --git a/drivers/net/enic/enic_ethdev.c b/drivers/net/enic/enic_ethdev.c\nindex 59812d0..c80b8f7 100644\n--- a/drivers/net/enic/enic_ethdev.c\n+++ b/drivers/net/enic/enic_ethdev.c\n@@ -613,7 +613,6 @@ static int eth_enicpmd_dev_init(struct rte_eth_dev *eth_dev)\n \n static struct eth_driver rte_enic_pmd = {\n \t.pci_drv = {\n-\t\t.name = \"rte_enic_pmd\",\n \t\t.id_table = pci_id_enic_map,\n \t\t.drv_flags = RTE_PCI_DRV_NEED_MAPPING,\n \t\t.devinit = rte_eth_dev_pci_probe,\ndiff --git a/drivers/net/fm10k/fm10k_ethdev.c b/drivers/net/fm10k/fm10k_ethdev.c\nindex 26cdc10..11e4014 100644\n--- a/drivers/net/fm10k/fm10k_ethdev.c\n+++ b/drivers/net/fm10k/fm10k_ethdev.c\n@@ -3055,7 +3055,6 @@ static const struct rte_pci_id pci_id_fm10k_map[] = {\n \n static struct eth_driver rte_pmd_fm10k = {\n \t.pci_drv = {\n-\t\t.name = \"rte_pmd_fm10k\",\n \t\t.id_table = pci_id_fm10k_map,\n \t\t.drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_INTR_LSC |\n \t\t\tRTE_PCI_DRV_DETACHABLE,\ndiff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c\nindex dacaaea..892a221 100644\n--- a/drivers/net/i40e/i40e_ethdev.c\n+++ b/drivers/net/i40e/i40e_ethdev.c\n@@ -663,7 +663,6 @@ static const struct rte_i40e_xstats_name_off rte_i40e_txq_prio_strings[] = {\n \n static struct eth_driver rte_i40e_pmd = {\n \t.pci_drv = {\n-\t\t.name = \"rte_i40e_pmd\",\n \t\t.id_table = pci_id_i40e_map,\n \t\t.drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_INTR_LSC |\n \t\t\tRTE_PCI_DRV_DETACHABLE,\ndiff --git a/drivers/net/i40e/i40e_ethdev_vf.c b/drivers/net/i40e/i40e_ethdev_vf.c\nindex 4a745f9..952bcd3 100644\n--- a/drivers/net/i40e/i40e_ethdev_vf.c\n+++ b/drivers/net/i40e/i40e_ethdev_vf.c\n@@ -1554,7 +1554,6 @@ i40evf_dev_uninit(struct rte_eth_dev *eth_dev)\n  */\n static struct eth_driver rte_i40evf_pmd = {\n \t.pci_drv = {\n-\t\t.name = \"rte_i40evf_pmd\",\n \t\t.id_table = pci_id_i40evf_map,\n \t\t.drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_DETACHABLE,\n \t\t.devinit = rte_eth_dev_pci_probe,\ndiff --git a/drivers/net/i40e/i40e_fdir.c b/drivers/net/i40e/i40e_fdir.c\nindex f65c411..a4efc6d 100644\n--- a/drivers/net/i40e/i40e_fdir.c\n+++ b/drivers/net/i40e/i40e_fdir.c\n@@ -251,7 +251,7 @@ i40e_fdir_setup(struct i40e_pf *pf)\n \n \t/* reserve memory for the fdir programming packet */\n \tsnprintf(z_name, sizeof(z_name), \"%s_%s_%d\",\n-\t\t\teth_dev->driver->pci_drv.name,\n+\t\t\teth_dev->driver->pci_drv.driver.name,\n \t\t\tI40E_FDIR_MZ_NAME,\n \t\t\teth_dev->data->port_id);\n \tmz = i40e_memzone_reserve(z_name, I40E_FDIR_PKT_LEN, SOCKET_ID_ANY);\ndiff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c\nindex d2f46bc..65ec846 100644\n--- a/drivers/net/ixgbe/ixgbe_ethdev.c\n+++ b/drivers/net/ixgbe/ixgbe_ethdev.c\n@@ -1562,7 +1562,6 @@ eth_ixgbevf_dev_uninit(struct rte_eth_dev *eth_dev)\n \n static struct eth_driver rte_ixgbe_pmd = {\n \t.pci_drv = {\n-\t\t.name = \"rte_ixgbe_pmd\",\n \t\t.id_table = pci_id_ixgbe_map,\n \t\t.drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_INTR_LSC |\n \t\t\tRTE_PCI_DRV_DETACHABLE,\n@@ -1579,7 +1578,6 @@ static struct eth_driver rte_ixgbe_pmd = {\n  */\n static struct eth_driver rte_ixgbevf_pmd = {\n \t.pci_drv = {\n-\t\t.name = \"rte_ixgbevf_pmd\",\n \t\t.id_table = pci_id_ixgbevf_map,\n \t\t.drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_DETACHABLE,\n \t\t.devinit = rte_eth_dev_pci_probe,\ndiff --git a/drivers/net/mlx4/mlx4.c b/drivers/net/mlx4/mlx4.c\nindex b333ad6..3d2df9c 100644\n--- a/drivers/net/mlx4/mlx4.c\n+++ b/drivers/net/mlx4/mlx4.c\n@@ -5911,7 +5911,9 @@ static const struct rte_pci_id mlx4_pci_id_map[] = {\n \n static struct eth_driver mlx4_driver = {\n \t.pci_drv = {\n-\t\t.name = MLX4_DRIVER_NAME,\n+\t\t.driver = {\n+\t\t\t.name = MLX4_DRIVER_NAME\n+\t\t},\n \t\t.id_table = mlx4_pci_id_map,\n \t\t.devinit = mlx4_pci_devinit,\n \t\t.drv_flags = RTE_PCI_DRV_INTR_LSC,\ndiff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c\nindex ebad7cb..82c11f3 100644\n--- a/drivers/net/mlx5/mlx5.c\n+++ b/drivers/net/mlx5/mlx5.c\n@@ -728,7 +728,9 @@ static const struct rte_pci_id mlx5_pci_id_map[] = {\n \n static struct eth_driver mlx5_driver = {\n \t.pci_drv = {\n-\t\t.name = MLX5_DRIVER_NAME,\n+\t\t.driver = {\n+\t\t\t.name = MLX5_DRIVER_NAME\n+\t\t},\n \t\t.id_table = mlx5_pci_id_map,\n \t\t.devinit = mlx5_pci_devinit,\n \t\t.drv_flags = RTE_PCI_DRV_INTR_LSC,\ndiff --git a/drivers/net/nfp/nfp_net.c b/drivers/net/nfp/nfp_net.c\nindex cbaf219..764d58d 100644\n--- a/drivers/net/nfp/nfp_net.c\n+++ b/drivers/net/nfp/nfp_net.c\n@@ -214,7 +214,7 @@ ring_dma_zone_reserve(struct rte_eth_dev *dev, const char *ring_name,\n \tconst struct rte_memzone *mz;\n \n \tsnprintf(z_name, sizeof(z_name), \"%s_%s_%d_%d\",\n-\t\t dev->driver->pci_drv.name,\n+\t\t dev->driver->pci_drv.driver.name,\n \t\t ring_name, dev->data->port_id, queue_id);\n \n \tmz = rte_memzone_lookup(z_name);\n@@ -1000,7 +1000,7 @@ nfp_net_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)\n \n \thw = NFP_NET_DEV_PRIVATE_TO_HW(dev->data->dev_private);\n \n-\tdev_info->driver_name = dev->driver->pci_drv.name;\n+\tdev_info->driver_name = dev->driver->pci_drv.driver.name;\n \tdev_info->max_rx_queues = (uint16_t)hw->max_rx_queues;\n \tdev_info->max_tx_queues = (uint16_t)hw->max_tx_queues;\n \tdev_info->min_rx_bufsize = ETHER_MIN_MTU;\n@@ -2460,7 +2460,6 @@ static struct rte_pci_id pci_id_nfp_net_map[] = {\n \n static struct eth_driver rte_nfp_net_pmd = {\n \t.pci_drv = {\n-\t\t.name = \"rte_nfp_net_pmd\",\n \t\t.id_table = pci_id_nfp_net_map,\n \t\t.drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_INTR_LSC |\n \t\t\t     RTE_PCI_DRV_DETACHABLE,\ndiff --git a/drivers/net/qede/qede_ethdev.c b/drivers/net/qede/qede_ethdev.c\nindex a92dd3b..2ef432f 100644\n--- a/drivers/net/qede/qede_ethdev.c\n+++ b/drivers/net/qede/qede_ethdev.c\n@@ -1478,7 +1478,6 @@ static struct rte_pci_id pci_id_qede_map[] = {\n \n static struct eth_driver rte_qedevf_pmd = {\n \t.pci_drv = {\n-\t\t    .name = \"rte_qedevf_pmd\",\n \t\t    .id_table = pci_id_qedevf_map,\n \t\t    .drv_flags =\n \t\t    RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_INTR_LSC,\n@@ -1492,7 +1491,6 @@ static struct eth_driver rte_qedevf_pmd = {\n \n static struct eth_driver rte_qede_pmd = {\n \t.pci_drv = {\n-\t\t    .name = \"rte_qede_pmd\",\n \t\t    .id_table = pci_id_qede_map,\n \t\t    .drv_flags =\n \t\t    RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_INTR_LSC,\ndiff --git a/drivers/net/szedata2/rte_eth_szedata2.c b/drivers/net/szedata2/rte_eth_szedata2.c\nindex 1b9e88a..4e4a318 100644\n--- a/drivers/net/szedata2/rte_eth_szedata2.c\n+++ b/drivers/net/szedata2/rte_eth_szedata2.c\n@@ -1572,7 +1572,6 @@ static const struct rte_pci_id rte_szedata2_pci_id_table[] = {\n \n static struct eth_driver szedata2_eth_driver = {\n \t.pci_drv = {\n-\t\t.name     = RTE_SZEDATA2_PCI_DRIVER_NAME,\n \t\t.id_table = rte_szedata2_pci_id_table,\n \t\t.devinit = rte_eth_dev_pci_probe,\n \t\t.devuninit = rte_eth_dev_pci_remove,\ndiff --git a/drivers/net/thunderx/nicvf_ethdev.c b/drivers/net/thunderx/nicvf_ethdev.c\nindex ad7d607..783acbf 100644\n--- a/drivers/net/thunderx/nicvf_ethdev.c\n+++ b/drivers/net/thunderx/nicvf_ethdev.c\n@@ -1759,7 +1759,6 @@ static const struct rte_pci_id pci_id_nicvf_map[] = {\n \n static struct eth_driver rte_nicvf_pmd = {\n \t.pci_drv = {\n-\t\t.name = \"rte_nicvf_pmd\",\n \t\t.id_table = pci_id_nicvf_map,\n \t\t.drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_INTR_LSC,\n \t\t.devinit = rte_eth_dev_pci_probe,\ndiff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c\nindex 5453709..7abacd3 100644\n--- a/drivers/net/virtio/virtio_ethdev.c\n+++ b/drivers/net/virtio/virtio_ethdev.c\n@@ -1304,7 +1304,6 @@ eth_virtio_dev_uninit(struct rte_eth_dev *eth_dev)\n \n static struct eth_driver rte_virtio_pmd = {\n \t.pci_drv = {\n-\t\t.name = \"rte_virtio_pmd\",\n \t\t.id_table = pci_id_virtio_map,\n \t\t.drv_flags = RTE_PCI_DRV_DETACHABLE,\n \t\t.devinit = rte_eth_dev_pci_probe,\n@@ -1534,7 +1533,7 @@ virtio_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)\n \tstruct virtio_hw *hw = dev->data->dev_private;\n \n \tif (dev->pci_dev)\n-\t\tdev_info->driver_name = dev->driver->pci_drv.name;\n+\t\tdev_info->driver_name = dev->driver->pci_drv.driver.name;\n \telse\n \t\tdev_info->driver_name = \"virtio_user PMD\";\n \tdev_info->max_rx_queues = (uint16_t)hw->max_rx_queues;\ndiff --git a/drivers/net/vmxnet3/vmxnet3_ethdev.c b/drivers/net/vmxnet3/vmxnet3_ethdev.c\nindex d732979..857e59a 100644\n--- a/drivers/net/vmxnet3/vmxnet3_ethdev.c\n+++ b/drivers/net/vmxnet3/vmxnet3_ethdev.c\n@@ -137,7 +137,8 @@ gpa_zone_reserve(struct rte_eth_dev *dev, uint32_t size,\n \tconst struct rte_memzone *mz;\n \n \tsnprintf(z_name, sizeof(z_name), \"%s_%d_%s\",\n-\t\t\t\t\tdev->driver->pci_drv.name, dev->data->port_id, post_string);\n+\t\t\t\t\tdev->driver->pci_drv.driver.name,\n+\t\t\t\t\tdev->data->port_id, post_string);\n \n \tmz = rte_memzone_lookup(z_name);\n \tif (mz)\n@@ -328,7 +329,6 @@ eth_vmxnet3_dev_uninit(struct rte_eth_dev *eth_dev)\n \n static struct eth_driver rte_vmxnet3_pmd = {\n \t.pci_drv = {\n-\t\t.name = \"rte_vmxnet3_pmd\",\n \t\t.id_table = pci_id_vmxnet3_map,\n \t\t.drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_DETACHABLE,\n \t\t.devinit = rte_eth_dev_pci_probe,\ndiff --git a/drivers/net/vmxnet3/vmxnet3_rxtx.c b/drivers/net/vmxnet3/vmxnet3_rxtx.c\nindex 9deeb3f..e6d93f3 100644\n--- a/drivers/net/vmxnet3/vmxnet3_rxtx.c\n+++ b/drivers/net/vmxnet3/vmxnet3_rxtx.c\n@@ -774,7 +774,7 @@ ring_dma_zone_reserve(struct rte_eth_dev *dev, const char *ring_name,\n \tconst struct rte_memzone *mz;\n \n \tsnprintf(z_name, sizeof(z_name), \"%s_%s_%d_%d\",\n-\t\t\tdev->driver->pci_drv.name, ring_name,\n+\t\t\tdev->driver->pci_drv.driver.name, ring_name,\n \t\t\tdev->data->port_id, queue_id);\n \n \tmz = rte_memzone_lookup(z_name);\ndiff --git a/lib/librte_cryptodev/rte_cryptodev.c b/lib/librte_cryptodev/rte_cryptodev.c\nindex c81e366..2e17169 100644\n--- a/lib/librte_cryptodev/rte_cryptodev.c\n+++ b/lib/librte_cryptodev/rte_cryptodev.c\n@@ -459,7 +459,7 @@ rte_cryptodev_pci_probe(struct rte_pci_driver *pci_drv,\n \t\treturn 0;\n \n \tCDEV_LOG_ERR(\"driver %s: crypto_dev_init(vendor_id=0x%x device_id=0x%x)\"\n-\t\t\t\" failed\", pci_drv->name,\n+\t\t\t\" failed\", pci_drv->driver.name,\n \t\t\t(unsigned) pci_dev->id.vendor_id,\n \t\t\t(unsigned) pci_dev->id.device_id);\n \n@@ -870,7 +870,7 @@ rte_cryptodev_info_get(uint8_t dev_id, struct rte_cryptodev_info *dev_info)\n \n \tdev_info->pci_dev = dev->pci_dev;\n \tif (dev->driver)\n-\t\tdev_info->driver_name = dev->driver->pci_drv.name;\n+\t\tdev_info->driver_name = dev->driver->pci_drv.driver.name;\n }\n \n \ndiff --git a/lib/librte_eal/common/eal_common_pci.c b/lib/librte_eal/common/eal_common_pci.c\nindex da0038f..308c2a9 100644\n--- a/lib/librte_eal/common/eal_common_pci.c\n+++ b/lib/librte_eal/common/eal_common_pci.c\n@@ -195,7 +195,7 @@ rte_eal_pci_probe_one_driver(struct rte_pci_driver *dr, struct rte_pci_device *d\n \t\t}\n \n \t\tRTE_LOG(INFO, EAL, \"  probe driver: %x:%x %s\\n\", dev->id.vendor_id,\n-\t\t\t\tdev->id.device_id, dr->name);\n+\t\t\t\tdev->id.device_id, dr->driver.name);\n \n \t\tif (dr->drv_flags & RTE_PCI_DRV_NEED_MAPPING) {\n \t\t\t/* map resources for devices that use igb_uio */\n@@ -255,7 +255,7 @@ rte_eal_pci_detach_dev(struct rte_pci_driver *dr,\n \t\t\t\tloc->function, dev->numa_node);\n \n \t\tRTE_LOG(DEBUG, EAL, \"  remove driver: %x:%x %s\\n\", dev->id.vendor_id,\n-\t\t\t\tdev->id.device_id, dr->name);\n+\t\t\t\tdev->id.device_id, dr->driver.name);\n \n \t\tif (dr->devuninit && (dr->devuninit(dev) < 0))\n \t\t\treturn -1;\t/* negative value is an error */\ndiff --git a/lib/librte_eal/common/include/rte_pci.h b/lib/librte_eal/common/include/rte_pci.h\nindex e2d457a..4d8daf7 100644\n--- a/lib/librte_eal/common/include/rte_pci.h\n+++ b/lib/librte_eal/common/include/rte_pci.h\n@@ -199,7 +199,7 @@ typedef int (pci_devuninit_t)(struct rte_pci_device *);\n  */\n struct rte_pci_driver {\n \tTAILQ_ENTRY(rte_pci_driver) next;       /**< Next in list. */\n-\tconst char *name;                       /**< Driver name. */\n+\tstruct rte_driver driver;               /**< Inherit core driver. */\n \tpci_devinit_t *devinit;                 /**< Device init. function. */\n \tpci_devuninit_t *devuninit;             /**< Device uninit function. */\n \tconst struct rte_pci_id *id_table;\t/**< ID table, NULL terminated. */\n@@ -491,7 +491,7 @@ void rte_eal_pci_register(struct rte_pci_driver *driver);\n RTE_INIT(pciinitfn_ ##nm); \\\n static void pciinitfn_ ##nm(void) \\\n { \\\n-\t(pci_drv).name = RTE_STR(nm);\\\n+\t(pci_drv).driver.name = RTE_STR(nm);\\\n \trte_eal_pci_register(&pci_drv); \\\n }\\\n DRIVER_EXPORT_NAME(nm, __COUNTER__)\ndiff --git a/lib/librte_eal/linuxapp/eal/rte_eal_version.map b/lib/librte_eal/linuxapp/eal/rte_eal_version.map\nindex c0bd391..b8bfd4b 100644\n--- a/lib/librte_eal/linuxapp/eal/rte_eal_version.map\n+++ b/lib/librte_eal/linuxapp/eal/rte_eal_version.map\n@@ -172,4 +172,7 @@ DPDK_16.11 {\n \n \trte_eal_dev_attach;\n \trte_eal_dev_detach;\n+\trte_eal_vdrv_register;\n+\trte_eal_vdrv_unregister;\n+\n } DPDK_16.07;\ndiff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c\nindex cf38f32..d7179e1 100644\n--- a/lib/librte_ether/rte_ethdev.c\n+++ b/lib/librte_ether/rte_ethdev.c\n@@ -276,7 +276,7 @@ rte_eth_dev_pci_probe(struct rte_pci_driver *pci_drv,\n \t\treturn 0;\n \n \tRTE_PMD_DEBUG_TRACE(\"driver %s: eth_dev_init(vendor_id=0x%u device_id=0x%x) failed\\n\",\n-\t\t\tpci_drv->name,\n+\t\t\tpci_drv->driver.name,\n \t\t\t(unsigned) pci_dev->id.vendor_id,\n \t\t\t(unsigned) pci_dev->id.device_id);\n \tif (rte_eal_process_type() == RTE_PROC_PRIMARY)\n@@ -2566,7 +2566,7 @@ rte_eth_dma_zone_reserve(const struct rte_eth_dev *dev, const char *ring_name,\n \tconst struct rte_memzone *mz;\n \n \tsnprintf(z_name, sizeof(z_name), \"%s_%s_%d_%d\",\n-\t\t dev->driver->pci_drv.name, ring_name,\n+\t\t dev->driver->pci_drv.driver.name, ring_name,\n \t\t dev->data->port_id, queue_id);\n \n \tmz = rte_memzone_lookup(z_name);\n@@ -3208,7 +3208,7 @@ rte_eth_copy_pci_info(struct rte_eth_dev *eth_dev, struct rte_pci_device *pci_de\n \n \teth_dev->data->kdrv = pci_dev->kdrv;\n \teth_dev->data->numa_node = pci_dev->numa_node;\n-\teth_dev->data->drv_name = pci_dev->driver->name;\n+\teth_dev->data->drv_name = pci_dev->driver->driver.name;\n }\n \n int\n",
    "prefixes": [
        "dpdk-dev",
        "v9",
        "22/25"
    ]
}