From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <shreyansh.jain@nxp.com>
Received: from NAM01-SN1-obe.outbound.protection.outlook.com
 (mail-sn1nam01on0069.outbound.protection.outlook.com [104.47.32.69])
 by dpdk.org (Postfix) with ESMTP id 4A1F59E7
 for <dev@dpdk.org>; Wed, 15 Feb 2017 12:25:35 +0100 (CET)
Received: from BN3PR0301CA0001.namprd03.prod.outlook.com (10.160.180.139) by
 BN1PR0301MB0724.namprd03.prod.outlook.com (10.160.78.143) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id
 15.1.888.16; Wed, 15 Feb 2017 11:25:33 +0000
Received: from BY2FFO11OLC003.protection.gbl (2a01:111:f400:7c0c::113) by
 BN3PR0301CA0001.outlook.office365.com (2a01:111:e400:4000::11) with Microsoft
 SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.919.13 via
 Frontend Transport; Wed, 15 Feb 2017 11:25:33 +0000
Authentication-Results: spf=fail (sender IP is 192.88.168.50)
 smtp.mailfrom=nxp.com; infradead.org; dkim=none (message not signed)
 header.d=none;infradead.org; 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
 BY2FFO11OLC003.mail.protection.outlook.com (10.1.15.183) with Microsoft SMTP
 Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.904.16
 via Frontend Transport; Wed, 15 Feb 2017 11:25:32 +0000
Received: from [10.232.14.39] ([10.232.14.39])
 by tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id v1FBPRjw025954;
 Wed, 15 Feb 2017 04:25:28 -0700
To: Jan Blunck <jblunck@infradead.org>, Thomas Monjalon
 <thomas.monjalon@6wind.com>
References: <1484748329-5418-1-git-send-email-shreyansh.jain@nxp.com>
 <1484801117-779-1-git-send-email-thomas.monjalon@6wind.com>
 <1484801117-779-8-git-send-email-thomas.monjalon@6wind.com>
 <CALe+Z03-V+NWPYkHzUU7KbfTrEuLM4+7E4SU_sFrsTXaWo9VTQ@mail.gmail.com>
CC: dev <dev@dpdk.org>
From: Shreyansh Jain <shreyansh.jain@nxp.com>
Message-ID: <4f1f05ef-7cea-9306-c37b-554a66cd15ac@nxp.com>
Date: Wed, 15 Feb 2017 17:00:19 +0530
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101
 Thunderbird/45.7.1
MIME-Version: 1.0
In-Reply-To: <CALe+Z03-V+NWPYkHzUU7KbfTrEuLM4+7E4SU_sFrsTXaWo9VTQ@mail.gmail.com>
Content-Type: text/plain; charset="utf-8"; format=flowed
Content-Transfer-Encoding: 7bit
X-EOPAttributedMessage: 0
X-Matching-Connectors: 131316315331289836;
 (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)(336005)(39410400002)(39400400002)(39860400002)(39840400002)(39850400002)(39380400002)(39450400003)(2980300002)(1109001)(1110001)(339900001)(377454003)(24454002)(189002)(199003)(97736004)(50986999)(575784001)(8676002)(81156014)(54356999)(92566002)(65806001)(47776003)(65956001)(76176999)(50466002)(104016004)(23676002)(229853002)(189998001)(389900002)(77096006)(4326007)(2906002)(68736007)(81166006)(106466001)(31686004)(626004)(36756003)(64126003)(4001350100001)(230700001)(86362001)(38730400002)(5660300001)(356003)(305945005)(31696002)(6666003)(2950100002)(33646002)(93886004)(53936002)(65826007)(6246003)(83506001)(105606002)(85426001)(8936002);
 DIR:OUT; SFP:1101; SCL:1; SRVR:BN1PR0301MB0724; H:tx30smr01.am.freescale.net;
 FPR:; SPF:Fail; PTR:InfoDomainNonexistent; MX:1; A:1; LANG:en; 
X-Microsoft-Exchange-Diagnostics: 1; BY2FFO11OLC003;
 1:VSbgbX6YQDCZ6covdr8bhMudweNjK+gQYiCmsBUaL/GWQmb3Qbq835Uy6HCOKakOTXbkfhbL9jc1oC0rRIxBXtinOzfXVhrhXGxY4MKWhUcPwC/AA/kehmQU+6tmsUs77HzP4cJdTQmwqafpn5hkKB47y0xlatN7mEVDeSlXPSDJ8aVhRZLK1rOdIRP6+Vu818CljlFgTyJRH9VMv0C1cCwP5tDHpWt4Jez3Q4d2mm3faKtl9o+K9Ig5IPnfrf4sqxk/mPDrKmDZZ+mSAdu+k/U+0KUyCjdtXhzrkEomtRCORoM3iCh0KVfqc+9lUICtB4hig2i3e7/YxrckyduFVjriRHWfiQmRfmkajwI6rLvyT4j2A4TFRtt9RrI+waxpsYk48SVHRPPudJlPVDpgl7uMo07D44H0ZRAscKg7Y54XHM5KGCFTYBjQSYzgBoE05iDsN0kTQYsSGu8WCqpYbv/m8fR9D0HbpH+m43f5zMrG1N77jfsJk08/s7PH3pC87gKmcRQtm7DQO509Y9+Q6vYw/+Eu4YJ/pyKUoSQASqKbX4wz0zZz4UfLphO6MxRl
X-MS-Office365-Filtering-Correlation-Id: 18477ff0-3c23-4d59-d804-08d455955aec
X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001);
 SRVR:BN1PR0301MB0724; 
X-Microsoft-Exchange-Diagnostics: 1; BN1PR0301MB0724;
 3:cfEBRVM/JKRxvT0+ZEkxc6CvkTJ4ZG/yFp5VUxchyNO1stswl1AIfUiZyLSGNDybWgCOfYP71C+IDifGazV+BrFvs/MbnjhYdbTbLOEqD2Ydisy8Vm8bz7JFAF7NYF2OwHGNPfBxSd0KLsENnpceruQvoU6o9bNfCUa57nId++6Dbm7noHUVVoQPXkQfZFzKQHhyEBcwYXlRdRnu2RVwYl14bXaM7rIZGVboGQM9mlLAoCZupnomN+vyWqWBBENirIcabHJ/54PNUI4zaH36kiIXOMwp1I34ID8vFSKHrQfqyq8TOWUZ12etyrPARupegtH1SIxE1XWluNH9L7dAMBb7lpxZbnThMW2guQh9vnDUVLgujN6RAJVw7B6quo2M;
 25:3vKTXqJgXs2Evwt873E1CTGm+jNsfr4EncRl/+1y2knmzy9bDs7snFARXgprha1H6IsfO/v1rtuyhKJE8cdbf/c/tdImi167jcozCVuTm9htYY0n2oVAVNgYrBBe3LS6KggBMH2WTGxzQRBJq2+SJOSNTS4Zg2KuNrZEThDmH8c4qHRUcSPOQ2vJOXV8ZQTtbATW5F5yl4haysqQzkr+CnXVGqo9IVBqMtU32DOXSOa35cBFVtLXYIi4tIKo0D5ENv6UEs6lu/sO8lgwNEiHb8pnNEXyqdcKtFsGxBHu8upVk51zOvdV5eU9gHbatkK7tiPGPgRIymlJ8gyQRsetQ1csbFnE54BsH6HzuHojYTpBzT/oRz68BdGyfrQQcypPW7zaTW7fzbXZ3zunXBjez0Y/R5xwHEZOg5lV2yVHEJdTY9R8cGtAb+HxRpdHTPX16VXgUJs8O6Tc6ot3RKaKXA==
X-Microsoft-Exchange-Diagnostics: 1; BN1PR0301MB0724;
 31:MeqNr2LWW7Cz6+3MDdDLbCskwuTJ5KyXMC+bBV6pjJNprqUQ7Tut+gS6GrJEEgGrb/beqOisTVMcGvWNnaBhV73rdcaID9hE44wXK+wBerF1kCHwRRtON8w5P2uU3uFc7RS32OhRpQ1E1q0QGm7YrsLiWn1yXNxruZhvbAK0Ci/ZCnwKig9roMNV57mdB4fFRUzi/MhvhqlDl7H65BWLU/nz1PwF7EmGnNEpSbw1CGigF10cR0kLKwScTRGm19qfv/SW2r/dJzp+UwTvtekgDg==
X-Microsoft-Antispam-PRVS: <BN1PR0301MB0724CCE0588FDBF7F8A2CF60905B0@BN1PR0301MB0724.namprd03.prod.outlook.com>
X-Exchange-Antispam-Report-Test: UriScan:(185117386973197)(228905959029699);
X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0;
 RULEID:(6095060)(601004)(2401047)(13023025)(8121501046)(13015025)(13017025)(5005006)(13018025)(13024025)(3002001)(10201501046)(6055026)(6096035)(20161123563025)(20161123561025)(20161123565025)(20161123559025)(20161123556025);
 SRVR:BN1PR0301MB0724; BCL:0; PCL:0; RULEID:(400006); SRVR:BN1PR0301MB0724; 
X-Microsoft-Exchange-Diagnostics: 1; BN1PR0301MB0724;
 4:ay/vRG4StDUH7QZUjBiir/4a9oyLyZMa1Pu2GuRCmHAHrp8dtN2g65EAiLMrocnLnlrgNI7UemBNdPqBmZuPrF7hRRHug4wvUaq8sRhP2fPRgv3HLkBtwyTGY5nNouwYy14M6z2S6gVIBigoyDOVvWhuaTVJy4pKyZKhSrxFnsntXGBi6hfoqbjZcT3E4jmCcSnD/pVAJg69b/k6TRMzoaX5up2GOqK7kD/tQM4efC/x+UEp3VEM5wFFKFIhej9z1RSbWeXzMM/By55XbjidhHA5rBU2PLVb2WROX00x4rq1bsv9/6luVT1cTAmIVBKT3rpJO2sOl8GiPkwM61Nn0vcYCoThcDU6qEn+FBbeftC7DQTcg3lMUhw+2qhL0RH0ZQSSa7cgL/zmFb7y+XXOKmiPoA6b2Z3PR7IBo7aOy8VgoD5syVWwjE77cyMZdDwf09a8CmBUk1yfrTIGaTDmY+qU9jYPl1Tv7lZnml9GE9Ub67Cf9vQ1dUlAINiJvlQrEEuSd4NsoB0zn96uZGg7qPrTY4NU2zqdc2Z570aLe5G0PcPBE5i6eCRqPFqz2pTkzl/bn7K/fRyDhBLjH4OjSwBXBQ++pobFZkRNvRXUskDp57dp533V6RfK+VWpPLLO+E9Ov7bFAevj/uDFgp2a+tfrbxnPdMrTmtVIs3s9jC9QzMe7l10IeqEk2RgG8O+uAy2RlultAxbzrTgqINV+I6DgHElmuwe/uu8D+zf09wRa4beTUQ6Llh8DgBqCoDFiSmeETPz3L57n4DMZ02Lywg==
X-Forefront-PRVS: 021975AE46
X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtCTjFQUjAzMDFNQjA3MjQ7MjM6L0ZHK2w0dmJYR3V3dVFNMXc1RTlLbk9Z?=
 =?utf-8?B?cW9LVHlwZUZWNGVDQnZvblptTnJxWFJ3QVJQKzAyekhKUjJqcVZURW53QklI?=
 =?utf-8?B?NnBiaWFMNVR0K21aNTl2TjAwQzFhQzdUR3k0TlJodGlnU0czQW42Yzc5V1FY?=
 =?utf-8?B?amptbHM3TFVRMmtvSzdHV0NiUjNjRHpZVW9WQjJKVE82N0wxcmRydlZ1NUZO?=
 =?utf-8?B?ZmR1eDY4d3gzMzlKeitEMFAxekk2MzEvaTJKeUI5ZjBIS0RaNkcweVlZTnVG?=
 =?utf-8?B?ZnFaV21nMHRub21GL2s0bzZOVndGbVpnU21tRnJpdzR2UEVWTVA1bEhES0Fy?=
 =?utf-8?B?ek1tWjZsSXRESEFUZDA0N1RXL2hiVzhUWEV4SXFvcXZJZ21wN1hGYUxsL2o4?=
 =?utf-8?B?Y1NaQjcxUnd6cFo3V3R5R3ozVlZXUEFJMDFBekEzS1ppVmxDTUJzb25iL1Y5?=
 =?utf-8?B?UU5iRFF2bW10TjkvaHN1RHhMblh6QVhrQTZXZEVOby9hR21tRDhOWXhZRklY?=
 =?utf-8?B?dzBRUVFHa1VidkdFY1E3amNLS1BFQWVZOE9jc05BLytZM1J4Z0diNFBzbGNx?=
 =?utf-8?B?SDFVZkpzVnRwVW4rWHBkeXF3amdvT0x0KzlHWHdnMW5oak1TLzhpdDlaaHlH?=
 =?utf-8?B?RjduTW5zaVFNRGhXYm9RMy9QcGwwNzZQNzFUU1gweGhFRmRDR3duT0g2TDRV?=
 =?utf-8?B?TU9renFoaGl6NHY4VjlKMEtxNnJzSmtjaUZwS0d1Tm9ueFV1bnlRM3lQV2FK?=
 =?utf-8?B?Tmh4NE5VWHhtM0IyRHR5aXptVytZbEdsUVZTWHAwUlFBNUxMNHF2N2tLVi9p?=
 =?utf-8?B?dUphemhoOThEbzl0OHBYVGxKWXpkTGFaOXEvajYvRnpsTE9IV2cwZ0svVWFy?=
 =?utf-8?B?dnAvTGFVMjQwYW4rOHZhVFR3MTdETE5oYnp3Vkw0Mkh4ajZGQldETUpkZG9T?=
 =?utf-8?B?dDlaVytubGp2alMxTXViNXg1Y2dKS1dFaHlxYXViOHR0dUgveWhhaVlPam5C?=
 =?utf-8?B?UHk2d09rSE1DTHlzTDdsWGk1S1pURXhOWFNwSDZYOGZtUDNFdDNTamhhSmhI?=
 =?utf-8?B?cXVDTVhwREhJeDNONkVtNlA5elg2QXRhaVRpZUdrMFdYUzdQOW4rS2VlOWo2?=
 =?utf-8?B?Y1BZdUxEVUpGZ29veUgzc3FQbVgvZ3lCTVMwcHd2SU5CVEVRQ2laWmh4aW9y?=
 =?utf-8?B?UUQ2TmRwd0QwRHovNS91NWdUdWhuQlBuV3FENVBFaTFXeHdHKzkxUktTdUxk?=
 =?utf-8?B?b2NiS2VEZ1JPNzQwODM3c3JUTFVXZEtEZlcyOTloM3lZTUswTzVacXlUV0NY?=
 =?utf-8?B?djNZTVRZSHVwUE5JdG5oZVZrV1crZFM2bktWRDlOVVJHajRJbVc2ZGJVS05H?=
 =?utf-8?B?NUFNTERsVURQcEllMGMydnExQ2FrTXJJYTFMNXA4MjFIaUdsTDUybXRMU1Yy?=
 =?utf-8?B?SHJlMmJmeld2SXU1NWlTOVo3bnNrVDgrUi9ZMTV5RnUzM3RCMUtSY3AyQnM3?=
 =?utf-8?B?NFpOeWtYV3VjWTJLLy9QQ0dPOXNKem5zcVJUbkpYUWRDSGIwd3JGUVZsVFNT?=
 =?utf-8?B?YVFwOHBrNDR4Rm1pUHphR3FGUm5wSk9MNEZvVkJDRVo4Uitlbjk2RjY0cThU?=
 =?utf-8?B?aE1mSC90M0hsSVRPNWtBV2c5VjB2Z05BK2dTeldsWlcyRGM5TEJkVFdjTFZo?=
 =?utf-8?B?c0E4MHA5RSt4eEZZc3pSVU9DYU9hLzlOZGFIMWl3eXUxdUpUWVJqUEhsS1k1?=
 =?utf-8?B?VXdtVjA2ejZZam01dXk4N2F0KzRKMEUxcmREdTJZQ01OWm5XMzNpTUpHV3lD?=
 =?utf-8?B?U21QZEEwbExIREpqOUNCaXJWeVp2Mm81V1Q5TDFWcStuSi9NRVFOaUFPbW5K?=
 =?utf-8?B?R0Zoa1Zoa3dQV2UvU3kwSElyMkhtcW9SZHF0cnBYWjZOSmV5R1FaN1pDMm5N?=
 =?utf-8?B?YmlvUk9UUFpLQmdUM05EclVKYWlxYVpiK3ZSUlExVXpWYTQ5MFljeXZyRlVY?=
 =?utf-8?B?V01BVXpXQ3RDNTFvRmpUSlR4Y0k1Z29ZTjJCR01yNTZRTXJlaDdwS09HYXdk?=
 =?utf-8?B?b2pPdlhkSGIwVG1NeTA0d2RUemo2SG1aME1HbkljZURSYmJiSk1LNDRLMjZJ?=
 =?utf-8?B?RFVOQT09?=
X-Microsoft-Exchange-Diagnostics: 1; BN1PR0301MB0724;
 6:wn2B1wvHohqtpAvcjRnIylTdlpx6WnM1pQlmgnSsF1MrwcLfVf/K3r8MqdJ4wo1DiHO/ymZ+y8AA8zcLnmqb3WvV1C2LiMzUsV6P5zGTIVpA3oGuMY+1KvPQMcuKEHeOEclpBiIjq4p1f55QCkyfCoP7hzFjnL0lggXtAQ3KqjdZw2QXVMAG9lQXRSHciyjEBUvyPRF/V42dPtu9p235mIFuKiDMMCRl7vqpR75RcfVUCwkwMkn6cE5yEUwzsvLllWysZoCU0DHRhtEh4Al8fCAPiqpgWFTqLE+8HrLMsVucCwYwYnfQZIRhmu/hHhg1XaWtabiHd8++M0CEJBsUW74vqirmk/HgOGq1rEI7zI0Pe71NZKMRsX6AHM762Ge/sCASR1zdNwVOOc4gq77HsuRw9r000WkUkvTxdYSUNq4=;
 5:6KbyZPsGH86zmYVNgwqVM3+RPzxQbQSWUrPr3BwWuydZ3drkBy5IgaZQHkXYjQVEDo5eXwLLGk62laoYTNY628Ad/QDkJEakUeIqw6N0Itq8WuNbl8dlKLrXXhLIN3X86taQvTVBQ0DiOirVeiFAAJ+/ehSM0G6zirKzEW3XQ95YtquFDff+fOrffxsfRbhR;
 24:d//Py+994DTzBIqb/iJlBbY0cd8V0F8JOgLZLZve+kW4aRTBj9pkOkeyFbysDONiWtGJRdVty1psidKtoOb/0D8HuV0iZjITOhLHHpVUAaY=
SpamDiagnosticOutput: 1:99
SpamDiagnosticMetadata: NSPM
X-Microsoft-Exchange-Diagnostics: 1; BN1PR0301MB0724;
 7:21C+dcEi8Jx8G7FwHsyvbFxHE6p+8O3Uy7zK5G/W+pDznIoJOd6r7nwVaqgKj4LMbTJjnssgkqdo0R0LTOs2M6TGAIIj5kd8xyPtSNFRP4D+KZkLszsh+r4SLCISe9De004c/2ib27PagVSKaAf//TV2RurGfDcZjBzpM3m07iusbiGoomARKWw1iJY2577EW6niVal29TLuwMzyodr1IWHiBDIZR3uDP8ar1C59HIFuE91SVy3+s5JJoV0WIJuV8iOEOvNS3WA+xJonBhBsLJF9IsGwd1laxDEmzBn0ZBvSBmH300VRlwxkUentTp3jsdmo62g8Szb7H0kEPocA+bx3Q8hEtVWU3xkOxz9HD0+1KwQa1ekUfDD0k/7uYoJcVK5BHfPoTDsxZx6pp2DVGCVjWBHtqMgc7Gko4sp3yVvB8zU5aas2ZW9xX8bfxFOa1JE1f0suxtvmrykt0/9DqL//o03QTrR+dj8eeJDtl1YHVto5m84D3k7S5kSd+cu9tnf+D3cx7zi5RQFAsB/r1g==
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Feb 2017 11:25:32.7077 (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: BN1PR0301MB0724
Subject: Re: [dpdk-dev] [PATCH v11 07/13] pci: split match and probe
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: DPDK patches and discussions <dev.dpdk.org>
List-Unsubscribe: <http://dpdk.org/ml/options/dev>,
 <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>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
X-List-Received-Date: Wed, 15 Feb 2017 11:25:35 -0000

On Wednesday 15 February 2017 04:15 PM, Jan Blunck wrote:
> On Thu, Jan 19, 2017 at 5:45 AM, Thomas Monjalon
> <thomas.monjalon@6wind.com> wrote:
>> From: Shreyansh Jain <shreyansh.jain@nxp.com>
>>
>> Matching of PCI device address and driver ID table is being done at two
>> discreet locations duplicating the code. (rte_eal_pci_probe_one_driver
>> and rte_eal_pci_detach_dev).
>>
>> Splitting the matching function into a public fn rte_pci_match.
>>
>> Signed-off-by: Shreyansh Jain <shreyansh.jain@nxp.com>
>> Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
>> ---
>>  lib/librte_eal/bsdapp/eal/rte_eal_version.map   |   1 +
>>  lib/librte_eal/common/eal_common_pci.c          | 189 +++++++++++++-----------
>>  lib/librte_eal/common/include/rte_pci.h         |  15 ++
>>  lib/librte_eal/linuxapp/eal/rte_eal_version.map |   1 +
>>  4 files changed, 121 insertions(+), 85 deletions(-)
>>
>> diff --git a/lib/librte_eal/bsdapp/eal/rte_eal_version.map b/lib/librte_eal/bsdapp/eal/rte_eal_version.map
>> index a3d9fac..afa1643 100644
>> --- a/lib/librte_eal/bsdapp/eal/rte_eal_version.map
>> +++ b/lib/librte_eal/bsdapp/eal/rte_eal_version.map
>> @@ -184,5 +184,6 @@ DPDK_17.02 {
>>         rte_bus_register;
>>         rte_bus_scan;
>>         rte_bus_unregister;
>> +       rte_pci_match;
>>
>>  } DPDK_16.11;
>> diff --git a/lib/librte_eal/common/eal_common_pci.c b/lib/librte_eal/common/eal_common_pci.c
>> index 72547bd..4f155c6 100644
>> --- a/lib/librte_eal/common/eal_common_pci.c
>> +++ b/lib/librte_eal/common/eal_common_pci.c
>> @@ -152,129 +152,148 @@ pci_unmap_resource(void *requested_addr, size_t size)
>>                                 requested_addr);
>>  }
>>
>> -/*
>> - * If vendor/device ID match, call the probe() function of the
>> - * driver.
>> - */
>> -static int
>> -rte_eal_pci_probe_one_driver(struct rte_pci_driver *dr, struct rte_pci_device *dev)
>> +int
>> +rte_pci_match(const struct rte_pci_driver *pci_drv,
>> +             const struct rte_pci_device *pci_dev)
>>  {
>> -       int ret;
>> +       int match = 1;
>>         const struct rte_pci_id *id_table;
>>
>> -       for (id_table = dr->id_table; id_table->vendor_id != 0; id_table++) {
>> +       if (!pci_drv || !pci_dev || !pci_drv->id_table) {
>> +               RTE_LOG(DEBUG, EAL, "Invalid PCI Driver object\n");
>> +               return -1;
>> +       }
>>
>> +       for (id_table = pci_drv->id_table; id_table->vendor_id != 0;
>> +            id_table++) {
>>                 /* check if device's identifiers match the driver's ones */
>> -               if (id_table->vendor_id != dev->id.vendor_id &&
>> +               if (id_table->vendor_id != pci_dev->id.vendor_id &&
>>                                 id_table->vendor_id != PCI_ANY_ID)
>>                         continue;
>> -               if (id_table->device_id != dev->id.device_id &&
>> +               if (id_table->device_id != pci_dev->id.device_id &&
>>                                 id_table->device_id != PCI_ANY_ID)
>>                         continue;
>> -               if (id_table->subsystem_vendor_id != dev->id.subsystem_vendor_id &&
>> -                               id_table->subsystem_vendor_id != PCI_ANY_ID)
>> +               if (id_table->subsystem_vendor_id !=
>> +                   pci_dev->id.subsystem_vendor_id &&
>> +                   id_table->subsystem_vendor_id != PCI_ANY_ID)
>>                         continue;
>> -               if (id_table->subsystem_device_id != dev->id.subsystem_device_id &&
>> -                               id_table->subsystem_device_id != PCI_ANY_ID)
>> +               if (id_table->subsystem_device_id !=
>> +                   pci_dev->id.subsystem_device_id &&
>> +                   id_table->subsystem_device_id != PCI_ANY_ID)
>>                         continue;
>> -               if (id_table->class_id != dev->id.class_id &&
>> +               if (id_table->class_id != pci_dev->id.class_id &&
>>                                 id_table->class_id != RTE_CLASS_ANY_ID)
>>                         continue;
>>
>> -               struct rte_pci_addr *loc = &dev->addr;
>> -
>> -               RTE_LOG(INFO, EAL, "PCI device "PCI_PRI_FMT" on NUMA socket %i\n",
>> -                               loc->domain, loc->bus, loc->devid, loc->function,
>> -                               dev->device.numa_node);
>> -
>> -               /* no initialization when blacklisted, return without error */
>> -               if (dev->device.devargs != NULL &&
>> -                       dev->device.devargs->type ==
>> -                               RTE_DEVTYPE_BLACKLISTED_PCI) {
>> -                       RTE_LOG(INFO, EAL, "  Device is blacklisted, not initializing\n");
>> -                       return 1;
>> -               }
>> -
>> -               RTE_LOG(INFO, EAL, "  probe driver: %x:%x %s\n", dev->id.vendor_id,
>> -                               dev->id.device_id, dr->driver.name);
>> -
>> -               if (dr->drv_flags & RTE_PCI_DRV_NEED_MAPPING) {
>> -                       /* map resources for devices that use igb_uio */
>> -                       ret = rte_eal_pci_map_device(dev);
>> -                       if (ret != 0)
>> -                               return ret;
>> -               }
>> -
>> -               /* reference driver structure */
>> -               dev->driver = dr;
>> -
>> -               /* call the driver probe() function */
>> -               ret = dr->probe(dr, dev);
>> -               if (ret) {
>> -                       dev->driver = NULL;
>> -                       if (dr->drv_flags & RTE_PCI_DRV_NEED_MAPPING)
>> -                               rte_eal_pci_unmap_device(dev);
>> -               }
>> -
>> -               return ret;
>> +               match = 0;
>> +               break;
>>         }
>> -       /* return positive value if driver doesn't support this device */
>> -       return 1;
>> +
>> +       return match;
>>  }
>>
>>  /*
>> - * If vendor/device ID match, call the remove() function of the
>> + * If vendor/device ID match, call the probe() function of the
>>   * driver.
>>   */
>>  static int
>> -rte_eal_pci_detach_dev(struct rte_pci_driver *dr,
>> -               struct rte_pci_device *dev)
>> +rte_eal_pci_probe_one_driver(struct rte_pci_driver *dr,
>> +                            struct rte_pci_device *dev)
>>  {
>> -       const struct rte_pci_id *id_table;
>> +       int ret;
>> +       struct rte_pci_addr *loc;
>>
>>         if ((dr == NULL) || (dev == NULL))
>>                 return -EINVAL;
>>
>> -       for (id_table = dr->id_table; id_table->vendor_id != 0; id_table++) {
>> +       loc = &dev->addr;
>>
>> -               /* check if device's identifiers match the driver's ones */
>> -               if (id_table->vendor_id != dev->id.vendor_id &&
>> -                               id_table->vendor_id != PCI_ANY_ID)
>> -                       continue;
>> -               if (id_table->device_id != dev->id.device_id &&
>> -                               id_table->device_id != PCI_ANY_ID)
>> -                       continue;
>> -               if (id_table->subsystem_vendor_id != dev->id.subsystem_vendor_id &&
>> -                               id_table->subsystem_vendor_id != PCI_ANY_ID)
>> -                       continue;
>> -               if (id_table->subsystem_device_id != dev->id.subsystem_device_id &&
>> -                               id_table->subsystem_device_id != PCI_ANY_ID)
>> -                       continue;
>> +       /* The device is not blacklisted; Check if driver supports it */
>> +       ret = rte_pci_match(dr, dev);
>> +       if (ret) {
>> +               /* Match of device and driver failed */
>> +               RTE_LOG(DEBUG, EAL, "Driver (%s) doesn't match the device\n",
>> +                       dr->driver.name);
>> +               return 1;
>> +       }
>>
>> -               struct rte_pci_addr *loc = &dev->addr;
>> +       RTE_LOG(INFO, EAL, "PCI device "PCI_PRI_FMT" on NUMA socket %i\n",
>> +                       loc->domain, loc->bus, loc->devid, loc->function,
>> +                       dev->device.numa_node);
>> +
>> +       /* no initialization when blacklisted, return without error */
>> +       if (dev->device.devargs != NULL &&
>> +               dev->device.devargs->type ==
>> +                       RTE_DEVTYPE_BLACKLISTED_PCI) {
>> +               RTE_LOG(INFO, EAL, "  Device is blacklisted, not"
>> +                       " initializing\n");
>> +               return 1;
>> +       }
>>
>> -               RTE_LOG(DEBUG, EAL, "PCI device "PCI_PRI_FMT" on NUMA socket %i\n",
>> -                               loc->domain, loc->bus, loc->devid,
>> -                               loc->function, dev->device.numa_node);
>> +       RTE_LOG(INFO, EAL, "  probe driver: %x:%x %s\n", dev->id.vendor_id,
>> +               dev->id.device_id, dr->driver.name);
>>
>> -               RTE_LOG(DEBUG, EAL, "  remove driver: %x:%x %s\n", dev->id.vendor_id,
>> -                               dev->id.device_id, dr->driver.name);
>> +       if (dr->drv_flags & RTE_PCI_DRV_NEED_MAPPING) {
>> +               /* map resources for devices that use igb_uio */
>> +               ret = rte_eal_pci_map_device(dev);
>> +               if (ret != 0)
>> +                       return ret;
>> +       }
>>
>> -               if (dr->remove && (dr->remove(dev) < 0))
>> -                       return -1;      /* negative value is an error */
>> +       /* reference driver structure */
>> +       dev->driver = dr;
>>
>> -               /* clear driver structure */
>> +       /* call the driver probe() function */
>> +       ret = dr->probe(dr, dev);
>> +       if (ret) {
>>                 dev->driver = NULL;
>> -
>>                 if (dr->drv_flags & RTE_PCI_DRV_NEED_MAPPING)
>> -                       /* unmap resources for devices that use igb_uio */
>>                         rte_eal_pci_unmap_device(dev);
>> +       }
>>
>> -               return 0;
>> +       return ret;
>> +}
>> +
>> +/*
>> + * If vendor/device ID match, call the remove() function of the
>> + * driver.
>> + */
>> +static int
>> +rte_eal_pci_detach_dev(struct rte_pci_driver *dr,
>> +               struct rte_pci_device *dev)
>> +{
>> +       int ret;
>> +       struct rte_pci_addr *loc;
>> +
>> +       if ((dr == NULL) || (dev == NULL))
>> +               return -EINVAL;
>> +
>> +       ret = rte_pci_match(dr, dev);
>> +       if (ret) {
>> +               /* Device and driver don't match */
>> +               return 1;
>>         }
>>
>> -       /* return positive value if driver doesn't support this device */
>> -       return 1;
>> +       loc = &dev->addr;
>> +
>> +       RTE_LOG(DEBUG, EAL, "PCI device "PCI_PRI_FMT" on NUMA socket %i\n",
>> +                       loc->domain, loc->bus, loc->devid,
>> +                       loc->function, dev->device.numa_node);
>> +
>> +       RTE_LOG(DEBUG, EAL, "  remove driver: %x:%x %s\n", dev->id.vendor_id,
>> +                       dev->id.device_id, dr->driver.name);
>> +
>> +       if (dr->remove && (dr->remove(dev) < 0))
>> +               return -1;      /* negative value is an error */
>> +
>> +       /* clear driver structure */
>> +       dev->driver = NULL;
>> +
>> +       if (dr->drv_flags & RTE_PCI_DRV_NEED_MAPPING)
>> +               /* unmap resources for devices that use igb_uio */
>> +               rte_eal_pci_unmap_device(dev);
>> +
>> +       return 0;
>>  }
>>
>>  /*
>> diff --git a/lib/librte_eal/common/include/rte_pci.h b/lib/librte_eal/common/include/rte_pci.h
>> index 8557e47..adc20b9 100644
>> --- a/lib/librte_eal/common/include/rte_pci.h
>> +++ b/lib/librte_eal/common/include/rte_pci.h
>> @@ -371,6 +371,21 @@ rte_eal_compare_pci_addr(const struct rte_pci_addr *addr,
>>  int rte_eal_pci_scan(void);
>>
>>  /**
>> + * Match the PCI Driver and Device using the ID Table
>> + *
>> + * @param pci_drv
>> + *     PCI driver from which ID table would be extracted
>> + * @param pci_dev
>> + *     PCI device to match against the driver
>> + * @return
>> + *     0 for successful match
>> + *     !0 for unsuccessful match
>> + */
>> +int
>> +rte_pci_match(const struct rte_pci_driver *pci_drv,
>> +             const struct rte_pci_device *pci_dev);
>
> I don't think this symbol needs to be exported and visible outside of EAL.

Agree.
2 reasons why this exists:
1. Initial RFC has match as a callback. That doesn't exist now.
2. Earlier the idea was that other buses/device-types might use this
    function (buses which are PCI like), but that is not a good
    assumption.

>
>> +
>> +/**
>>   * Probe the PCI bus for registered drivers.
>>   *
>>   * Scan the content of the PCI bus, and call the probe() function for
>> diff --git a/lib/librte_eal/linuxapp/eal/rte_eal_version.map b/lib/librte_eal/linuxapp/eal/rte_eal_version.map
>> index 69e0e7b..b557e7c 100644
>> --- a/lib/librte_eal/linuxapp/eal/rte_eal_version.map
>> +++ b/lib/librte_eal/linuxapp/eal/rte_eal_version.map
>> @@ -188,5 +188,6 @@ DPDK_17.02 {
>>         rte_bus_register;
>>         rte_bus_scan;
>>         rte_bus_unregister;
>> +       rte_pci_match;
>>
>>  } DPDK_16.11;
>> --
>> 2.7.0
>>
>