Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751441AbdFEOI2 (ORCPT ); Mon, 5 Jun 2017 10:08:28 -0400 Received: from mail-eopbgr50081.outbound.protection.outlook.com ([40.107.5.81]:11168 "EHLO EUR03-VE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751301AbdFEOI0 (ORCPT ); Mon, 5 Jun 2017 10:08:26 -0400 Authentication-Results: spf=pass (sender IP is 193.47.165.134) smtp.mailfrom=mellanox.com; kernel.org; dkim=none (message not signed) header.d=none;kernel.org; dmarc=pass action=none header.from=mellanox.com; Subject: Re: [PATCH] nvme-rdma: remove race conditions from IB signalling To: Marta Rybczynska , , , , , , References: <1785464880.73761005.1496655938570.JavaMail.zimbra@kalray.eu> CC: Jason Gunthorpe , Bart Van Assche , Doug Ledford , "Leon Romanovsky" From: Max Gurtovoy Message-ID: Date: Mon, 5 Jun 2017 17:08:16 +0300 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 MIME-Version: 1.0 In-Reply-To: <1785464880.73761005.1496655938570.JavaMail.zimbra@kalray.eu> Content-Type: text/plain; charset="windows-1252"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [10.223.3.143] X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:193.47.165.134;IPV:NLI;CTRY:IL;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(39410400002)(39400400002)(39860400002)(39840400002)(39450400003)(2980300002)(438002)(377454003)(199003)(189002)(24454002)(9170700003)(54906002)(4001350100001)(3846002)(6116002)(8936002)(189998001)(81166006)(8676002)(50986999)(76176999)(54356999)(33646002)(65956001)(31686004)(106466001)(478600001)(2906002)(47776003)(230700001)(50466002)(229853002)(305945005)(356003)(23746002)(7416002)(53546009)(8656002)(83506001)(7736002)(2950100002)(4326008)(86362001)(6246003)(36756003)(31696002)(38730400002)(2201001)(77096006)(5660300001)(3940600001)(2101003);DIR:OUT;SFP:1101;SCL:1;SRVR:DB5PR05MB1352;H:mtlcas13.mtl.com;FPR:;SPF:Pass;MLV:sfv;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;AM1FFO11FD017;1:+W21cma+WrVTZ/yfvac2gRyYNBkOnwuG+c8X5WXzEZFmvUAJnkeWovt8GGtXvyQPpeUVqtAW4hvVZFzb4LhUL4ZQswoGY0BaU5U+ZggW2d9aEgsmC1lBBqa2cFiZucF7dYu1Jo1lbrFR/n7SfNBMSpE0Qt0uuFiHkpEqyalEWTjrRhqz6imb1SEM0cqJ2YjCZ6E6/+IKvtBfhvrappGyjrV4Jn6PtBJ6MYDuB8nREgpyLBVulvAlu6nu+SCVIqbbMr4SZ4N1ueUhT6C+ggBqF+IxsklF1O0tL6JJwXG/iKSi2O7aBy077iL3FmMDf+Mj0oooahsEkW15roa/IcI7wUJQgGDex8HxyS+aEPNrhTMrXfOWpW7ft0pN+aoZC8p3ewCJ0ixVg8aK4S71YUnPvNepkPScv3xmuG/twHQ/xW6C3057Zy5mKiUAxmLTsjght6FSaj5vz9mT2lPBht7s7EeHFHr43KR0JdusJcRvQbX6lKmHBuWnTblRWKEXvtAm8Q98mUct+m0iJEI1I+WLqwQljDzlP7eTGQJmOdXh3MaEVClJHwZf3LWu7rhE34tyZSaXDh16Was9811+/CF1PH5siVLPQ94N98H1a4x9A0RaV4+rVw/PTan1id+SGASX X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB5PR05MB1352: X-MS-Office365-Filtering-Correlation-Id: 0c9934e8-3a72-4e47-9868-08d4ac1c529a X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(8251501002)(2017030254075)(201703131423075)(201703031133081);SRVR:DB5PR05MB1352; X-Microsoft-Exchange-Diagnostics: 1;DB5PR05MB1352;3:9gSDh5ahxeIoSKA7cpMlm6LOAnqke0ecP9xU3XK3gc9Vp1cis/9Uy50gsJeuUk/jnXcyBND9hHYYkWj3JxgWKbvnC5CaU+2vj1Dyy26/57RkqejeREtMk+jksVkN5NWjR+/rWZGG/s3iwXl3YLr8MYN7eLvjqAIHdAxgocpGFPBI3QCZaf83d7GJZHmaqgQHnMzgxksrOx+mrzz3uDGdepk9FAd99+GBUhOhVcJfg9akBnlHfP+jK7zY904QCVheFouQZ5BR7GUWWcQoOHuP90AJ8EP0X8nVYIFHHbz+U9WstPnqpMXcQebBeBzj0n6KQjNk6hQ4smRDFqBEvYG+TQ5kB9HAQkNjASjEgTIqg2ELi354NsWVolPoLkIe4zs6JDD2Mi4hop9/U91dqDZLFokhBaoFsSM3Y11KQE6t1LPfzMWtI40bGynAuN7rJPRgSw7bw0SUu6WQYDjIXiAyit+0blfvmjghHRcY8Bj33gHfa+rFEk3G0ZdADgbUrZjB X-Microsoft-Exchange-Diagnostics: 1;DB5PR05MB1352;25:1B1zcwO7pUNGRd3T+GFj0Nbw9g60+LUJi/6l/RN1gNXb6AyIvVwZMannnhzEOa1QKUotMYQWcPTS9tX4t3YQ7VWRZzN8FwXYWCxcRySaKynESU3Ymvyvs57X6UMv8ZYigzzvJm9ihvU8R6o8LtB2uGihOYfbnN1xG/94oDbmunFMxkyIgYD/1uwxgaP+L8mGbrWOjWucNcJoj19G0uZQo8mA0WKx6Ip37Wn92V/WsKGdeFuo8JleLtIO5NALvpKnw18EHy4eNNWTN0XB34T6WVy1yH0BNE+lTc6X2hCb98DuGjU+IsUk26vx+8l256Vl6GYkXqCaqvKPjkJU3SAJ8nZXK435gpyQKpu02MPN5VdN6Qn9DP40AdXtru06lzI5D4H8M34yCMIUde7sio12gUOuYYIrAfkWTD6fpXkKKlDqBjnHWMhl0bCwo4aypa1OlR6/4R8AvcoUIIdpDnGWGBt59w4+R1t96MD5KP94ftE=;31:kYsZcxn3wDmqjnAczxiF79NhotWDsKLideDn/k0rjMoyfGU21KFOg9Y5oAXSl9iZjW0GLPoMPJYYdq2ewwadGrGFJe4cp6CDRTnf795sZ2Oe0ZfqmfJWwgmJ1fMwpavWIdSD8HrH5T5X0MmPySfMHDAQLTqiEXsFbQR/BBOiRAQfd5fMKgDgBux1rHR+8HprdbkuC3r9vvrrFUQWZvur7+yeoLnRqwt2Svq28PSjgps9T+1F/r75eormDDHEfqHVInPTIuPgyekh3fJYUYyZEw== X-Microsoft-Exchange-Diagnostics: 1;DB5PR05MB1352;20:Dz4riGjw63SSeo6Vqxtp0DtrJNKQsHVQW7hKFRK+7vEiAeLqXOeTM4MSJ1+yC7bUtewGp31l4JETVub/A3xT19mCZI06/uqfIZH8TYY8BBNoZoQV392A1dRHMlTBFij+NyZvID2vuhXCD7OXfg1vd7f+orul3A/Sxk8jT1VnC6C62zkSIgj3ZtU9BCTA8cO550DC2GhDPPF+hU9jWelkBt+rJVjy9IBJwSe9FfPzUIrNfG6xUlXHWUruT1zVfxzGh5YVKMpxOPDj5AW9UrawI/R4UsIbftdwEqyFs6tupOsT1595tKRM60iOP6rKloSQ0CkTsmbHZch6ARc8n4Si38PWN/ouW77My85PWxImP8iHR3MB6iRrArwwLW00heEG6keAfCLFzCH1cfCzym8N6RdCOG5Wmu2JTQnio4UwK9Nm1NSfVSO2Loi4l51LHafpZmD1i4M3ZU+XQ+xLNHcsZ6LF0bg5p3a7i9EOUkzmk/+kkLBSmonmUpfRum6EcwKH X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(8121501046)(5005006)(13016025)(13018025)(3002001)(10201501046)(93006095)(93004095)(100000703101)(100105400095)(6055026)(6041248)(20161123560025)(20161123564025)(20161123558100)(20161123555025)(20161123562025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(6072148)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:DB5PR05MB1352;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:DB5PR05MB1352; X-Microsoft-Exchange-Diagnostics: =?Windows-1252?Q?1;DB5PR05MB1352;4:+RPf3wu6yFLJr8vyoM6urr4wFyAs3+PSeku7Y5?= =?Windows-1252?Q?2FFaNNN/ZkTvQwMERDYwTZqARPYYE3hA1lxPXrhnTif4+BE6YkZJYPcX?= =?Windows-1252?Q?88Ck7/y4ofWrDt4fjO7i9XzxL8kZJ5pVvWG55yitmPAtcakT7QsIycnc?= =?Windows-1252?Q?7CJZ2Zr6PL7vUVMgI374llE39ZD0p3e1rPM5CRKW4BtsfqBpbAfxB8uN?= =?Windows-1252?Q?0Y58wQlt7YOu4ymU50Rr2ye8fTdZcuHXXHs+MOn+Hh3DhwYeIm3ut0Ft?= =?Windows-1252?Q?f8cabsPEFjZe2iLkB0Y6caARgJdqXYJYSBq1ItbCeqKs0+axqJWN7ivo?= =?Windows-1252?Q?POY2U+ye9+rvcXWgq3JrWIxwh3QXbopFXHfX/39Oai2ZIeFPjggsi2Y/?= =?Windows-1252?Q?Z/x3plscOij3oST0qrf0Vgdtl6I5UejW4PjSIZHe5AmoWe1AQuB/sZz/?= =?Windows-1252?Q?X0Gjn79hBXviDAxQhEGe1VRjJbxi0dDRTHoKGoUHQNq9Vi/IUUk+ihP3?= =?Windows-1252?Q?whuZuIqvJgllzS9lSSKpo2HGFfyCLljyXiqgLOd7VgQtfYVvz8MxX3tA?= =?Windows-1252?Q?e/DOFyBxBl4j00ApeR+KVaBh6Ns9iHjpR0VOt+wYeG2A15HCkq5mJ3GL?= =?Windows-1252?Q?t/ruSjqcz8GH+hEKvepNDg+g8VkqkkH3cSx2MWR64iiiFsAoMoMJ80IP?= =?Windows-1252?Q?16/JTIRosffLqxjJvo9dwTx9zY1x8eN77KXC7X1V8bxJRLGZadel/qiW?= =?Windows-1252?Q?6rbalgiDxddHh75HPHspPpf1Kof2ADWVCSH8i+IaJEUo6FuKmqhpZlDg?= =?Windows-1252?Q?RLKOTApdnRbZH17sK22NdPE0IuB1qGYklrnSPKDsa1AWXaQN6ubFLz94?= =?Windows-1252?Q?1Ov8GgXAeyDcKvjvKn57zawfPUOYRYtQ3ZUuyK0iu0bdmHjS96BmDLI7?= =?Windows-1252?Q?084IWoqclVj3w04h3RO4Sg1SR9xpS8IXvBrQLJq7S8AOU4TNqL8ZzeHi?= =?Windows-1252?Q?clJE3mY97N9P6RyNrckz0ZWYrdBl80hs34RMlsLKvGGVNd3rY377TFJN?= =?Windows-1252?Q?aMVkIS39SOaA+8CAbVm3wa3j9CII7TPAvrlyXsqL2FiBYRuxnoYzw4RA?= =?Windows-1252?Q?Upw13SSK9B5KUjjoSLs1EHeaZR/q9TaCTNb2tSVWooEySWlFiMkuWwyB?= =?Windows-1252?Q?Ml6r2m6oU2Gzldt8MBn7RN40BglkQHGzAKaysqPmbuecwmyInnEY0H6H?= =?Windows-1252?Q?JIXlUnhGsqV03+vzBg1A9WgGdIPjSpwkRMfzwMKrivXmfeS/5nTuiH3J?= =?Windows-1252?Q?zY?= X-Forefront-PRVS: 0329B15C8A X-Microsoft-Exchange-Diagnostics: =?Windows-1252?Q?1;DB5PR05MB1352;23:SqKoKSsMt4D5wLgGCcrjBcIDHWMINoEYvRyF3?= =?Windows-1252?Q?7G+ruXpjkzBw9aq0q11ITRn0qiE9BtPj9pLcaojTnO6D/iw2WQNx4ywA?= =?Windows-1252?Q?CQ/8fqEwf1B40VL4NKOR7MwOZ1L3TtgYZd5JTgZF3o48wbbzo65yaBIG?= =?Windows-1252?Q?O+u8x+E7e/0cl4Qhf5wLsrAwBYe9LnEgG4dAqUMkenFeN2QvO0LtzYx7?= =?Windows-1252?Q?+6fLzfEfX9xLV5STEdubFVzKVWlUJy0QSJ0Nhdna6zwxurW4PpW07tC4?= =?Windows-1252?Q?G70SrZldrwOso+e7GX1TpmS38tqq4QvUdBGKBB+wvW7YS0vpmBB7VKm3?= =?Windows-1252?Q?ydKDPy3qJ4ma7Eis90t27qZdMWbY3RBCR73GzF2M5T1c/rnDUC5VkH3B?= =?Windows-1252?Q?E5/+AS2uoc5qzspRFBwPx+obOWBNhNCugd+E/dzbmmUNz9y6f4VIktrP?= =?Windows-1252?Q?RjyLHq3jmUyGytiYCv4xZYUEqvUkBSGwryM81cLpty2FIxQJ6h8t4OE2?= =?Windows-1252?Q?Eiz8GNAqMywR8DrLi8JlI4xT296FwvnFtVFXWjDylG3mVEg33XzjAKKy?= =?Windows-1252?Q?D2TughPOIZZn7LvFf8lsLLcgj6NOy4LEvmgEypW3rtGmR+qPgx/iujfi?= =?Windows-1252?Q?TEluGRjTUg50MBx0GkNlqfy85FJOpeCp1XDNGho+5O1dutGmhwW6tzLF?= =?Windows-1252?Q?UFdEWAqP0jlLPFEIKTUQ8QfHMTg58jeU+/LetDLEBV4ICx0GZ5Sq5rF4?= =?Windows-1252?Q?2Du6WdT9J8raRP/QRtF1Qlyn3h4CHf59llBIomxf4phjxGNy7AknDwOR?= =?Windows-1252?Q?pNOgWIRi0DzWKbvWqryp7dIp4XWm4InskCHO8x4yJppTYWaThMiTp3lr?= =?Windows-1252?Q?3RZ5S30j9ExgfZV8ReLHPBSTPxzRLUm87OKvZCQ9r616ahjQ1A893XKE?= =?Windows-1252?Q?ApAqXBaKi+P8QQOKx9m1SRiEJKTBic+RrbL1TsGsuNHTRz5IaymZY6pm?= =?Windows-1252?Q?OSwhjCe6K+Kt0OoMFqaqPgmuHZNf0O9K+6kq68qZBkutl9JzfUPCz1q6?= =?Windows-1252?Q?heBcDMrfHVvnvY2i4qbDg2j/GysgkWxwDAY4pHO1BsMwUJpkzNNVHhRO?= =?Windows-1252?Q?bWuMigXgrFArTR97qatXZsKt2RLCmGA1LyPggyWtmSXNtHQyoVuNFGxD?= =?Windows-1252?Q?GddiVVpPf1+7kbj365KaihJ4+z4mxwn/CGXqzbreEJsxOG/GrQwE5Ln+?= =?Windows-1252?Q?QM5Do8GjwYs7gdSlFIpbOKoSsQkKNuflAdvSntgsF+AnMPJbFlhFCZbF?= =?Windows-1252?Q?MvxZFjSYfJxSXyFuSGoq3cxpKM7YN3mYfRHxZqQHAn6fEG18IxNn2tzt?= =?Windows-1252?Q?bHS6c8izvUbcJ0E6IzbAu2j51A3r35kpOcAo5TVEtuM9WFgLWk2CtI?= =?Windows-1252?Q?=3D?= X-Microsoft-Exchange-Diagnostics: 1;DB5PR05MB1352;6:KxSq10OZ4fVdptV4OBo8pYLLVgpUF4G9ni/8VxWiYaLD3aae3w1OIMz3w6yTrGeQoSZwLaAfLCEpoEkOnozVCYgeTXtN1cTQE0ysAPsdNGOZQwuxuJnLzfgyRJrZe/WZOoSxWM9trAI08r7ScM+ymICitUK+mGwl0PTAT6fuhrMomHETVizi9iPyFIrT/HcA9gUxjLK7drywrOAtI1sBzrNIhJM9kJQHF492GCxHwVdxdXEoV9UPkyLhJGNCZjDUy8cUZ0iqbWrKa4w2i0o+4H+L+u780tvzmBiedmqjrpFlyjhZmn2CcasgGqH4pKcpKZEu+pqOV2pFnpqh0H9l2vb4RvcoM1Xpk6R7Eyad3YYADjjjfm/Skw3WV8FR5Bt/yA3WAh25Fg7hSaBLv/bqDITRGCJfnGkGle0tDJs0P4GWCdnhRcEInVs5ZRpmV7bk21t4xJEF0wh4VnD7sjgDcpS1HFfM4XYj5g5kTi4TZ4ma6G3jbs9SaukUk6wAkwq8SS7c3I4HeNzji0qK42qJnbLsH9LYKGcmJb5Dvp3D19A= X-Microsoft-Exchange-Diagnostics: 1;DB5PR05MB1352;5:PgpcrJ8BQ7gyPvHT8RYlLcFFepLiXmV76NgNr7rR7mbchCAfkHV+gva5fzP+0Rjrq9v7VSWQ9P5+gP1N1pFALXRIw/UB8KPwqv7NOFQtkvNw1uiOyHvLFgYvN8ROkvZ92GQsFEWzVmO77ZSFU6HjOhUGm9cZVe2BpXSjSTJr4hLlI7eF/yW+ByJyJVYVrKmUwj/RB/cQtK2RTtNrAAbY3m+5CuThUna8mCFRL22lsNZn7quzPxc/Al1oTXTupObYJCD8Td8SsLuGDS8O1tfEbCvXkSB1PoDAG75LZcMoZ1ssNuaPlgPlVNRXf3NOyo65b15GZel3SxgTjGVEkVwn821svMFWFns3JjrVhUsac0/JGb1ldJRnE1TKisDcw+r7bywCSDkUsuTAZ+xS5SbqVvRQ+bD/D+7HQBzUXJ0fxUj4zPwh0BlHI1i/9g9gV3gC7XVN4MUVBWjW6UVlj0TJUvOA0bN0l9eiESyrtrVd4hoVYHRXpxQvDGvow+ggPcvl;24:uI7ieW9QwoC3d6a5OHUo+TSnBw7OrYs0W8rHfgeMoMJZjA+7eJ5qwMXsk7rJRycP/LhKZHOXf3K6ygxESakBbNUD4szD9AS2Og8T1VqIi9o= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;DB5PR05MB1352;7:6buUBtLSBL8cICRPYYuxlmmoCkGQjfTgvr1pPSO5MxSJvb2iN/ofQ2afWsXbJzOUUzXVEXF/l1vt7y2B+c7EWlsBbYdgQhKp6tjpzwU8Vnvf6gXC0QVkSuqbKA/25lmZYP6cpQU07C+BVkxfNZr1FESnORFrzLHjjBW+qCzV1BYmgV76EdQBbDI2zrl3iceB4Axu8JR2owhqBlGconTRNFV6f52wVlZzOmHlZQqzmGIVX0zgMdZAXLUd+2PpM37B3h+19qYU+Xx1/9wAGoPh8yXmxmvM+Hwlcwl47GqEFyPrciNe17WPo1bzWA0vprFtBfIJkusbTN2Knggm7Cfx+A== X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jun 2017 14:08:20.9135 (UTC) X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=a652971c-7d2e-4d9b-a6a4-d149256f461b;Ip=[193.47.165.134];Helo=[mtlcas13.mtl.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB5PR05MB1352 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3025 Lines: 82 On 6/5/2017 12:45 PM, Marta Rybczynska wrote: > This patch improves the way the RDMA IB signalling is done > by using atomic operations for the signalling variable. This > avoids race conditions on sig_count. > > The signalling interval changes slightly and is now the > largest power of two not larger than queue depth / 2. > > ilog() usage idea by Bart Van Assche. > > Signed-off-by: Marta Rybczynska > --- > drivers/nvme/host/rdma.c | 31 +++++++++++++++++++++---------- > 1 file changed, 21 insertions(+), 10 deletions(-) > > diff --git a/drivers/nvme/host/rdma.c b/drivers/nvme/host/rdma.c > index 28bd255..80682f7 100644 > --- a/drivers/nvme/host/rdma.c > +++ b/drivers/nvme/host/rdma.c > @@ -88,7 +88,7 @@ enum nvme_rdma_queue_flags { > > struct nvme_rdma_queue { > struct nvme_rdma_qe *rsp_ring; > - u8 sig_count; > + atomic_t sig_count; > int queue_size; > size_t cmnd_capsule_len; > struct nvme_rdma_ctrl *ctrl; > @@ -554,6 +554,8 @@ static int nvme_rdma_init_queue(struct nvme_rdma_ctrl *ctrl, > > queue->queue_size = queue_size; > > + atomic_set(&queue->sig_count, 0); > + > queue->cm_id = rdma_create_id(&init_net, nvme_rdma_cm_handler, queue, > RDMA_PS_TCP, IB_QPT_RC); > if (IS_ERR(queue->cm_id)) { > @@ -1038,17 +1040,26 @@ static void nvme_rdma_send_done(struct ib_cq *cq, struct ib_wc *wc) > nvme_rdma_wr_error(cq, wc, "SEND"); > } > > -static inline int nvme_rdma_queue_sig_limit(struct nvme_rdma_queue *queue) > +static inline int nvme_rdma_init_sig_count(int queue_size) > { > - int sig_limit; > - > - /* > - * We signal completion every queue depth/2 and also handle the > - * degenerated case of a device with queue_depth=1, where we > - * would need to signal every message. > + /* We want to signal completion at least every queue depth/2. > + * This returns the largest power of two that is not above half > + * of (queue size + 1) to optimize (avoid divisions). > */ > - sig_limit = max(queue->queue_size / 2, 1); > - return (++queue->sig_count % sig_limit) == 0; > + return 1 << ilog2((queue_size + 1) / 2); > +} > + > +static inline bool nvme_rdma_queue_sig_limit(struct nvme_rdma_queue *queue) > +{ > + int count, limit; > + > + limit = nvme_rdma_init_sig_count(queue->queue_size); Maybe I'm missing something, but why we need to calc limit each time in data path (not a big deal but we can avoid that)? Can you add queue->sig_limit that will be calculated once at queue allocation ? > + count = atomic_inc_return(&queue->sig_count); > + > + /* Signal if count is a multiple of limit */ > + if ((count & (limit - 1)) == 0) > + return true; > + return false; > } > > static int nvme_rdma_post_send(struct nvme_rdma_queue *queue, >