From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753002AbdK3NTW (ORCPT ); Thu, 30 Nov 2017 08:19:22 -0500 Received: from mail-eopbgr40092.outbound.protection.outlook.com ([40.107.4.92]:53310 "EHLO EUR03-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1750742AbdK3NTT (ORCPT ); Thu, 30 Nov 2017 08:19:19 -0500 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=ktkhai@virtuozzo.com; Subject: Re: [RFC] bpf: offload: report device information for offloaded programs To: Jakub Kicinski , netdev@vger.kernel.org Cc: linux-kernel@vger.kernel.org, oss-drivers@netronome.com, alexei.starovoitov@gmail.com, daniel@iogearbox.net, "Eric W . Biederman" References: <20171130002251.30498-1-jakub.kicinski@netronome.com> From: Kirill Tkhai Message-ID: <85513945-bcd2-b2b4-24e7-5fbb3e695419@virtuozzo.com> Date: Thu, 30 Nov 2017 16:19:13 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.4.0 MIME-Version: 1.0 In-Reply-To: <20171130002251.30498-1-jakub.kicinski@netronome.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: HE1PR0701CA0082.eurprd07.prod.outlook.com (2603:10a6:3:64::26) To HE1PR0801MB1338.eurprd08.prod.outlook.com (2603:10a6:3:39::28) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 7f7529a1-7ab1-40cf-6824-08d537f4f4ea X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(4534020)(4602075)(7168020)(4627115)(201703031133081)(201702281549075)(5600026)(4604075)(2017052603286);SRVR:HE1PR0801MB1338; X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1338;3:YmIgx4eAqVvs66kd2D/5uqmGmNMRXL9JF8bu2oW9pUdz6G3XflrgUVMoKYuTDyTQ8da+/VD4q2bVPb9XwlUWQRzLPgqRq41UnS0/6UQq2kotU7Xl8t0CTM7yaxS325au25Hrx/rF715Db4cAxFWP9bWCqexJUgWn1fbug173aJ3LaH35G0rudz4ctT9TkA3cSVJstnQoNIzTaLL475UeV3zZ0B227JQiy1Cff3R9uisOTLiz9mG26Tk4GwEx0i4l;25:98X+/8guLT4ak7IvQ540raH5dII21vwftR/pxaWUHMF0BmjGjL2Rszokp8l2+SWmt2Ha+iUikcEohEdnlTojCavNxEWZEBNmaOnTaTVf6O67tMZXKv64qAYRCJmXTvr3DgsWed96qMa5Fmo770OY7NEajnDYyqu7Zsw1EVr7GV6R5pJWX+iNlS7KNmtLLrj4ln4KfaK8zk0XB5n0xIeZSzqcPkyFA5BGL05rdyNvQ1jMsVK2ojystuJHPaOqj51KfBNcg85x7fDyNzV42PXF7Ctl5A8zZ1X/waX7JVZLkzeGE6xMWC7Di6QtURNe0/tEXQ2d1roK/4VmHXMADQmrIQ==;31:IPgfhvE1HnCTiEkE3sLj5McbE2rdPjXf1ig7jfSM7ofBRcg0yMST4miYnVwdytdlfN4lxdAFu7ArC44ddC8xq+ToyHcOWd4+6wAz8z+m2BtCQ8XbpZraDLomL+Pc8UVsfYuaJkohww5F1UfL76d1SYsaBIuIGuxXZK0xNrFStYK5nGzBelqIpfl8zkdSg7r+miUMMWV2OzZpJwhTjyVItcCzhRZIVL/itt1obXSy0xU= X-MS-TrafficTypeDiagnostic: HE1PR0801MB1338: X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1338;20:8z7yV5LzLOjRhXZ9YZ8RzJD65BeSWuKgTud5vrbndv2UEKnrkvx2aKKiPYp1l+ooRo1qILsV3XpbQT45LKhIGAtibIvy8DmxBeYbKCbchP6kp7iPL01eu5o+vbkaz4AeO1lSxyUYT9LRBTvCx7kfzMBTq/oRpXeBRZV3KjAR1F8dZAzQzDDURvRgjsos40jXQ2TCe3HkeuylnQ11btdF927bzzXomhh3wWjeNnmMdJ7WfYtata1fCkf/4hLBJQienco8xuQIxJnbV374Pdve3UafSthKA5IO1hC1JlK6tAml556NRB+aF8j3pKVRqOU/aYO+k1sO7TR2eoJAd0iPtxdNs4MsSLrX6xm0JW+OqMzhM7do66mjKxTi/bhFNyYxqu4sZrE86C2WOIGGdrBkkJBDPZahdwZLJ/ouUAOXpyo=;4:Uqqv30C2HDYH3LQdfvYZWcnVO2HuxBTOa76a9xwh37kqKFPNojSzxDFiXtSRBNQi9LLwjtjZhjQODv6BSPpOeRMtUme4EmnDu2TwMy/S+JA5XONTwZw+NETvYGDlDmsMr4pZHdHPpXBLWs5ETjZVc8b+xs1rYX4PnjOes8vJxpWjHe95LEQNwlSfNc1Idx8tQNiHja9BiOQeMV6hCKcj9WmAWmsQYKEDS4SSLvnZBz2uqExFjsoTZJrxQKTA5hpbEWzxThktAVcoe9QT0xaEtw== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040450)(2401047)(8121501046)(5005006)(3231022)(3002001)(93006095)(93001095)(10201501046)(6041248)(20161123562025)(20161123558100)(20161123555025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123564025)(20161123560025)(6072148)(201708071742011);SRVR:HE1PR0801MB1338;BCL:0;PCL:0;RULEID:(100000803101)(100110400095);SRVR:HE1PR0801MB1338; X-Forefront-PRVS: 05079D8470 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(6009001)(6049001)(346002)(366004)(376002)(199003)(24454002)(189002)(23676004)(39060400002)(6116002)(4326008)(6486002)(77096006)(2486003)(52116002)(55236003)(36756003)(52146003)(65826007)(83506002)(6666003)(50466002)(2906002)(64126003)(16526018)(3846002)(97736004)(2950100002)(31686004)(5660300001)(478600001)(81156014)(47776003)(8936002)(33646002)(8676002)(230700001)(31696002)(65956001)(65806001)(7736002)(316002)(105586002)(305945005)(106356001)(66066001)(86362001)(6246003)(81166006)(189998001)(229853002)(16576012)(68736007)(58126008)(53936002)(25786009)(101416001)(76176010)(54356010)(50986010)(53546010);DIR:OUT;SFP:1102;SCL:1;SRVR:HE1PR0801MB1338;H:[172.16.25.196];FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtIRTFQUjA4MDFNQjEzMzg7MjM6a3lPT2w3Qy9wUUVoNDdOMlVNVFplVThm?= =?utf-8?B?ZTZJUVh4L3p6NW9Kc0pyN0VqMVVGZllHS2xtNTUwRFV1eTFRcWhSNG1KQjdU?= =?utf-8?B?bWN5cUVQK21JaHdTZ2N6NnlZQlZ5cU93N0NqZjZVMk1BK2F5dUJodU0zMGVS?= =?utf-8?B?NmEzRjczR0Z6ZFF6dDVQRDg0Qnhmdm9kWGhzWmlHV1l0d2J6REhuQzNXUjZF?= =?utf-8?B?anhEcUt5TklrTnhqc3BXZHFENklvMjdXM2R0VFlvSWp1ZWVQVzQ3ZXFyM3A3?= =?utf-8?B?U0lFRTA4OXBGOXJUTVVUeS9OUzNpazBXRW1PU0lkMjhSOUx6UG9UWnBOZXVx?= =?utf-8?B?ZDQ0M3JPeGFlZ2ViS0Z0Mkx4ZVYvNUFHQWE4UXU5Qld0K2RBWHc5MlE2ZWFn?= =?utf-8?B?UlhnYzVIeW1TOUQ1cjZFaDc4OUZXM2NzOW5FRm15QklncGRXL0tKNkovVDVB?= =?utf-8?B?T3dTWmNoWXFSWFF0eHJ1VmliMm83STV1OG1kY3p1Z0lYd3BQbi91QXBHR0h3?= =?utf-8?B?Z1FMaTlDNWpwcmFoMENMRUJ0U1dtYmxaUkduMTdwRkthUVFwRHdUZllON0xS?= =?utf-8?B?U1UxeXZGTWxYYll3TUl4RGpaR0VkYXJRUVhRWUNwSHdRZ0Rvc0dDYmd3SjEz?= =?utf-8?B?dzdPWjlUL0VIbkg1SS9uOUY1TWNKVXhUdndZNFFqdENWbUhOYWl4c3JSVmlZ?= =?utf-8?B?SmpFZUFCaHNsMm5aSklzS1NGMDh4Wi82S1ppdkFxelNXNmUzTEVOUG9yUWZB?= =?utf-8?B?aVFJUUxJQ3U0WjRENG5mTUxvSVhnZmZiUWh4M0ZRazFrV1hZbzh5Smluc3hu?= =?utf-8?B?eUpzZmFCb2MzS3B6aENKT1prZDN6VHBjeTlKN2wzRHpreWp6TzBvZk14MlFx?= =?utf-8?B?b0tEMHNXWmoyQ2RYcXlIeG5ZRzROdkwxNUtBUndlM05aN3JZVU5ESDlPMHBD?= =?utf-8?B?aWtTbFpXbzdsdzlqYmQrV3d2YkE2WEcvTHNEZFdIY1JOakhoQWYvZ1owY3hi?= =?utf-8?B?NTBESm1HeWZaOXBGVXJJY2VDc0VDYW55djVIdW1jR3BrMC9HL1MvSjR4bjE1?= =?utf-8?B?Mnl4S3FwZzRJTUp5bGdnVHRGRU8rRTdUV0kweWx5bEhzeHc5TWNTbUtHelNG?= =?utf-8?B?N2VlWkpqN0duckgxZk1tMlNrTVVVU1Y5M0lQNjQ4M2FUK0JJVE0wNkRKazhE?= =?utf-8?B?UDVTR2huTHVFeWRPTE9oN0dEQmRMVFJVb1ViY1dkQ3R6VVJYQ3dFREk1YnJS?= =?utf-8?B?S3IyT3JsdzZtWjBvWXZvRWROMUpGSEwrYk5NeTNYNlRtcWI2eFY1b2pkWDYv?= =?utf-8?B?b3BCTU5wYUZqZDh6empXWlZtS1FGNjVkSUR2VGpJTzNMMVE3NEViQmVtQmJW?= =?utf-8?B?QUpXV2tKN3QydFVTWTR0c3ZzVTdzZWFsUlZoUncxRnhDVFhjRzdzM0luRk5p?= =?utf-8?B?VWU5TkxBUjcxeExGbjFhaEhoOEdpUFBOUk1yaStlc2YzbGViVkloSEtEMTNp?= =?utf-8?B?THh3TVZUQ0RnSzZ5UUpHMVBaZ0o3L21wMUhBNXZ2VG1FekRveUdiN1dvSWtu?= =?utf-8?B?dm56UXFSQnI5OW1GUlhSUTBhSFp6cSt1ODlrSjdGZGN1V21nbUx1SjFSM3dv?= =?utf-8?B?aUZHYVZtQ3N2L1dJbnFiM1QycGp1cFk1U09yajdqWHVmLy9UbE5wNEJFR21U?= =?utf-8?B?R0pPL0Y1eStvWmluWXh0b3ZXaUF3L0xGWnV6RlA0T2pjUGhDNHc1dFBaeSs0?= =?utf-8?B?Z3JPNHJlYlpJSE1CTXllaGFBcEZXS0NmeHYyL3llMjZZeUdRVS9xUkRnNTUz?= =?utf-8?B?WGFyakd3ZmRkK0dlRis0OHI3cXRoUStLTGZjRnpkd1A1SXF1RU1zN2VmN2c4?= =?utf-8?B?QXNUNlN0dWhiYlFYRDU5R1JPbGhVUkhUUitBQ3J3R2ZtdGFqZ0htamE1azdF?= =?utf-8?B?NlR4ekM4NnhrZ1E9PQ==?= X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1338;6:z+xGwbwfxScTuTFi6gRcEPfmG4m23/hvHCLX/yLnNn6Npibf5565uIOPy9qEh/hN39lzculh6qB125cXUI4X/9rIabaDwjNJZlvh416och2NSmKKfkUnhXDEttHkYG46H5LeveTzuOrDzgJ/3ZquS4AjM1iuQY6vNhC43OvnYBS5Oi4DPgf4Cr5et8SnJPBpOLzUBaXnR188qiz0qWFbi5fA4sAAgi0KsmKnq4k6GIRhXz0EPVBTTr0J+YaEDeK0iifnIjCyFr7keDorrHbg3+DPwujVmGvZm1zCJv7Lq67JxW5ju62WhgEgGDfjMFUc3om1BL0t+R8vhBpJ4r1Z1Ur8Gw9ioFcJcUgQry/szxE=;5:5BSWuIfC3OcfvoC375oZSGLU6fhLstpyytT57nE1Exo9mE4FGAfJ4oEQ8/ohNy7aegDffo6f9PpgHWCgxsa4iBBrmp76b8hKueHzDU74fzjmi457vfA2QkM640yNtBEudQyxolFiym4eN7DglGibqSetyVFBJx2vEBrC5yYc3Ic=;24:Zt598TYclaOGqxhdHryzkV1bnw/dDl1TbPuQJk/bK0USxTHoHAAqbqsb6KUrzWVe8mu4Tn2UbQzb+xfA4I9qCvrFMl2NY43ir0o82TVuVkA=;7:iCIFF1/guPkmXTD8ug0ZpbMdoKapSagyqPFnrtDQYDN08TrGjFerwDKNnvxNd+dh14zAapTNvNMUN+tMlTxLsTEybeCJANI1Sn6uRnqpnZoFo16ODku0WB0llRbt5HblTBYRoVZ0N0QWbG/7UHLapJF+82iTyQ2lJHgAS3EwsYeNDg0jWkk0zRq9hYYWLJd8pcgCuYa/5tPKmk1tYkvDRyaZL/zJOnIqCzEjE1YWnrsunLnO9Xu2FCSMOenSxRM4 SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1338;20:NvshVrYdtyWkDwXb0F7ADD8Mcvr1dRGrJL9EEbQ85mDEoEk8umHYsxyPbR3pTg8bW2y4fOW9QBULHu5refuj3kSe1pq1qiUUg3h4bkjPR4bH68YEKd540pfuPvwydMie6pv/7vVnrdF+fL7t0y4MPJ/69v0aX52C/HoLEuqiH3E= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Nov 2017 13:19:16.0375 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 7f7529a1-7ab1-40cf-6824-08d537f4f4ea X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0801MB1338 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi, Jakub, please, read comments below. On 30.11.2017 03:22, Jakub Kicinski wrote: > Report to the user ifindex and namespace information of offloaded > programs. Always set dev_bound to true if program was loaded for > a device which has been since removed. Specify the namespace > using dev/inode combination. > > Signed-off-by: Jakub Kicinski > Reviewed-by: Simon Horman > Reviewed-by: Quentin Monnet > --- > fs/nsfs.c | 2 +- > include/linux/bpf.h | 2 ++ > include/linux/proc_ns.h | 1 + > include/uapi/linux/bpf.h | 5 +++++ > kernel/bpf/offload.c | 34 ++++++++++++++++++++++++++++++++++ > kernel/bpf/syscall.c | 6 ++++++ > tools/include/uapi/linux/bpf.h | 5 +++++ > 7 files changed, 54 insertions(+), 1 deletion(-) [snip] > diff --git a/kernel/bpf/offload.c b/kernel/bpf/offload.c > index 8455b89d1bbf..da98349c647d 100644 > --- a/kernel/bpf/offload.c > +++ b/kernel/bpf/offload.c > @@ -16,9 +16,11 @@ > #include > #include > #include > +#include > #include > #include > #include > +#include > #include > > /* protected by RTNL */ > @@ -164,6 +166,38 @@ int bpf_prog_offload_compile(struct bpf_prog *prog) > return bpf_prog_offload_translate(prog); > } > > +int bpf_prog_offload_info_fill(struct bpf_prog_info *info, > + struct bpf_prog *prog) > +{ > + struct bpf_dev_offload *offload = prog->aux->offload; > + struct inode *ns_inode; > + struct path ns_path; > + struct net *net; > + int ret = 0; > + void *ptr; > + > + info->dev_bound = 1; > + > + rtnl_lock(); rtnl_lock() is too big lock and it is already overused in kernel. Can't we use smaller lock in this driver to protect bpf_prog_offload_devs? I suppose rwlock would be appropriate for that. (Then, we may completely remove rtnl_lock() from bpf_prog_offload_init() and use readlocked dev_base_lock for __dev_get_by_index() instead and the new small_rwlock to link in the list. Not sure about bpf_prog_offload_verifier_prep() and bpf_prog_offload_translate() and which context expect net_device_ops->ndo_bpf users. Either they need rtnl or not). Then the below hunk: > + if (!offload->netdev) > + goto out; > + > + net = dev_net(offload->netdev); > + get_net(net); /* __ns_get_path() drops the reference */ will be: read_lock(&small_rwlock); if (!offload->netdev) goto out; net = dev_net(offload->netdev); get_net(net); /* __ns_get_path() drops the reference */ read_unlock(&small_rwlock); and rtnl_lock() won't be touched. > + ptr = __ns_get_path(&ns_path, &net->ns); > + ret = PTR_ERR_OR_ZERO(ptr); > + if (ret) > + goto out; > + ns_inode = ns_path.dentry->d_inode; > + > + info->ns_dev = new_encode_dev(ns_inode->i_sb->s_dev); > + info->ns_inode = ns_inode->i_ino; > + info->ifindex = offload->netdev->ifindex; > +out: > + rtnl_unlock(); > + return ret; > +} > + [snip] Kirill