From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756246AbdCUDjG (ORCPT ); Mon, 20 Mar 2017 23:39:06 -0400 Received: from mail-he1eur01on0070.outbound.protection.outlook.com ([104.47.0.70]:2112 "EHLO EUR01-HE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1755843AbdCUDjE (ORCPT ); Mon, 20 Mar 2017 23:39:04 -0400 Authentication-Results: mellanox.com; dkim=none (message not signed) header.d=none;mellanox.com; dmarc=none action=none header.from=mellanox.com; Subject: Re: [PATCH] pci/sriov: Add an option to probe VFs or not before enabling SR-IOV To: Gavin Shan References: <1490022874-54718-1-git-send-email-bodong@mellanox.com> <20170320230706.GA12252@gwshan> <7bfcfdcd-e0a8-f1e9-f112-fa35fdb845d7@mellanox.com> <20170321002445.GA24862@gwshan> CC: , , , , Eli Cohen From: Bodong Wang Message-ID: <70e91a67-7d15-671f-bba3-de00dd51406d@mellanox.com> Date: Mon, 20 Mar 2017 22:38:43 -0500 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.4.0 MIME-Version: 1.0 In-Reply-To: <20170321002445.GA24862@gwshan> Content-Type: text/plain; charset="windows-1252"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [70.113.13.4] X-ClientProxiedBy: DM5PR18CA0033.namprd18.prod.outlook.com (10.173.208.19) To DB6PR0502MB3063.eurprd05.prod.outlook.com (10.172.245.137) X-MS-Office365-Filtering-Correlation-Id: 95325e2a-5cf6-4b78-9669-08d4700bcd8e X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(48565401081);SRVR:DB6PR0502MB3063; X-Microsoft-Exchange-Diagnostics: 1;DB6PR0502MB3063;3:jTvLQ4EaWACN0tZJQaqYd1yDLSpLObIMrUDG2XDPzqW51g6DXOTHqWgmb+aQH/L4fxFoDok8JO1sFAV01ACdtPcLQvQO4aNs82ktohBrXYdspnbkhUjMKlQpwWp7FaVMUgItXY0+C/RNYa6hVTse8ZOQPCaNIg07CH1kSujDM1JLDf6j1yn/jA5aPkTjmQYgbl/si4WiByYJJd66L3XI/Jjp+1/0lVhnoU69DTglKwsK86Qhp6XAp3uF7fHFJx3GtEdAAsiBHosZ6npQJGW+QziZfAduqxi+Z+H33wLrVK4=;25:WnOiiteAawqNSq68sd3dspxJWu55T0cx++G2Q/1EZ2tHjFi6ZgXgbNHbE6waOPi8CQ/sCai0mUOvWvCTkM9CFvx2qh0R/0F1rvfAQXhkAF/Qg8wfB5kqrBwns8/yr47wsH5MzWnoyqLWrjdGFAGFGQ/3RJsHmIfrDGMUQBsGyM4p9QW3sR1kstw8FYyz9F+DzQmwJDJsJgaUqFsKgSJ57MBodVMRMjRxkNjN2bwf5PhLPXLM2rkK81K3wRu0eZi/jM/EKTq9Kei25y7rlgJm4JSVM4b2EWvgt1gl5JiRbXSKThjllT3Dq1TL3F1+C/xDTdcWuLZXWS14WWYJJbDez/rDz8EWrHtNpXUQ9dpHJkoELDP/qvqiidEP6d4k8a8tY6vKf9fD6fio8j77aVHZEyTRGlF/wv3Wp8BZCwpADkGOkTnoc3IL1U8gzEJkYZEDEsxcQZiHOPcXx3FkiGV2qQ== X-Microsoft-Exchange-Diagnostics: 1;DB6PR0502MB3063;31:PkKdMzWAfdlVHjkDgycghQ1/db7JR6fSEctHIUxziRRoEBLPbegZMy0qFkqUyEwJf4DCIiSyOt9x26BqYZRkBJEjvhSLeS5uH3CWQAw3nKe9oFJWJMBmFJ26Mmp3/Z903OGhMHfjVVd2p/Dl/m2OVmEPm9jRZ2bVIS/tTmLV5gWnQlsydrCSnT7MHdhR0WmJ7Zd8Q1EI92XBbMXP1RoKOSVTkLo8Rt13QJiljB01xDo=;20:QPdR8oVS5pC3R3wwmarWZKSDphC1IcAtp/9mE/8uoWaGP0ba8KIlP0tHmEofCoaE6WRXjS+V39nbShB85ROk2AmQSBbrraz0usIdvFjmYu8TW35K+FoHQ920/PBODXB45zE9FSyZ0AUXG2rq0acEDe7Z4TDRmq/YporPGnLwQvM6eNAEf5t57qTPqxwOi8TBlhz6jjMOQju9vdLQA6kg5qAKrR3Ke5w4vLW1QhADkBQqlQB8DukhoLGUKz7Fu4f/2m1t53/aWKVSUX8Nk9ZoNhS26c+kB+Tkos/JPFJnMEDvRP8Gvf/zfYPCkXn/fnHcX9GMwqOfCpSbPKVhjpIoiduDdqyfFWVjBjAM4qrC7YHyWRJN4jenFssxCnZ9lz3DKy9KX4eaBg5P0CE/QfTaWpwGOIc92W6BTGSmaosvcNqrpLlDH51a/yABRRjIXSN6GfG0YuYj5DgKipNNh3BdcA6O7g365/4D7Xy0qgumyRqTR+Xs8k8mWI2fvKHX4UyJ X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040375)(601004)(2401047)(8121501046)(5005006)(3002001)(10201501046)(6055026)(6041248)(20161123562025)(20161123555025)(20161123564025)(20161123558025)(20161123560025)(6072148);SRVR:DB6PR0502MB3063;BCL:0;PCL:0;RULEID:;SRVR:DB6PR0502MB3063; X-Microsoft-Exchange-Diagnostics: 1;DB6PR0502MB3063;4:BUHwqWSeFL9WXKNKWagD+vDRwzsqbS58a7uKzSLD5onaWRX2+PUC9Zo4MXM/ZryT3jk4oaKNQ3grgskixnCw/ytBUprjqqML5zMWjr0ObYaoTaTLDItkCa+MYEUGp2x8ynh6S479FaNikYfDTN/vr/i1i+dPWuMFRwkMiteZptb3LFmfsVg6xWCSQVn2YhJvKKjgVuX/3OU+WynAIduBzjuZ+xlWIm42+lSrDLWwLwnfWM3Eu2QIRfgkwlHtHdFIOyoAJM4ojkX4O+ZuKl4q0yhW27Tov520aCFj6r/QX8WTNHEUO4OldoSysKo4uN54o3EhtJvz8rReshSzISafDnxifZeHQ6Z7DF91VvCXZwEcCgqNO7/fy53Ef+A3XwOtOeJPpLmDMmaL5CDvaa+8YupewekXOuaFSJwMYlHl7qmvLbLbl2toX5ekf7sH2OpJ0t4a8DPFLf5OnItOy9nWUsMS+MSAEjJ/uwXHRcW3/1/yz52ZdShQcuM9iJnEaKYDzYit+gAyRXsx+ueMvU03Z7ulvU2RhDXVoSILp36TKrsP/B56JXfQHVg6h7rCngFhaj5OcPYyv7SWYE782JwG4oUczAGBoNApuFqS36VzLclMFerRnnqOQRdIenPWmLR6 X-Forefront-PRVS: 02530BD3AA X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6009001)(6049001)(39450400003)(39860400002)(39840400002)(39410400002)(39850400002)(51914003)(24454002)(377454003)(66066001)(31686004)(42186005)(90366009)(36756003)(8676002)(25786008)(77096006)(4001350100001)(86362001)(53936002)(31696002)(6246003)(65956001)(53546009)(81166006)(54356999)(47776003)(189998001)(23746002)(50986999)(54906002)(76176999)(65806001)(6486002)(93886004)(6916009)(6116002)(110136004)(107886003)(305945005)(230700001)(3846002)(2906002)(64126003)(4326008)(7736002)(5660300001)(65826007)(50466002)(6666003)(117156001)(83506001)(38730400002)(33646002)(2950100002);DIR:OUT;SFP:1101;SCL:1;SRVR:DB6PR0502MB3063;H:[192.168.1.110];FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?Windows-1252?Q?1;DB6PR0502MB3063;23:vA7XHBkm6XCeg3hchmq7li4UXF43A+OPdHh?= =?Windows-1252?Q?UXFBh1fogoOqTsG1OUOiap5cfppktkKaNoIcfMFMN9zZif0cYxdVNkNe?= =?Windows-1252?Q?7q42ux8ulLKQ/ufM1i04h1y0pGzQi4TP5+FnSfi/EXiCOWF68VEw/dIV?= =?Windows-1252?Q?/Awh2wNRrMIjkSeSssZxf8s3VBTwa2Cku8btRSt0a9vkFPi+IzsSNLG/?= =?Windows-1252?Q?JL4HuodF2fw9w/u6Nm5J/tQI+rMxj4goSR+5v/AwThfqjonVKUzqyiPs?= =?Windows-1252?Q?orXNGpfLJBWnQZbKvodq6cKL9sUYpv7E5HHmodM+1QuoVSmYBOexgJqJ?= =?Windows-1252?Q?Hh4uazWXYS0dYb1DoeSrEVUhWJcMzIJMBjoVfVCWwKYZcrvhB2RuBrmN?= =?Windows-1252?Q?VnPaKO/35K3lYDyHKjWaK8oUywfe9vh/oZnoGfnyQcKSsbj0SPsylVBV?= =?Windows-1252?Q?5+s7g9F0juKlxpddIa1B8L8WnUyhFfW//u49eO22UPKkSgHLp8DXF8Cu?= =?Windows-1252?Q?CTy9MLGV2vJFnUtwY1RVKu656XMxtKFDaC/u6slOLpdyggbSi9HxCvwF?= =?Windows-1252?Q?xP7Q5jp7UqHQfpAz8ORiY5Crmx2Gd3sTGBGaCFSrRC7X9sGgiQQ9AfRV?= =?Windows-1252?Q?uYrsTznkjcUbrE+QkuUp1oZKtuAMrrV7H7cwhYa6DsrCOCy9R/HRm3zZ?= =?Windows-1252?Q?hnAdDBHFkJanC0NBpWwSry2SGWTTr4/UyMScuSx4GOtZ8v1PCci/GrwC?= =?Windows-1252?Q?Eh5PWO9P4x46NulyRL+4Hyk2woPxPKAykE8wAoZamKINIJCIbpvPSV4K?= =?Windows-1252?Q?sA8Yv1cj61XQwSgHdSSES83gi3MglLiXdtlJe5SSgCpbMWN5oAgApAOI?= =?Windows-1252?Q?1wesmeoJxdHDs9z0bFFoWbVGoDSN1Y6kdq3tE1Q/QssWeWGiS41WQ4y2?= =?Windows-1252?Q?4QYXfMhsXOqidtXTxD9fYjj1XF4B7TMAMpsDA6Xg7RavZeXYMDTb9X/V?= =?Windows-1252?Q?U//ACPD63oVtWOn4puFjlNO4P0HGh+ukcwUUMUeOm03A0NIgrkiDgls0?= =?Windows-1252?Q?0LpWoWMG3s0SMiG1r5/h50BCBEAQhg8kL9edNLct3MpZBFLF3OMsXS9s?= =?Windows-1252?Q?E3ezSLh8Jl4iMDdx8jZdnY4NekN4kdtjpM7QAp8b3K08ACdUjv+NzbkC?= =?Windows-1252?Q?i6zoY9bBgf4Sulx50LbyQt77Y9m5ERTSs3MsdB/ocEExyqXRlDtmGMiO?= =?Windows-1252?Q?oH3Ofw/0W86UfLRkK++t2DW+draCUfyS2+WKcVgqiyblbeB+p1bIKp7e?= =?Windows-1252?Q?0srZpoPNw3ytN1iVUrqr3yXh/RDB8Gt3W/EtI7sJVaFCBIl2OPp4i/Bf?= =?Windows-1252?Q?Ksyu6QkPcE84tGhPrvekw7pJW0ItF7xEbpADBzrx/QEIIlogxtgFG86b?= =?Windows-1252?Q?stmJbIo3FAc7RvPuC1qNPGX+zN5sXSop5shs6Ujhng67VOydJnTWwqZo?= =?Windows-1252?Q?HLw+uEabF/cnPebFODTXuOn0rQRni?= X-Microsoft-Exchange-Diagnostics: 1;DB6PR0502MB3063;6:fej2lORiIIb5P15elMHczD8lc50xhTPPY8VvJROx1Dup359EPkWKzl0aK4SGxtO2OxKVnZj9KVG4DZWxP1UsM7UMtadz58qg8LuUUEVbR8+XZdESL3m99JKTL0W2H6og/TqrCFkukMdKwHXVcqQxvMbFVjdgpT08s4aknb2CtK3GW3+iIOwx5AH3RViXgz8TQqqOxGbpfl2UdU5GMwWrUavqfIyV7xb/Ehy89fmCfnbTGw81rw/8XRFpghH6xrcizZoa0K938GrpyZdlrnJzzXLy6TjVZt2Wt8faT8Af5cmj0yvYk6xEvR6qO3v8EYT8PRhfCTgSYHWcAiJhE4/KK/RPQxQfJRxoobpPcYGkQWbkEmQB9VjJg2fxduimfDRN+BMegiphxApMvG2pMKDXXC0pgmcg039SZXGjldkskdI=;5:h0RqrkeTqlJFvz9q1sQja+xWmuLQgXlCQJO1Llc9Ju9D9s6GyS9UBa0Mw8DL/h5L9HNLLOIzci1xcVOqQcv1iKLAlLoDgHUDkMdm25wuzrbIPkJOm6dpw9iLq1X1hf5rpUwG7Z1jUYP6jjQ3bj6l6w==;24:DTpflBUXDGKe8XPugDoHVLsVt070FUUFBzWnbRqLkAj3qGfOZ5S5Dlb8syLkHStHgP0OzuWMSRvFeZZYuy601lUM2sPho9THLAQ8yd5cR8k= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;DB6PR0502MB3063;7:tCB7pw+35lyKvSsADqUreFoPOr0cX+ZYfy4ea36ToIiGLfB8+x2XRM8aToOj3McmpC5TlZRQgKDdMdk1Xr0M7qBWvoAIssmuUQq6xuB2T+vyO5XTaHdU7TGlG3R9WHplUxpYOzCjoEy2sQciiuapiG059uiUwBXqdESSZF24q2IzaP7aqx5kme82/Q0WiO2jer+sji88bQHskAefd+O981H2IX/TusZHUBK5sebEuI26QEHdmlIV3EheQ7BkRreiHvqETr+Q34ESz7lSPjFGXKBklx5eqkf+8jszm4xRU1x4sA4lXEg0qUmy39cQelu34c5i0pO+GuEPIgB3IwSfYw== X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Mar 2017 03:38:54.4673 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0502MB3063 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 3/20/2017 7:24 PM, Gavin Shan wrote: > On Mon, Mar 20, 2017 at 06:34:23PM -0500, Bodong Wang wrote: >> On 3/20/2017 6:07 PM, Gavin Shan wrote: >>> On Mon, Mar 20, 2017 at 05:14:34PM +0200, bodong@mellanox.com wrote: >>>> From: Bodong Wang >>>> >>>> Sometimes it is not desirable to probe the virtual functions after >>>> SRIOV is enabled. This can save host side resource usage by VF >>>> instances which would be eventually probed to VMs. >>>> >>>> Added a new PCI sysfs interface "sriov_probe_vfs" to control that >>> >from PF, all current callers still retain the same functionality. >>>> To modify it, echo 0/n/N (disable probe) or 1/y/Y (enable probe) to >>>> >>>> /sys/bus/pci/devices//sriov_probe_vfs >>>> >>>> Note that, the choice must be made before enabling VFs. The change >>>> will not take effect if VFs are already enabled. Simply, one can set >>>> sriov_numvfs to 0, choose whether to probe or not, and then resume >>>> sriov_numvfs. >>>> >>> Bodong, I'm not sure if there is a requirement to load driver for the >>> specified number of VFs? That indicates no driver will be loaded for >>> other VFs. If so, this interface might serve the purpose as well. >> Gavin, thanks for the review. That is indeed an interesting suggestion. >> Theoretically, we can change that probe_vfs from boolean to integer. And use >> it as a counter to probe the first N VFs(if N < total_vfs). Let's see if >> there are any objections. > Ok. > >>> +#ifdef CONFIG_PCI_IOV >>> + if (!pci_dev->is_virtfn || >>> + (pci_dev->is_virtfn && pci_dev->physfn->sriov->probe_vfs)) { >>> +#endif >>> + error = __pci_device_probe(drv, pci_dev); >>> + if (error) { >>> + pcibios_free_irq(pci_dev); >>> + pci_dev_put(pci_dev); >>> + } >>> +#ifdef CONFIG_PCI_IOV >>> } >>> +#endif >>> >>> I think it's reasonable to have a inline function for this check: >> It's doable, but what's the benefit? >>> #ifdef CONFIG_PCI_IOV >>> static inline bool pci_device_can_probe(struct pci_dev *pdev) >>> { >>> return (!pdev->is_virtfn || pdev->physfn->sriov->probe_vfs); >> should be return (!pdev->is_virtfn || (pci_dev->is_virtfn && >> pci_dev->physfn->sriov->probe_vfs)); >> >> We want to probe that device if 1) it's a PF 2) it'a VF and probe_vfs is set >>> } >>> #else >>> static inline bool pci_device_can_probe(struct pci_dev *pdev) >>> { >>> return true; >>> } >> This function will be a waste if CONFIG_PCI_IOV is not defined. >>> #endif > It makes the code a bit clean. Nope, the proposed conditional > expression is elaborate. Yeah, the purpose is exactly same as > you said: probe driver for non-VF or VFs that were allowed. > > (!pdev->is_virtfn || pdev->physfn->sriov->probe_vfs); > > When pdev->is_virtfn is flase, "pdev->physfn->sriov->probe_vfs" > doesn't take effect. Otherwise, it means pdev->is_virtfn is true > indirectly and going to check "pdev->physfn->sriov->probe_vfs". > So it needn't check pdev->is_virtfn explicitly in later case, > but it isn't wrong :) > > Thanks, > Gavin > Make sense :) Will apply in V1. Thanks, Bodong