From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751955AbcFVA4I (ORCPT ); Tue, 21 Jun 2016 20:56:08 -0400 Received: from mail-bn1bon0066.outbound.protection.outlook.com ([157.56.111.66]:61727 "EHLO na01-bn1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751427AbcFVA4G (ORCPT ); Tue, 21 Jun 2016 20:56:06 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Yuri.Norov@caviumnetworks.com; Date: Wed, 22 Jun 2016 03:51:35 +0300 From: Yury Norov To: Andrew Morton CC: Yury Norov , , , , , , , , , Alexey Klimov Subject: Re: [PATCH] mm: slab.h: use ilog2() in kmalloc_index() Message-ID: <20160622005135.GA342@yury-N73SV> References: <1466465586-22096-1-git-send-email-yury.norov@gmail.com> <20160621145237.dae264ea5fe6b3b7f2d2d4e6@linux-foundation.org> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Disposition: inline In-Reply-To: <20160621145237.dae264ea5fe6b3b7f2d2d4e6@linux-foundation.org> User-Agent: Mutt/1.5.24 (2015-08-30) X-Originating-IP: [95.143.213.121] X-ClientProxiedBy: AM5PR0501CA0042.eurprd05.prod.outlook.com (10.164.187.52) To SN1PR07MB2254.namprd07.prod.outlook.com (10.164.47.148) X-MS-Office365-Filtering-Correlation-Id: 61660745-3d6a-4aeb-9361-08d39a37fb82 X-Microsoft-Exchange-Diagnostics: 1;SN1PR07MB2254;2:Fiy36gSv83UU59+XJhPMD5xUF4gdfy3kXqAD8wOgNj/pt7C91ynT+rWOW7Tg3/Ej0WnWU0N8iMoUkPXykEA9XmVoAmR6w3X0jQYSn/1/2tRUFzUUk0n0fQFv33VcsbDX9zUPqhT8w5N2V0lfqrRy7dnQOy8KkjXg1ZlauaVdG7OWF4WVDweFj8ErsS296++b;3:x/LDKApCZ7OxndUzMffAptvPGURtzimZz/2H0WWwcmo0IwEZx985lbb7BLuMhvbgscyDX8Z4aEKHSzbZL4T206og5rfCvv1W7kKEe+pmQGS31L2DkLlRkrvXuf2smOnC X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:SN1PR07MB2254; X-Microsoft-Exchange-Diagnostics: 1;SN1PR07MB2254;25:fMkG2CiHvPPg8nQ+V2dH2qi0pm6BUw4/CxoOrO8hIkOKcg5/QOlAkcEg0zFYPOqFPHj4seTv+RzJe6ykYC1KnuB0wSay9Mz9bbeJf96uWLAZlX2ENZlixF0ayZrWKfIub4yKmL7c54Hk+7kReuFgpHRJEC7tn55HIdEVRIBsY/2mtXSn+ExSi4dotMklOW6C57SJopewiUmmrKH/4H9wXmxx2MrI8WBVJX4uX9ZQrbtWGniV8o6vRfvdyRZSAHzbBzGCH9EFo5pQVuHW0jawND52eenMBuptcizwFOkSqB2J6sf2U92DoKwRXDm6y5KLFeBaoVqpOoT0mJ1xw8G+di1JDM6uwFR+us8yAb/t6iYeOaRlVphOaD/aQIRCc4O/0UP0JeRXg1PBnVuqEwhWJWKBCOpWANBDP2fAD/KcBQJIi7RjRyUyVuo59kVU65mUx9LajseSt/L5vV09hDfQ3RHth6P5fj0YUGKPJAAJzVCmhmOko3c1Yh7FfJvLXdyYfVEU8Nikx4X/vb4ochW1HH5uX+h+knIBWBK6NND1icByWFQPLS4/YLruJNa4RI0YAkcGZUutlB2P2KbZPt1v0bjyUpvROJ6F68Eu1rcpy99q9Ars7g5EqvxkHfPFbjdjJDmd3HfiesBP/I20mNRteZE4DhXFQh8KgIb1xZ5kvTnysbGXTpoPGvIkMH1DZazkpvR6OQy0hLYiBZppAw0wjDPFm9AByuT4x9ogaU1+uo1lGA5EvtNadKPlZ+VdGTOf X-Microsoft-Exchange-Diagnostics: 1;SN1PR07MB2254;20:8lMKm1zShRutwsajw42Tyr1aSbSzK76lC0sJ1bUGgHIxJxmDBq37QQwMz0riPpkh439juEbmTzbcC2ryLv8HS7no3crDP3eqwSF6Gg7bUE94dgNwukIUym/fSyGY2tVahLZKWipY659fuexweUIXwGxY6B+nazs7Z8VQZaDNBBrgRkfIx/f6lFYcl9fgw2Y2WHIjFhmz+T8Ovu1xRa4LrK9HBBAyoy11kndGx/WiPbihY/1sakZ2QpEGOdYj8jfohrBH5nJzWfaSqElB6JuwzZm0aDPUKKLGr6P2UqaBGboIbw/ahHhRncRF0NDiEJEbzwZK5qrYy0rhSOX9jQb6rB/dVjwJkeZt5OhmADg0GHmcaS3TPegKeqd/drf8gmmc7VSiW0LVeutJ6vO9Bg+Sta0cL+jczXgg4so99T3fA0WR4E4eB9o8kQYvmou+RQ7lWURwM6HI9tqjsto8u6MMQ9tRkvB9v1pR/ZMAVA9qlJeZ7CbjAb9Rh5gRxyxQ3B3kfvr1QIpSFOS80enFawwuqz6FvX2EZZvr2VbgDB8NNUoaHJXtX2hNXIafJHZZ10m3pd31sHPRKicKf8NdXjweLZNitJSSDNR+abT2Jz/o87o= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(17755550239193); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046);SRVR:SN1PR07MB2254;BCL:0;PCL:0;RULEID:;SRVR:SN1PR07MB2254; X-Microsoft-Exchange-Diagnostics: 1;SN1PR07MB2254;4:MmvuD4hEoWGTbQfaC93FodbNic1tHMUV+8e1T+/8s7pGVooLOAwfy8pYHJhoVwz4m8NvyGN6TUoBzvm8ZPv9igkdS+d/hlUv2x3KenMxszsOeIk/P2R2f0yrTdMZv+E5645usUS1uUqZ6STz1z75B4kWRTPS83skCBvA4XrvKZkk33vg4xXXvMYW4+TwCZh3XmGLJGSceMXlTKcAqZX6wnHOemPnpm6OVhO+UwuPhJaDyDExEZoj2U8QA8GcQ3l/tIzB0RvDcs1T30wOKfHnxGv43MgifFOjwnDwsNPyrtHSWNdPUtsmezcjhwdWeNqGjwtYuXHDHb3EK14my/eQV8lEdq+LCgd1yrh1yVukM3dUWn5DokpdHHwU4UrzUhqH42UpoKNPyrrt9wX3ZNpql6trlasvVbSFgSKf0e3I0EA= X-Forefront-PRVS: 0981815F2F X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6069001)(6009001)(7916002)(199003)(189002)(24454002)(76176999)(586003)(76506005)(2950100001)(6116002)(81166006)(92566002)(8676002)(81156014)(106356001)(50986999)(54356999)(83506001)(105586002)(189998001)(3846002)(50466002)(77096005)(68736007)(23726003)(1076002)(110136002)(7846002)(101416001)(2906002)(47776003)(66066001)(46406003)(4326007)(42186005)(33656002)(19580405001)(97736004)(19580395003)(4001350100001)(33716001)(9686002)(7736002)(97756001);DIR:OUT;SFP:1101;SCL:1;SRVR:SN1PR07MB2254;H:localhost;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;SN1PR07MB2254;23:6qPEni4SZz7DKLnKds5rKjtO1o6QIKjq/tCdlUV9e?= =?us-ascii?Q?jssCWStyK11M8QTR5AgsUh81SjUPdqeY1GqhSP0gUDCMLXxLjPG0vaeYlaUV?= =?us-ascii?Q?T+IT50/m/KJ7psJy6YDoz7sCIZTu+F5W87QzqCba55MDViw1jSteZ9pomQhz?= =?us-ascii?Q?JVs7vg70sK+0/OKMYYk4d6T2SBNvrRDrYDBTdqPr+AbwupYPSrPurd9QSMJd?= =?us-ascii?Q?l1fx7kcTe5EtDSHtVmmGtds8eTA4mh7/qNaEc3sBVilQwCIJHGjxJh5rPkpO?= =?us-ascii?Q?pwvKA+0kO0aL2nY2yDUM5I2hraA68VyDFmCEWMMjOYCcU0wfF+YKLv3V3QLB?= =?us-ascii?Q?6uGv+aWmxM/XcPNVeFvPXwpURha28H3lRbNSeb26jfCqwbQe8LOuJU9/DEUv?= =?us-ascii?Q?sqkrcFFPSMBlV1W2s79F2dz4adBTFD11kxiT5a+PrJWMgjyOY5QEAaGLwx0n?= =?us-ascii?Q?1O9gKuu9m2na3AdIdfUU3acQjifieRnuAuhUCE1RBltqK/SIA1RPzHHLmsFt?= =?us-ascii?Q?BBK0en87ZZ4X3qG9CtZLHNWs0qXK169TUSZipte4iTjZgcrLNqgxHVPVB4QA?= =?us-ascii?Q?ZsIoWSsSS6hJhS6yEQ2IIjBRc6JhsNISEK9a7FnH0HXqeuGAR4ZGuWvOHJia?= =?us-ascii?Q?42ZKgs4lzIMeYAiAXP4flpc9+LeG3zuHTOAJzeuD2vc3V6RSVUVwGciiFLrV?= =?us-ascii?Q?id2csfYFjRqpi4x49UF9RbkMrJulDyGqI4FmgwIjPCYKJu3TUIp1aBnDUapm?= =?us-ascii?Q?TjEk5bJJF/Ck1ZYJMFABrMD7tU7rcAPgZp2rwgno9y0fTCNpeZdnZiGHfMDv?= =?us-ascii?Q?EUr11Qah00YKidAPomXu/pcdt/fPJUVJqK0NdngJZgfIW1Dn8slXnWAapLsZ?= =?us-ascii?Q?Ph4OEO/rDN48NycsvQgojgezvDYCXKq2i5niAR9MDWQI8zTZA/VW9rrMMzCy?= =?us-ascii?Q?ML0xxqZlomUS53J0K4amqjHHZfpLPxfnL2IQAXXVU1K0k4X/eGuCGAAeA88x?= =?us-ascii?Q?cx7zz2yHusfRddNsrmk/OPMFsj9ziSA5pmz84EPJq3ZX8uoiaryWCpY188W1?= =?us-ascii?Q?nqSsHhx9myAJYCacKrmtK9dMDSvlJJZ2tFOzMx3ja+M2MedIZTUeQgBFujln?= =?us-ascii?Q?W17I3g+N/xY9KEWnwrJqiQSsE+vEM3y?= X-Microsoft-Exchange-Diagnostics: 1;SN1PR07MB2254;6:nkO5jRRkEYOPxQekUdsiTr943QmAuRGDnHG35PF/aCo9o9vazJ/EevW1WrC2Mym08dNtW3M1msRXtsTgeL4RLzc3mBGPshzs81aqoHhHOIXQX96OBeBBXyCa4osOuCzhDrxOUoXCTUjddDWyjxjr43gVjtyxz2fxlxwe3idBxyogJtq4v4hrPzCAHyyAFua9oSINQGav8CtXQVoK9+EqAof504JLRArWT8HbwN+8J8IYYsgUe4yAPJtqTLGNJ5tvScAtqkWWBfGG1yKbS9EKL+PJfo6cWTgWogR8D4NZ8Bo=;5:j7UqcQgIp9k3WhlgE7kTyxFDeTJWrJVRmjeWNeQmBrnZSIBOSxBJMSXyu80Zz3UjFschYR+ZShDu/IXvoBRs8l0UNqQwCT6rV0eNXG7Gi6/018J7U4YZY+pBo+VCncn4SbtN639vUG00yqIk7b3tpg==;24:MStXwkLIX1dZFa0KI2Ls+vwFtNZMNJmm25b/vCh/CyItwIE9KHlb9h1xBPG2SqG6O6zzTffZ3QvEtpyYUnvthf2fO/CKi3ywD6PR3A2R2fY=;7:RKAnbwyNLoxRtfAApCty0CdVIesF7lQ1zXHC/5J08xFrnuu6rC+2plQbPu1rsBZmb+/f+J+6BdxwgW2VeycSY7nQNsNG24FZ7iZ0Vt0zUQBgbWTV1DO8g5QX1ztp2K/sXfoEiCEHA5J6FRq+GRN4mN3Yoj5Z5krMCMB7kvDFTngFxVg5hz7uipl61Yfus781fvOxNW/HCPQprThUbE0d/3UiglkW57AAolEEV56LWXxtGDJi/sxDjQmdOiFeu4Sf SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Jun 2016 00:56:01.9186 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN1PR07MB2254 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Jun 21, 2016 at 02:52:37PM -0700, Andrew Morton wrote: > On Tue, 21 Jun 2016 02:33:06 +0300 Yury Norov wrote: > > > kmalloc_index() uses simple straightforward way to calculate > > bit position of nearest or equal upper power of 2. > > This effectively results in generation of 24 episodes of > > compare-branch instructions in assembler. > > > > There is shorter way to calculate this: fls(size - 1). > > > > The patch removes hard-coded calculation of kmalloc slab and > > uses ilog2() instead that works on top of fls(). ilog2 is used > > with intention that compiler also might optimize constant case > > during compile time if it detects that. > > > > BUG() is moved to the beginning of function. We left it here to > > provide identical behaviour to previous version. It may be removed > > if there's no requirement in it anymore. > > > > While we're at this, fix comment that describes return value. > > kmalloc_index() is always called with a constant-valued `size' (see > __builtin_constant_p() tests) It might change one day. This function is public to any slab user. If you really want to allow call kmalloc_index() for constants only, you'd place __builtin_constant_p() tests inside kmalloc_index(). > so the compiler will evaluate the switch > statement at compile-time. This will be more efficient than calling > fls() at runtime. There will be no fls() for constant at runtime because ilog2() calculates constant values at compile-time as well. From this point of view, this patch removes code duplication, as we already have compile-time log() calculation in kernel, and should re-use it whenever possible.\ Yury.