From patchwork Thu Apr 1 00:31:42 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yury Norov X-Patchwork-Id: 12176627 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8D7B7C433B4 for ; Thu, 1 Apr 2021 00:33:00 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 4F51160FEC for ; Thu, 1 Apr 2021 00:33:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233113AbhDAAc1 (ORCPT ); Wed, 31 Mar 2021 20:32:27 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35064 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229812AbhDAAb6 (ORCPT ); Wed, 31 Mar 2021 20:31:58 -0400 Received: from mail-qv1-xf2b.google.com (mail-qv1-xf2b.google.com [IPv6:2607:f8b0:4864:20::f2b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2BF25C061761; Wed, 31 Mar 2021 17:31:58 -0700 (PDT) Received: by mail-qv1-xf2b.google.com with SMTP id t5so249973qvs.5; Wed, 31 Mar 2021 17:31:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=aaWFnvO5mlS7gtqbzZ/Rzs0v3x5NZRxF7C+mMsnpKHk=; b=uPbjMAV4Y2EBSJ+JfaHmNGDYq5zqdqKOAZHbsb0VSPsGNd+nTGfoYrf1P5k0poyuPw tpXpTqMoGwF7zx1knsS0ta5QmIUHxI1FN0437vyb7HR5bPI6WkQfADd/aLuXjYWQM7ZA 3Ka68CkZN0/ZcSMGzk4H4PNwVn/vc1/0YH8FpDTEBAlosT9aFdk6iNcIHQuegLwYVeMH xI8ImgUTUgpmN0rhJhAh7UDzyUvdCpilKdzP9dCajfj4Wzo3xj2oLaH6i6VOqW/3M4EJ OrXxIW+Ur2NKaxX/swQTPQcfFlSgXp3UDdZWJ2CUCkYHJBRs596j6K99oqbRTXTmMY+R TSsA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=aaWFnvO5mlS7gtqbzZ/Rzs0v3x5NZRxF7C+mMsnpKHk=; b=szQIKd4fb1/DJI/acOL3IlDOyv4HldAT8usBrZzvTybr0uNrs70fngRhvExNM3xdq2 JNELR1L3DZH0yMKDw73i/59OrSXfy4P2dJK8CzUthUD5rLbEmZtD3d3a3Te6IyRKr/RY cKJGsQ4ZilehfyWbwtQ9omALF9boTUkkmlq01v8zopNK9BwVqndPTkOdDr95MoP/j9mI /otPCmi8vQuTLFp0qW89udKNpfoKA/8hwjWAvN3PhKCRnOKrhJN7ZUit9MfSnZUkOSdW AgUmVqn+eee7iDM20ariwsJy7DLkq1zT+dcASRtsvsmsPT7yYuOay9c00AvgA8wlqB1j qzXQ== X-Gm-Message-State: AOAM531FWTYIt6H/d/Z1WisbKNTfiNE8SrZSEEtMBF02WG3KdDMFN13W bLkIXm28diidbLhuvjMw9+DTMJ4FwdF1QQ== X-Google-Smtp-Source: ABdhPJx3TATPye1tKmcmsqyRcYujzF4mgS5d9QwIHuUiHq4KtN5wUxqV7hHXZewX29Hk2iSsHq6Ckg== X-Received: by 2002:a0c:f54d:: with SMTP id p13mr5641362qvm.32.1617237116796; Wed, 31 Mar 2021 17:31:56 -0700 (PDT) Received: from localhost ([207.98.216.60]) by smtp.gmail.com with ESMTPSA id j6sm2771537qkl.84.2021.03.31.17.31.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 31 Mar 2021 17:31:56 -0700 (PDT) From: Yury Norov To: linux-kernel@vger.kernel.org, Andrew Morton Cc: Yury Norov , linux-m68k@lists.linux-m68k.org, linux-arch@vger.kernel.org, linux-sh@vger.kernel.org, Alexey Klimov , Andy Shevchenko , Arnd Bergmann , David Sterba , Dennis Zhou , Geert Uytterhoeven , Jianpeng Ma , Joe Perches , John Paul Adrian Glaubitz , Josh Poimboeuf , Rasmus Villemoes , Rich Felker , Stefano Brivio , Wei Yang , Wolfram Sang , Yoshinori Sato Subject: [PATCH 01/12] tools: disable -Wno-type-limits Date: Wed, 31 Mar 2021 17:31:42 -0700 Message-Id: <20210401003153.97325-2-yury.norov@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210401003153.97325-1-yury.norov@gmail.com> References: <20210401003153.97325-1-yury.norov@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-sh@vger.kernel.org GENMASK(h, l) may be passed with unsigned types. In such case, type-limits warning is generated for example in case of GENMASK(h, 0). Signed-off-by: Yury Norov Acked-by: Rasmus Villemoes --- tools/scripts/Makefile.include | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/scripts/Makefile.include b/tools/scripts/Makefile.include index 84dbf61a7eca..15e99905cb7d 100644 --- a/tools/scripts/Makefile.include +++ b/tools/scripts/Makefile.include @@ -38,6 +38,7 @@ EXTRA_WARNINGS += -Wswitch-enum EXTRA_WARNINGS += -Wundef EXTRA_WARNINGS += -Wwrite-strings EXTRA_WARNINGS += -Wformat +EXTRA_WARNINGS += -Wno-type-limits CC_NO_CLANG := $(shell $(CC) -dM -E -x c /dev/null | grep -Fq "__clang__"; echo $$?) From patchwork Thu Apr 1 00:31:43 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yury Norov X-Patchwork-Id: 12176631 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id A322FC43603 for ; Thu, 1 Apr 2021 00:33:01 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 838F4610C8 for ; Thu, 1 Apr 2021 00:33:01 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232984AbhDAAc2 (ORCPT ); Wed, 31 Mar 2021 20:32:28 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35068 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232887AbhDAAb7 (ORCPT ); Wed, 31 Mar 2021 20:31:59 -0400 Received: from mail-qt1-x831.google.com (mail-qt1-x831.google.com [IPv6:2607:f8b0:4864:20::831]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EB324C06175F; Wed, 31 Mar 2021 17:31:58 -0700 (PDT) Received: by mail-qt1-x831.google.com with SMTP id l6so366587qtq.2; Wed, 31 Mar 2021 17:31:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=zuXeb5K9/k1b38lIaOCwwXbJ1mWAiSIXqXWCN5QCoNc=; b=keFgzC4JJSPa9AI3ZT14cZQXCaDcpV/KPqYuLBdHVu3OD9sItamUkfj2TW2Pi5X0K1 QFb2pO4MOGs69uZ0Ty0Y5uJ1QZtL7pe1L2/aN3Q+hWHt6rpKR85BoOxv1s5rZ5MoVlHj Ncq+Vi+CckYrvEXKIpsjZunu8OTkBgULZQowhoNDZPyWmB1DpYrKSf2YGV/pCsXRuTW7 w8vwTsPHxhuy0F1Qt01XYj13Mk0rGN+A8rOVR6sRVbjExIJYXj9cABGrLWxziK6JVxhk 8aZgoBXOhTJfvXchRNQDZkhTa94b8cp4x3slDYJ61zjV9h5mCC1+lLYiSwF3y318O9Ak l7Cg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=zuXeb5K9/k1b38lIaOCwwXbJ1mWAiSIXqXWCN5QCoNc=; b=TxHgjdzZA5shdkPtCbOlcSPQONw4gTx/ETzm65hWPV8hQWnfqHZM1/RhmEaqQe6eac kt0WdZMLBDZ6oSMl+Z8+tQxNnFGLhG3hCfzc2mRepDVlRFCg/mb3aLFano33DuZFkLc9 vc7CpcmDoe3Xp8cGu1ZdiysmRF2MBzeMIyMObHG46ThhFWJPCzckRx/+/L+6ZZcs5yR3 aUBJeN7np4M/X6m9+UgXlOM6SBoh6Vujeek9X/jySEzcHro6Hq0nIE4BVVBl8RGaUC6O fx2CtEsyNX7SOR8xml/HCP3QPSP2hXYSizwjIv3wPPWx96XTVYG9waRqHeWYeXXbTUvd Ycng== X-Gm-Message-State: AOAM532ZB7pI4kXGeuPznimuub4XMPhC42ibFB6eZDRPfpnbe71ULYeJ mj+6a0bWYKW95XYXNfZZj1OMBii3ssMI7A== X-Google-Smtp-Source: ABdhPJwRQgVEvnz88QByOgsTQLb5/PnrcKX6Jc6oc0zsnAVCzSHf1zutxfXlw8fSj6+PTR1mOQ3hGQ== X-Received: by 2002:ac8:4412:: with SMTP id j18mr4996856qtn.387.1617237117885; Wed, 31 Mar 2021 17:31:57 -0700 (PDT) Received: from localhost ([207.98.216.60]) by smtp.gmail.com with ESMTPSA id 84sm2770435qkg.8.2021.03.31.17.31.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 31 Mar 2021 17:31:57 -0700 (PDT) From: Yury Norov To: linux-kernel@vger.kernel.org, Andrew Morton Cc: Yury Norov , linux-m68k@lists.linux-m68k.org, linux-arch@vger.kernel.org, linux-sh@vger.kernel.org, Alexey Klimov , Andy Shevchenko , Arnd Bergmann , David Sterba , Dennis Zhou , Geert Uytterhoeven , Jianpeng Ma , Joe Perches , John Paul Adrian Glaubitz , Josh Poimboeuf , Rasmus Villemoes , Rich Felker , Stefano Brivio , Wei Yang , Wolfram Sang , Yoshinori Sato Subject: [PATCH 02/12] tools: bitmap: sync function declarations with the kernel Date: Wed, 31 Mar 2021 17:31:43 -0700 Message-Id: <20210401003153.97325-3-yury.norov@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210401003153.97325-1-yury.norov@gmail.com> References: <20210401003153.97325-1-yury.norov@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-sh@vger.kernel.org Some functions in tools/include/linux/bitmap.h declare nbits as int. In the kernel nbits is declared as unsigned int. Signed-off-by: Yury Norov Acked-by: Rasmus Villemoes --- tools/include/linux/bitmap.h | 8 ++++---- tools/lib/bitmap.c | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/tools/include/linux/bitmap.h b/tools/include/linux/bitmap.h index 477a1cae513f..7cbd23e56d48 100644 --- a/tools/include/linux/bitmap.h +++ b/tools/include/linux/bitmap.h @@ -30,7 +30,7 @@ void bitmap_clear(unsigned long *map, unsigned int start, int len); #define small_const_nbits(nbits) \ (__builtin_constant_p(nbits) && (nbits) <= BITS_PER_LONG) -static inline void bitmap_zero(unsigned long *dst, int nbits) +static inline void bitmap_zero(unsigned long *dst, unsigned int nbits) { if (small_const_nbits(nbits)) *dst = 0UL; @@ -66,7 +66,7 @@ static inline int bitmap_full(const unsigned long *src, unsigned int nbits) return find_first_zero_bit(src, nbits) == nbits; } -static inline int bitmap_weight(const unsigned long *src, int nbits) +static inline int bitmap_weight(const unsigned long *src, unsigned int nbits) { if (small_const_nbits(nbits)) return hweight_long(*src & BITMAP_LAST_WORD_MASK(nbits)); @@ -74,7 +74,7 @@ static inline int bitmap_weight(const unsigned long *src, int nbits) } static inline void bitmap_or(unsigned long *dst, const unsigned long *src1, - const unsigned long *src2, int nbits) + const unsigned long *src2, unsigned int nbits) { if (small_const_nbits(nbits)) *dst = *src1 | *src2; @@ -141,7 +141,7 @@ static inline void bitmap_free(unsigned long *bitmap) * @buf: buffer to store output * @size: size of @buf */ -size_t bitmap_scnprintf(unsigned long *bitmap, int nbits, +size_t bitmap_scnprintf(unsigned long *bitmap, unsigned int nbits, char *buf, size_t size); /** diff --git a/tools/lib/bitmap.c b/tools/lib/bitmap.c index 5043747ef6c5..f4e914712b6f 100644 --- a/tools/lib/bitmap.c +++ b/tools/lib/bitmap.c @@ -28,11 +28,11 @@ void __bitmap_or(unsigned long *dst, const unsigned long *bitmap1, dst[k] = bitmap1[k] | bitmap2[k]; } -size_t bitmap_scnprintf(unsigned long *bitmap, int nbits, +size_t bitmap_scnprintf(unsigned long *bitmap, unsigned int nbits, char *buf, size_t size) { /* current bit is 'cur', most recently seen range is [rbot, rtop] */ - int cur, rbot, rtop; + unsigned int cur, rbot, rtop; bool first = true; size_t ret = 0; From patchwork Thu Apr 1 00:31:44 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yury Norov X-Patchwork-Id: 12176633 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 09A56C433B4 for ; Thu, 1 Apr 2021 00:33:03 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id DB10261029 for ; Thu, 1 Apr 2021 00:33:02 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233048AbhDAAc3 (ORCPT ); Wed, 31 Mar 2021 20:32:29 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35080 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232901AbhDAAcA (ORCPT ); Wed, 31 Mar 2021 20:32:00 -0400 Received: from mail-qk1-x735.google.com (mail-qk1-x735.google.com [IPv6:2607:f8b0:4864:20::735]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0B9DEC06175F; Wed, 31 Mar 2021 17:32:00 -0700 (PDT) Received: by mail-qk1-x735.google.com with SMTP id g15so672381qkl.4; Wed, 31 Mar 2021 17:32:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=GLaToynb34vCY0WsqTIIvNMqMj7JroWGIPG2ZoVyHKE=; b=svkDk5mWqO3glvN3JvTdqGbhsPi1i3X4XIYG7cJ3lkcUxRrO56OK5a8GY9lHQ1GFC7 t1NyPdS1otoqYLAtMg+kil+wqOyRUYljX8ciwBerwR1q/+iUIMl+V+Cv4sOru3GKvmdU te23D4roPnb64Hwg+Cz5t8X0QqDN1/yugozifB5rsRiOpfFFPYxVPYwZ1cUlOAQz4qgw 70wj4PZ0rW3nfeSUKllDAy5LZ6yg2xyJYR3lXPg6mF8DSiE7d5ew4etnMvXBl0FM5gQB kQJC2wf+kKUvdflRzsSNmO8hmTvUQC3V0O+CabwXR6rRyF5agZExh/XDQdJEupAjov9M Oqfg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=GLaToynb34vCY0WsqTIIvNMqMj7JroWGIPG2ZoVyHKE=; b=A5Nmc8xOAqkJERnEiX74SvQqgDUidYX+xAnruAGYh9TKwYjZN0zYNog3NvE/Ze0lzG x3WTqPZtYK+USm07WD/Mx/5zDrLvtZwRCndST/C+Pl/ZYLQB6PjjLApP5L2HOXtCO9Fv sVuyUFI1j3eFlcRYDcWB8DAr5+IUaQTXgJHTfUhrKWUMyt/VNL2GdMziKzYlAd8z0q/E JoFiuxFJ6cwv/+yU4x3PmPF2AxKmMfwZut0RI1ZSTUHlBBkQdqZFNAvTzmRvxhXYVGVg 2OQk1fFbJLflN+6xtQkycbIKsWbm7S5bkB5xtHFWmLojzInBx1SAQkdZb3XHvdE7+Gu1 IzuA== X-Gm-Message-State: AOAM531OUUetbGlZ11EEqBgNhGMebVcc27fB6c42E7eZuswMNMGA02qp 7Hw/WdgABmWQnDiPk7tFRVC70UDSrHgh0A== X-Google-Smtp-Source: ABdhPJw97coW5dsJBqtNTv97nAQBCkwgRk5f6eH1cuZ+xulBrprB+U0oPI85rsK+uupFWl2CK1Gsww== X-Received: by 2002:a37:42cb:: with SMTP id p194mr5536925qka.213.1617237119002; Wed, 31 Mar 2021 17:31:59 -0700 (PDT) Received: from localhost ([207.98.216.60]) by smtp.gmail.com with ESMTPSA id q125sm2785567qkf.68.2021.03.31.17.31.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 31 Mar 2021 17:31:58 -0700 (PDT) From: Yury Norov To: linux-kernel@vger.kernel.org, Andrew Morton Cc: Yury Norov , linux-m68k@lists.linux-m68k.org, linux-arch@vger.kernel.org, linux-sh@vger.kernel.org, Alexey Klimov , Andy Shevchenko , Arnd Bergmann , David Sterba , Dennis Zhou , Geert Uytterhoeven , Jianpeng Ma , Joe Perches , John Paul Adrian Glaubitz , Josh Poimboeuf , Rasmus Villemoes , Rich Felker , Stefano Brivio , Wei Yang , Wolfram Sang , Yoshinori Sato Subject: [PATCH 03/12] tools: sync BITMAP_LAST_WORD_MASK() macro with the kernel Date: Wed, 31 Mar 2021 17:31:44 -0700 Message-Id: <20210401003153.97325-4-yury.norov@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210401003153.97325-1-yury.norov@gmail.com> References: <20210401003153.97325-1-yury.norov@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-sh@vger.kernel.org Kernel version generates better code. Signed-off-by: Yury Norov Acked-by: Rasmus Villemoes --- tools/include/linux/bitmap.h | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/tools/include/linux/bitmap.h b/tools/include/linux/bitmap.h index 7cbd23e56d48..4aabc23ec747 100644 --- a/tools/include/linux/bitmap.h +++ b/tools/include/linux/bitmap.h @@ -20,12 +20,7 @@ int __bitmap_equal(const unsigned long *bitmap1, void bitmap_clear(unsigned long *map, unsigned int start, int len); #define BITMAP_FIRST_WORD_MASK(start) (~0UL << ((start) & (BITS_PER_LONG - 1))) - -#define BITMAP_LAST_WORD_MASK(nbits) \ -( \ - ((nbits) % BITS_PER_LONG) ? \ - (1UL<<((nbits) % BITS_PER_LONG))-1 : ~0UL \ -) +#define BITMAP_LAST_WORD_MASK(nbits) (~0UL >> (-(nbits) & (BITS_PER_LONG - 1))) #define small_const_nbits(nbits) \ (__builtin_constant_p(nbits) && (nbits) <= BITS_PER_LONG) From patchwork Thu Apr 1 00:31:45 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yury Norov X-Patchwork-Id: 12176637 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 89930C4363E for ; Thu, 1 Apr 2021 00:33:03 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 65CDF6108B for ; Thu, 1 Apr 2021 00:33:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232930AbhDAAc3 (ORCPT ); Wed, 31 Mar 2021 20:32:29 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35090 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232915AbhDAAcB (ORCPT ); Wed, 31 Mar 2021 20:32:01 -0400 Received: from mail-qk1-x736.google.com (mail-qk1-x736.google.com [IPv6:2607:f8b0:4864:20::736]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 413A9C06175F; Wed, 31 Mar 2021 17:32:01 -0700 (PDT) Received: by mail-qk1-x736.google.com with SMTP id o5so738267qkb.0; Wed, 31 Mar 2021 17:32:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=7uuPJmp4KPyBUDIxFDzyUQbihYygKnVYzuD8q2fLg24=; b=tnUuHzaTi5SHfRkAYnEcSS+yZMuArFiYAEsm6VW7UMu0JYpEEqe5parUy9bXUbzwBC PIHYusMQt+gL4hBuInRuwDFW1WYBwtsZPNWwkn7RxTjS/jnU1e8ryGBtiPcRliB2JCX2 nvJGAmlPRl57ynCUgC4GquzSUGt3B0qQbvf19gndonphmYKUsB8eEgSyYSyjA8VZTfZY Z4wB7uBn3ImDRworXxm81JUcSLPKzD4kngXHvONLAQLJY2nTmz+OVphQCjgDBddnvUwC VbwgIlPRCegHF/+ZxOueMIj7GGB6n7EyjcuMFGu2Kdoleav4gOs8Pum1Qlm9wbDXhVaJ h4CA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=7uuPJmp4KPyBUDIxFDzyUQbihYygKnVYzuD8q2fLg24=; b=XiS3GV4XZ4rxcvUMr5hLOngkezmpQ+7+SVY+NIcha3JG9oEO9v0slhNyDnCaVn8IsA Rs4uxwZfb1LPGvpa0ahdRDXbFwhdzeOuAYHyRtTJ+/S0iaQQa7Qa23ckQxvuz26w1Lub tFGxP+KGiqc7/xvSDQGZe8qsNMk7/2TICHx/xfjst4TE1l3yb+1t47jCYKRW4bMyBhRP qDYWeXgpS31B1rB0O+pP9OTpGQ1rZfrC25wEYbALYyjDUhE/rYSw+kcMpuDIM2DJ5/KP 8WD7WsGU1OjwUU6ikAH5gdI21GfqrUpiHplb1xA0ymKHYCmklzi/ee+cINOVWumJ9T8m luwg== X-Gm-Message-State: AOAM530PmPqXTuo61iQ0E2FcR5veNSsoMEvT4F5oaAjfmLJnet/LJBcP FDZPRtvMvwtiaO3ukW016BOIOa+nJQN58Q== X-Google-Smtp-Source: ABdhPJzRXLRztd90mQ6oRp5qrd6JMX1GHtY43/lsJOUZ6j2zuF1i9IOLQZIcrDBFEWY8J7Z4qQuhGw== X-Received: by 2002:a37:4017:: with SMTP id n23mr5587513qka.338.1617237120204; Wed, 31 Mar 2021 17:32:00 -0700 (PDT) Received: from localhost ([207.98.216.60]) by smtp.gmail.com with ESMTPSA id d2sm2329793qte.84.2021.03.31.17.31.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 31 Mar 2021 17:31:59 -0700 (PDT) From: Yury Norov To: linux-kernel@vger.kernel.org, Andrew Morton Cc: Yury Norov , linux-m68k@lists.linux-m68k.org, linux-arch@vger.kernel.org, linux-sh@vger.kernel.org, Alexey Klimov , Andy Shevchenko , Arnd Bergmann , David Sterba , Dennis Zhou , Geert Uytterhoeven , Jianpeng Ma , Joe Perches , John Paul Adrian Glaubitz , Josh Poimboeuf , Rasmus Villemoes , Rich Felker , Stefano Brivio , Wei Yang , Wolfram Sang , Yoshinori Sato Subject: [PATCH 04/12] arch: rearrange headers inclusion order in asm/bitops for m68k and sh Date: Wed, 31 Mar 2021 17:31:45 -0700 Message-Id: <20210401003153.97325-5-yury.norov@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210401003153.97325-1-yury.norov@gmail.com> References: <20210401003153.97325-1-yury.norov@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-sh@vger.kernel.org m68k and sh include bitmap/{find,le}.h prior to ffs/fls headers. New fast-path implementation in find.h requires ffs/fls. Reordering the headers inclusion sequence helps to prevent compile-time implicit function declaration error. Signed-off-by: Yury Norov Acked-by: Geert Uytterhoeven Acked-by: Rasmus Villemoes --- arch/m68k/include/asm/bitops.h | 6 +++--- arch/sh/include/asm/bitops.h | 5 +++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/arch/m68k/include/asm/bitops.h b/arch/m68k/include/asm/bitops.h index 10133a968c8e..7b414099e5fc 100644 --- a/arch/m68k/include/asm/bitops.h +++ b/arch/m68k/include/asm/bitops.h @@ -440,8 +440,6 @@ static inline unsigned long ffz(unsigned long word) #endif -#include - #ifdef __KERNEL__ #if defined(CONFIG_CPU_HAS_NO_BITFIELDS) @@ -525,10 +523,12 @@ static inline int __fls(int x) #define __clear_bit_unlock clear_bit_unlock #include -#include #include #include #include +#include #endif /* __KERNEL__ */ +#include + #endif /* _M68K_BITOPS_H */ diff --git a/arch/sh/include/asm/bitops.h b/arch/sh/include/asm/bitops.h index 450b5854d7c6..3b6c7b5b7ec9 100644 --- a/arch/sh/include/asm/bitops.h +++ b/arch/sh/include/asm/bitops.h @@ -58,15 +58,16 @@ static inline unsigned long __ffs(unsigned long word) return result; } -#include #include #include #include #include -#include #include #include #include #include +#include +#include + #endif /* __ASM_SH_BITOPS_H */ From patchwork Thu Apr 1 00:31:46 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yury Norov X-Patchwork-Id: 12176635 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3037EC4361A for ; Thu, 1 Apr 2021 00:33:03 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 1ED0461029 for ; Thu, 1 Apr 2021 00:33:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233129AbhDAAce (ORCPT ); Wed, 31 Mar 2021 20:32:34 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35094 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232951AbhDAAcC (ORCPT ); Wed, 31 Mar 2021 20:32:02 -0400 Received: from mail-qt1-x82a.google.com (mail-qt1-x82a.google.com [IPv6:2607:f8b0:4864:20::82a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 73508C06175F; Wed, 31 Mar 2021 17:32:02 -0700 (PDT) Received: by mail-qt1-x82a.google.com with SMTP id l13so330187qtu.9; Wed, 31 Mar 2021 17:32:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=HxiIrO7CcOWW+YKPCypAlUNqNdBbXqeX5zuWqSw+DMQ=; b=mG22wbdhb7xF2gheTlnlQSG5RK/t7zmbLSOc/ZGUjVeU41jGunxWNr7iwBIa/Vs0LN rl3FtoUPOWAo0h3PgE7AQX3+Rm7TLAlYxueffRx70dxy9b0w8VcQ2AFVGSIYlhWhlsRU 64cQLNksvFeag4Xj9uN+Su4AawXhKWG090Ey+v/zablanyWTP+h9VwzkXjEm8mC/mDNI blwvi3jx2o4eds0/zY58cUh2xechNeZ0eyBO0DEAOAgHTOwMZAekKeNn7wdk6QYocaz7 o32AOtGrp2NgFIjyrjY6XCm/C2a3zhhHR87nRREoYOYODOE2Gbm1e6eVaj4aECIvvvrV kmTg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=HxiIrO7CcOWW+YKPCypAlUNqNdBbXqeX5zuWqSw+DMQ=; b=Z0SsUbtLtsy0qbPTnhLIRe3VU2a3QJgW2K44L1NiviSU8A/uk9ilYv5UOKWE7Ttny+ ZdQtiFWDY64qXxnukp2aF39dCWL1zFjoVb+j5QbpTKCufhdpzdaoDMt/fh91wOXdYtR9 V5zF12cF+aRgyUr7TyUN1C7dxSBPW0dVmFSI6qvbAmZT52tB5/14pe17yZdfVo3D74AV tsbXZaG2Hperp16Jk+ZMyrq8WX9yIW9bnhcxYQ5oSa+pU8sktQpQIeSVb5aWrd4I3LZ9 X+2X1VybWX3FNb/ewWa1uD7AHckQsug4KACqvqF0IF4/6vd7qMEXx9j88sdCtjvLvMOS 1Rkg== X-Gm-Message-State: AOAM532C84koq1wWwDKrGg4NYciQupU8NpaYQQXYBmCVUqTsoau27CcH SJoLc7RTI2DmY7wSuu7YwnQm6vte90qVng== X-Google-Smtp-Source: ABdhPJyuML+5m6sZfTOHCEwaS3AisYfUUeplssl0OLCVb/nzAAAje0xruiT+nYwBMs7QCiRxzqfGvw== X-Received: by 2002:ac8:58cb:: with SMTP id u11mr4932645qta.348.1617237121389; Wed, 31 Mar 2021 17:32:01 -0700 (PDT) Received: from localhost ([207.98.216.60]) by smtp.gmail.com with ESMTPSA id v7sm2297774qtw.51.2021.03.31.17.32.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 31 Mar 2021 17:32:01 -0700 (PDT) From: Yury Norov To: linux-kernel@vger.kernel.org, Andrew Morton Cc: Yury Norov , linux-m68k@lists.linux-m68k.org, linux-arch@vger.kernel.org, linux-sh@vger.kernel.org, Alexey Klimov , Andy Shevchenko , Arnd Bergmann , David Sterba , Dennis Zhou , Geert Uytterhoeven , Jianpeng Ma , Joe Perches , John Paul Adrian Glaubitz , Josh Poimboeuf , Rasmus Villemoes , Rich Felker , Stefano Brivio , Wei Yang , Wolfram Sang , Yoshinori Sato Subject: [PATCH 05/12] lib: extend the scope of small_const_nbits() macro Date: Wed, 31 Mar 2021 17:31:46 -0700 Message-Id: <20210401003153.97325-6-yury.norov@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210401003153.97325-1-yury.norov@gmail.com> References: <20210401003153.97325-1-yury.norov@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-sh@vger.kernel.org find_bit would also benefit from small_const_nbits() optimizations. The detailed comment is provided by Rasmus Villemoes. Suggested-by: Rasmus Villemoes Signed-off-by: Yury Norov Acked-by: Rasmus Villemoes Acked-by: Andy Shevchenko --- include/asm-generic/bitsperlong.h | 12 ++++++++++++ include/linux/bitmap.h | 8 -------- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/include/asm-generic/bitsperlong.h b/include/asm-generic/bitsperlong.h index 3905c1c93dc2..1023e2a4bd37 100644 --- a/include/asm-generic/bitsperlong.h +++ b/include/asm-generic/bitsperlong.h @@ -23,4 +23,16 @@ #define BITS_PER_LONG_LONG 64 #endif +/* + * small_const_nbits(n) is true precisely when it is known at compile-time + * that BITMAP_SIZE(n) is 1, i.e. 1 <= n <= BITS_PER_LONG. This allows + * various bit/bitmap APIs to provide a fast inline implementation. Bitmaps + * of size 0 are very rare, and a compile-time-known-size 0 is most likely + * a sign of error. They will be handled correctly by the bit/bitmap APIs, + * but using the out-of-line functions, so that the inline implementations + * can unconditionally dereference the pointer(s). + */ +#define small_const_nbits(nbits) \ + (__builtin_constant_p(nbits) && (nbits) <= BITS_PER_LONG && (nbits) > 0) + #endif /* __ASM_GENERIC_BITS_PER_LONG */ diff --git a/include/linux/bitmap.h b/include/linux/bitmap.h index 2cb1d7cfe8f9..a36cfcec4e77 100644 --- a/include/linux/bitmap.h +++ b/include/linux/bitmap.h @@ -230,14 +230,6 @@ int bitmap_print_to_pagebuf(bool list, char *buf, #define BITMAP_FIRST_WORD_MASK(start) (~0UL << ((start) & (BITS_PER_LONG - 1))) #define BITMAP_LAST_WORD_MASK(nbits) (~0UL >> (-(nbits) & (BITS_PER_LONG - 1))) -/* - * The static inlines below do not handle constant nbits==0 correctly, - * so make such users (should any ever turn up) call the out-of-line - * versions. - */ -#define small_const_nbits(nbits) \ - (__builtin_constant_p(nbits) && (nbits) <= BITS_PER_LONG && (nbits) > 0) - static inline void bitmap_zero(unsigned long *dst, unsigned int nbits) { unsigned int len = BITS_TO_LONGS(nbits) * sizeof(unsigned long); From patchwork Thu Apr 1 00:31:47 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yury Norov X-Patchwork-Id: 12176641 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id F2DAEC43140 for ; Thu, 1 Apr 2021 00:33:03 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id CF9596101E for ; Thu, 1 Apr 2021 00:33:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232944AbhDAAcf (ORCPT ); Wed, 31 Mar 2021 20:32:35 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35106 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232958AbhDAAcD (ORCPT ); Wed, 31 Mar 2021 20:32:03 -0400 Received: from mail-qt1-x82a.google.com (mail-qt1-x82a.google.com [IPv6:2607:f8b0:4864:20::82a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6D635C06175F; Wed, 31 Mar 2021 17:32:03 -0700 (PDT) Received: by mail-qt1-x82a.google.com with SMTP id l6so366672qtq.2; Wed, 31 Mar 2021 17:32:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=C20LX74l80irmi256Fwsi1jw671yttyeLQ2jw+WrTcM=; b=RS/chnDkCdQyueD/TO4h/bIDNgnA4o/xS6tSCgjYHQeYHlX2mXzqibCq9sE+BRBI1L c5uTbzx03Mb5EMxyh6HPQsWxOwD6s0tprC0v2UYZXn5NJkBHj4EeMZu1s4swZlCGPpfU oATPYLPqErdn2Oqj1V5W/w2ibASNmKxU9lkYgsTeYxYRUJQHbyyub8YZC4C5Vz7wnDCs uaJSPNEjzoSAKo2/MbaW5INSJl7XVSCIzrPX0eA+v1iJZASYTs3wHWfQX5uHDEtbB/22 klv1ee74IYsE2Eh8HXQfqUiu2+FDkZTzzLFw/6uqaNmlO6MK5kT0t/OZuZDHeg+tydUW aUkg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=C20LX74l80irmi256Fwsi1jw671yttyeLQ2jw+WrTcM=; b=drfyPx56Ik84ug/q+sex/qZhBYbVpuD1MDToRmIKNroWnJjvch7HBQFFCseODOOpOm qHD9Im/tzQ1Ri3RpS2nfOrHM/hD6P2Rgwm5xZvgoGZFNyjal1F4g9cmdH2MqDoINaYfk JPCgbVYZw5oilt3HleKwh7KQe8lJhlYU5n9hS+veam5NQirIXmjZ9oNtFPMniEC+MnV+ vD+TyW23ZAJmzu3GdWspIIMZCJYQzaJr7SZ8y2SjiaNVgA0DXtvR2ugH/SHR4BJh0PMh BrHq439XRxaiZtJ0vXkf81sjUWOzDuGspkmL30iIM78HyFAUBxRGAzWeOTSzJjFgTzVW gHyQ== X-Gm-Message-State: AOAM533FbLNHALm0BXFB+t7q0NYGJCPa7rHGGSV4N5RZCX+4OxDj1onP 0wUeuprH1Dj1p6npB6chzzpvMZXuiwFHyA== X-Google-Smtp-Source: ABdhPJz7RKTFKh3oP/3IhWgH3Vleaf73gUSrxN4TJF7CtYGdG2/m3SLKOA6O7R2O35yCAc2jdVVvdw== X-Received: by 2002:ac8:6d2b:: with SMTP id r11mr4834397qtu.245.1617237122424; Wed, 31 Mar 2021 17:32:02 -0700 (PDT) Received: from localhost ([207.98.216.60]) by smtp.gmail.com with ESMTPSA id 85sm2811154qkf.58.2021.03.31.17.32.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 31 Mar 2021 17:32:02 -0700 (PDT) From: Yury Norov To: linux-kernel@vger.kernel.org, Andrew Morton Cc: Yury Norov , linux-m68k@lists.linux-m68k.org, linux-arch@vger.kernel.org, linux-sh@vger.kernel.org, Alexey Klimov , Andy Shevchenko , Arnd Bergmann , David Sterba , Dennis Zhou , Geert Uytterhoeven , Jianpeng Ma , Joe Perches , John Paul Adrian Glaubitz , Josh Poimboeuf , Rasmus Villemoes , Rich Felker , Stefano Brivio , Wei Yang , Wolfram Sang , Yoshinori Sato Subject: [PATCH 06/12] tools: sync small_const_nbits() macro with the kernel Date: Wed, 31 Mar 2021 17:31:47 -0700 Message-Id: <20210401003153.97325-7-yury.norov@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210401003153.97325-1-yury.norov@gmail.com> References: <20210401003153.97325-1-yury.norov@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-sh@vger.kernel.org Sync implementation with the kernel and move the macro from tools/include/linux/bitmap.h to tools/include/asm-generic/bitsperlong.h Signed-off-by: Yury Norov Acked-by: Rasmus Villemoes --- tools/include/asm-generic/bitsperlong.h | 3 +++ tools/include/linux/bitmap.h | 3 --- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/include/asm-generic/bitsperlong.h b/tools/include/asm-generic/bitsperlong.h index 8f2283052333..2093d56ddd11 100644 --- a/tools/include/asm-generic/bitsperlong.h +++ b/tools/include/asm-generic/bitsperlong.h @@ -18,4 +18,7 @@ #define BITS_PER_LONG_LONG 64 #endif +#define small_const_nbits(nbits) \ + (__builtin_constant_p(nbits) && (nbits) <= BITS_PER_LONG && (nbits) > 0) + #endif /* __ASM_GENERIC_BITS_PER_LONG */ diff --git a/tools/include/linux/bitmap.h b/tools/include/linux/bitmap.h index 4aabc23ec747..330dbf7509cc 100644 --- a/tools/include/linux/bitmap.h +++ b/tools/include/linux/bitmap.h @@ -22,9 +22,6 @@ void bitmap_clear(unsigned long *map, unsigned int start, int len); #define BITMAP_FIRST_WORD_MASK(start) (~0UL << ((start) & (BITS_PER_LONG - 1))) #define BITMAP_LAST_WORD_MASK(nbits) (~0UL >> (-(nbits) & (BITS_PER_LONG - 1))) -#define small_const_nbits(nbits) \ - (__builtin_constant_p(nbits) && (nbits) <= BITS_PER_LONG) - static inline void bitmap_zero(unsigned long *dst, unsigned int nbits) { if (small_const_nbits(nbits)) From patchwork Thu Apr 1 00:31:48 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yury Norov X-Patchwork-Id: 12176639 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9C4B5C43619 for ; Thu, 1 Apr 2021 00:33:03 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 8075A60FEC for ; Thu, 1 Apr 2021 00:33:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233151AbhDAAcg (ORCPT ); Wed, 31 Mar 2021 20:32:36 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35110 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232994AbhDAAcE (ORCPT ); Wed, 31 Mar 2021 20:32:04 -0400 Received: from mail-qt1-x82c.google.com (mail-qt1-x82c.google.com [IPv6:2607:f8b0:4864:20::82c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 88C95C06175F; Wed, 31 Mar 2021 17:32:04 -0700 (PDT) Received: by mail-qt1-x82c.google.com with SMTP id g24so344538qts.6; Wed, 31 Mar 2021 17:32:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=0Naq2YdkB33IglaRqzqhD+H/Ale9mfBPeXRg3K8w8rQ=; b=YosBgUnJvIjZ9FCX/OL2h1nsM7Vt2iprWfWGsKn3or2M4nu9bl1dUWFmjzcrxK3aXP gQW9+0huTcs3NFQ1b7XzMb7pwOBgn0Vy3gSRa1VdpmTURzWR0BC5HRZ67BMPPQs7BE47 wQ4IzH0uoAt0bpX+ISq/ekgaa4y6jsuRdKFm4qYsuFasTdISUqEIGF+fK6ZLE8K05scT 4Kkdbn68DHuA40IgiuL/cFzVjh/MndwPa46VtbLBTB1JpnRvbuECYyoO2c5ClM94CzE8 PrBRBGLiw1VY7LM0qddn93DjRgla4/rpregMcg0enqP3zXFjzDf3w6+Uc7/Fq9vZkbvO dnNQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=0Naq2YdkB33IglaRqzqhD+H/Ale9mfBPeXRg3K8w8rQ=; b=KpheTIaGdnehxDlmsItIYNkZURQ988F+A9ClYZ8Jp6/MbCA78bG7A3o21bx/W3Gs7u ZRfnf4iPbKQQFWoVsNl4FnhD1IrIudKEqomJJcpipspsPj28bag1o/zB1MUcqpXegSt/ osjDEy8EkVFVkeLg1SVH1RgFWL1UEFeMqjXQ0GwyLaKA/8z4gD9uTnwv9ecPV97qu8go cYrX+cbeZ/dnpw2hg6VtN1BXzVzI8QpYQhzbPdpYZ0w0w9ATC1yQr+MgQKsULajrF92h n9Y2zs4EVE2LZoisPssAldbPk9fdkiSjCDAjWULsPaj/CdX+D0WWQ8r3WktgFEV4I+qk XOWg== X-Gm-Message-State: AOAM532zNP0wE/YCKsiv9MUnVWuasDtNTWjmpVJiHpC357O19O3QxE3H kWB5QvYYVzhkJzUZohmwxBp2/Q8jQhHWig== X-Google-Smtp-Source: ABdhPJw+eVKfUYr0p5B+r2h0XmFjPL9498D7q0LJ06PuYKAdYHNPtzHi7BfN2vK2V0M06KlsMq565w== X-Received: by 2002:ac8:43c5:: with SMTP id w5mr5100397qtn.334.1617237123406; Wed, 31 Mar 2021 17:32:03 -0700 (PDT) Received: from localhost ([207.98.216.60]) by smtp.gmail.com with ESMTPSA id b17sm2366559qtp.73.2021.03.31.17.32.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 31 Mar 2021 17:32:03 -0700 (PDT) From: Yury Norov To: linux-kernel@vger.kernel.org, Andrew Morton Cc: Yury Norov , linux-m68k@lists.linux-m68k.org, linux-arch@vger.kernel.org, linux-sh@vger.kernel.org, Alexey Klimov , Andy Shevchenko , Arnd Bergmann , David Sterba , Dennis Zhou , Geert Uytterhoeven , Jianpeng Ma , Joe Perches , John Paul Adrian Glaubitz , Josh Poimboeuf , Rasmus Villemoes , Rich Felker , Stefano Brivio , Wei Yang , Wolfram Sang , Yoshinori Sato Subject: [PATCH 07/12] lib: inline _find_next_bit() wrappers Date: Wed, 31 Mar 2021 17:31:48 -0700 Message-Id: <20210401003153.97325-8-yury.norov@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210401003153.97325-1-yury.norov@gmail.com> References: <20210401003153.97325-1-yury.norov@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-sh@vger.kernel.org lib/find_bit.c declares five single-line wrappers for _find_next_bit(). We may turn those wrappers to inline functions. It eliminates unneeded function calls and opens room for compile-time optimizations. Signed-off-by: Yury Norov Acked-by: Rasmus Villemoes Acked-by: Andy Shevchenko --- include/asm-generic/bitops/find.h | 28 ++++++++++++---- include/asm-generic/bitops/le.h | 17 +++++++--- lib/find_bit.c | 56 ++----------------------------- 3 files changed, 37 insertions(+), 64 deletions(-) diff --git a/include/asm-generic/bitops/find.h b/include/asm-generic/bitops/find.h index 9fdf21302fdf..7ad70dab8e93 100644 --- a/include/asm-generic/bitops/find.h +++ b/include/asm-generic/bitops/find.h @@ -2,6 +2,10 @@ #ifndef _ASM_GENERIC_BITOPS_FIND_H_ #define _ASM_GENERIC_BITOPS_FIND_H_ +extern unsigned long _find_next_bit(const unsigned long *addr1, + const unsigned long *addr2, unsigned long nbits, + unsigned long start, unsigned long invert, unsigned long le); + #ifndef find_next_bit /** * find_next_bit - find the next set bit in a memory region @@ -12,8 +16,12 @@ * Returns the bit number for the next set bit * If no bits are set, returns @size. */ -extern unsigned long find_next_bit(const unsigned long *addr, unsigned long - size, unsigned long offset); +static inline +unsigned long find_next_bit(const unsigned long *addr, unsigned long size, + unsigned long offset) +{ + return _find_next_bit(addr, NULL, size, offset, 0UL, 0); +} #endif #ifndef find_next_and_bit @@ -27,9 +35,13 @@ extern unsigned long find_next_bit(const unsigned long *addr, unsigned long * Returns the bit number for the next set bit * If no bits are set, returns @size. */ -extern unsigned long find_next_and_bit(const unsigned long *addr1, +static inline +unsigned long find_next_and_bit(const unsigned long *addr1, const unsigned long *addr2, unsigned long size, - unsigned long offset); + unsigned long offset) +{ + return _find_next_bit(addr1, addr2, size, offset, 0UL, 0); +} #endif #ifndef find_next_zero_bit @@ -42,8 +54,12 @@ extern unsigned long find_next_and_bit(const unsigned long *addr1, * Returns the bit number of the next zero bit * If no bits are zero, returns @size. */ -extern unsigned long find_next_zero_bit(const unsigned long *addr, unsigned - long size, unsigned long offset); +static inline +unsigned long find_next_zero_bit(const unsigned long *addr, unsigned long size, + unsigned long offset) +{ + return _find_next_bit(addr, NULL, size, offset, ~0UL, 0); +} #endif #ifdef CONFIG_GENERIC_FIND_FIRST_BIT diff --git a/include/asm-generic/bitops/le.h b/include/asm-generic/bitops/le.h index 188d3eba3ace..21305f6cea0b 100644 --- a/include/asm-generic/bitops/le.h +++ b/include/asm-generic/bitops/le.h @@ -2,6 +2,7 @@ #ifndef _ASM_GENERIC_BITOPS_LE_H_ #define _ASM_GENERIC_BITOPS_LE_H_ +#include #include #include @@ -32,13 +33,21 @@ static inline unsigned long find_first_zero_bit_le(const void *addr, #define BITOP_LE_SWIZZLE ((BITS_PER_LONG-1) & ~0x7) #ifndef find_next_zero_bit_le -extern unsigned long find_next_zero_bit_le(const void *addr, - unsigned long size, unsigned long offset); +static inline +unsigned long find_next_zero_bit_le(const void *addr, unsigned + long size, unsigned long offset) +{ + return _find_next_bit(addr, NULL, size, offset, ~0UL, 1); +} #endif #ifndef find_next_bit_le -extern unsigned long find_next_bit_le(const void *addr, - unsigned long size, unsigned long offset); +static inline +unsigned long find_next_bit_le(const void *addr, unsigned + long size, unsigned long offset) +{ + return _find_next_bit(addr, NULL, size, offset, 0UL, 1); +} #endif #ifndef find_first_zero_bit_le diff --git a/lib/find_bit.c b/lib/find_bit.c index f67f86fd2f62..b03a101367f8 100644 --- a/lib/find_bit.c +++ b/lib/find_bit.c @@ -29,7 +29,7 @@ * searching it for one bits. * - The optional "addr2", which is anded with "addr1" if present. */ -static unsigned long _find_next_bit(const unsigned long *addr1, +unsigned long _find_next_bit(const unsigned long *addr1, const unsigned long *addr2, unsigned long nbits, unsigned long start, unsigned long invert, unsigned long le) { @@ -68,37 +68,7 @@ static unsigned long _find_next_bit(const unsigned long *addr1, return min(start + __ffs(tmp), nbits); } -#endif - -#ifndef find_next_bit -/* - * Find the next set bit in a memory region. - */ -unsigned long find_next_bit(const unsigned long *addr, unsigned long size, - unsigned long offset) -{ - return _find_next_bit(addr, NULL, size, offset, 0UL, 0); -} -EXPORT_SYMBOL(find_next_bit); -#endif - -#ifndef find_next_zero_bit -unsigned long find_next_zero_bit(const unsigned long *addr, unsigned long size, - unsigned long offset) -{ - return _find_next_bit(addr, NULL, size, offset, ~0UL, 0); -} -EXPORT_SYMBOL(find_next_zero_bit); -#endif - -#if !defined(find_next_and_bit) -unsigned long find_next_and_bit(const unsigned long *addr1, - const unsigned long *addr2, unsigned long size, - unsigned long offset) -{ - return _find_next_bit(addr1, addr2, size, offset, 0UL, 0); -} -EXPORT_SYMBOL(find_next_and_bit); +EXPORT_SYMBOL(_find_next_bit); #endif #ifndef find_first_bit @@ -157,28 +127,6 @@ unsigned long find_last_bit(const unsigned long *addr, unsigned long size) EXPORT_SYMBOL(find_last_bit); #endif -#ifdef __BIG_ENDIAN - -#ifndef find_next_zero_bit_le -unsigned long find_next_zero_bit_le(const void *addr, unsigned - long size, unsigned long offset) -{ - return _find_next_bit(addr, NULL, size, offset, ~0UL, 1); -} -EXPORT_SYMBOL(find_next_zero_bit_le); -#endif - -#ifndef find_next_bit_le -unsigned long find_next_bit_le(const void *addr, unsigned - long size, unsigned long offset) -{ - return _find_next_bit(addr, NULL, size, offset, 0UL, 1); -} -EXPORT_SYMBOL(find_next_bit_le); -#endif - -#endif /* __BIG_ENDIAN */ - unsigned long find_next_clump8(unsigned long *clump, const unsigned long *addr, unsigned long size, unsigned long offset) { From patchwork Thu Apr 1 00:31:49 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yury Norov X-Patchwork-Id: 12176643 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8214DC43462 for ; Thu, 1 Apr 2021 00:33:04 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 6695461055 for ; Thu, 1 Apr 2021 00:33:04 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233167AbhDAAcg (ORCPT ); Wed, 31 Mar 2021 20:32:36 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35120 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233026AbhDAAcG (ORCPT ); Wed, 31 Mar 2021 20:32:06 -0400 Received: from mail-qk1-x733.google.com (mail-qk1-x733.google.com [IPv6:2607:f8b0:4864:20::733]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B18B9C06175F; Wed, 31 Mar 2021 17:32:05 -0700 (PDT) Received: by mail-qk1-x733.google.com with SMTP id v70so646323qkb.8; Wed, 31 Mar 2021 17:32:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=+swu3Np37j35irSEqEb2Bh6t2nPDu1IEuD1X9CPLZTg=; b=VQB9YXqslNTBL+pmjhmbdEEMWIlNDDcnPzCqz8UoPhmDeiTTq+l8Fqf7F7c3WopEX1 yKtrKgZU71vASrwmUhpINOabEwCSpdnM12eM04RGWOSzo72bMM5+bCxVbwEVRcQybYE5 H5Cd/droGBSGzEEidsONJ0aE3E0XXoqQx9zIk5RclgK69HC4SPd4l7GauRcEXCfXNBH/ jZryjYCRFQVcy01di+Kcj+olNHBge0JCRgCKjeR0Pgvzhp0byxi615bvNMS+6LjAX/bp 7MotKtAbQRYuY+uVpaYTQWxLnIP6ZZQ8VysQc/Q87wm4ooSuXWeVmCOV92vLBKpyrfJl 38qQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=+swu3Np37j35irSEqEb2Bh6t2nPDu1IEuD1X9CPLZTg=; b=XbElhcF1oYRyjumyGYwNQZqx9xfpVc6hLI5LkzhjL0BJta2bRpDwkFnvNL/BYr2w1S c99Rl8WvenQhv1qxGeggvBIveA9Z6S9VFTaypB1tyD+dlJzFo5XnIV7SqOoiXt4DzPiq 3szMqh/oLbK/Tnn8+ksj2Ff15AORWV9pWJ7BWEW4q2zzpsPvKgGNSz8rL+T8WdZ4cd7K g+XALqesoL8OJGpgGg+UPYF9ykesx4x51GTRn7QdJPionq+5BNyPybNJUvza2j28S8sc DopYwkkgTIRGnm2JM9dCVi1JE6ZmL8mECh3XmsMVmdBz32ssDbL4BWMSSTzgCs3DY7/A uxTA== X-Gm-Message-State: AOAM530BuLKT2vykoLXEmrwS3NqkKpYdYmoX0xu63/I9l7Kx3kZFP4AL 5hmlih1uvpX14jtoqqBcks2QOP1q/Loj1w== X-Google-Smtp-Source: ABdhPJy28SMSvw7lJxu4o8JDLKR9qUpy9F5ONdXm/qEUePJ9ZUvYDBmdKC0aO7IHyihcglhuUoY2Cw== X-Received: by 2002:a37:270c:: with SMTP id n12mr5979211qkn.277.1617237124566; Wed, 31 Mar 2021 17:32:04 -0700 (PDT) Received: from localhost ([207.98.216.60]) by smtp.gmail.com with ESMTPSA id 124sm2694708qke.107.2021.03.31.17.32.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 31 Mar 2021 17:32:04 -0700 (PDT) From: Yury Norov To: linux-kernel@vger.kernel.org, Andrew Morton Cc: Yury Norov , linux-m68k@lists.linux-m68k.org, linux-arch@vger.kernel.org, linux-sh@vger.kernel.org, Alexey Klimov , Andy Shevchenko , Arnd Bergmann , David Sterba , Dennis Zhou , Geert Uytterhoeven , Jianpeng Ma , Joe Perches , John Paul Adrian Glaubitz , Josh Poimboeuf , Rasmus Villemoes , Rich Felker , Stefano Brivio , Wei Yang , Wolfram Sang , Yoshinori Sato Subject: [PATCH 08/12] tools: sync find_next_bit implementation Date: Wed, 31 Mar 2021 17:31:49 -0700 Message-Id: <20210401003153.97325-9-yury.norov@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210401003153.97325-1-yury.norov@gmail.com> References: <20210401003153.97325-1-yury.norov@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-sh@vger.kernel.org Sync the implementation with recent kernel changes. Signed-off-by: Yury Norov Acked-by: Rasmus Villemoes --- tools/include/asm-generic/bitops/find.h | 27 ++++++++++--- tools/lib/find_bit.c | 52 ++++++++++--------------- 2 files changed, 42 insertions(+), 37 deletions(-) diff --git a/tools/include/asm-generic/bitops/find.h b/tools/include/asm-generic/bitops/find.h index 16ed1982cb34..9fe62d10b084 100644 --- a/tools/include/asm-generic/bitops/find.h +++ b/tools/include/asm-generic/bitops/find.h @@ -2,6 +2,10 @@ #ifndef _TOOLS_LINUX_ASM_GENERIC_BITOPS_FIND_H_ #define _TOOLS_LINUX_ASM_GENERIC_BITOPS_FIND_H_ +extern unsigned long _find_next_bit(const unsigned long *addr1, + const unsigned long *addr2, unsigned long nbits, + unsigned long start, unsigned long invert, unsigned long le); + #ifndef find_next_bit /** * find_next_bit - find the next set bit in a memory region @@ -12,8 +16,12 @@ * Returns the bit number for the next set bit * If no bits are set, returns @size. */ -extern unsigned long find_next_bit(const unsigned long *addr, unsigned long - size, unsigned long offset); +static inline +unsigned long find_next_bit(const unsigned long *addr, unsigned long size, + unsigned long offset) +{ + return _find_next_bit(addr, NULL, size, offset, 0UL, 0); +} #endif #ifndef find_next_and_bit @@ -27,13 +35,16 @@ extern unsigned long find_next_bit(const unsigned long *addr, unsigned long * Returns the bit number for the next set bit * If no bits are set, returns @size. */ -extern unsigned long find_next_and_bit(const unsigned long *addr1, +static inline +unsigned long find_next_and_bit(const unsigned long *addr1, const unsigned long *addr2, unsigned long size, - unsigned long offset); + unsigned long offset) +{ + return _find_next_bit(addr1, addr2, size, offset, 0UL, 0); +} #endif #ifndef find_next_zero_bit - /** * find_next_zero_bit - find the next cleared bit in a memory region * @addr: The address to base the search on @@ -43,8 +54,12 @@ extern unsigned long find_next_and_bit(const unsigned long *addr1, * Returns the bit number of the next zero bit * If no bits are zero, returns @size. */ +static inline unsigned long find_next_zero_bit(const unsigned long *addr, unsigned long size, - unsigned long offset); + unsigned long offset) +{ + return _find_next_bit(addr, NULL, size, offset, ~0UL, 0); +} #endif #ifndef find_first_bit diff --git a/tools/lib/find_bit.c b/tools/lib/find_bit.c index ac37022e9486..589fd2f26f94 100644 --- a/tools/lib/find_bit.c +++ b/tools/lib/find_bit.c @@ -28,11 +28,12 @@ * searching it for one bits. * - The optional "addr2", which is anded with "addr1" if present. */ -static inline unsigned long _find_next_bit(const unsigned long *addr1, +unsigned long _find_next_bit(const unsigned long *addr1, const unsigned long *addr2, unsigned long nbits, - unsigned long start, unsigned long invert) + unsigned long start, unsigned long invert, unsigned long le) { - unsigned long tmp; + unsigned long tmp, mask; + (void) le; if (unlikely(start >= nbits)) return nbits; @@ -43,7 +44,19 @@ static inline unsigned long _find_next_bit(const unsigned long *addr1, tmp ^= invert; /* Handle 1st word. */ - tmp &= BITMAP_FIRST_WORD_MASK(start); + mask = BITMAP_FIRST_WORD_MASK(start); + + /* + * Due to the lack of swab() in tools, and the fact that it doesn't + * need little-endian support, just comment it out + */ +#if (0) + if (le) + mask = swab(mask); +#endif + + tmp &= mask; + start = round_down(start, BITS_PER_LONG); while (!tmp) { @@ -57,18 +70,12 @@ static inline unsigned long _find_next_bit(const unsigned long *addr1, tmp ^= invert; } - return min(start + __ffs(tmp), nbits); -} +#if (0) + if (le) + tmp = swab(tmp); #endif -#ifndef find_next_bit -/* - * Find the next set bit in a memory region. - */ -unsigned long find_next_bit(const unsigned long *addr, unsigned long size, - unsigned long offset) -{ - return _find_next_bit(addr, NULL, size, offset, 0UL); + return min(start + __ffs(tmp), nbits); } #endif @@ -105,20 +112,3 @@ unsigned long find_first_zero_bit(const unsigned long *addr, unsigned long size) return size; } #endif - -#ifndef find_next_zero_bit -unsigned long find_next_zero_bit(const unsigned long *addr, unsigned long size, - unsigned long offset) -{ - return _find_next_bit(addr, NULL, size, offset, ~0UL); -} -#endif - -#ifndef find_next_and_bit -unsigned long find_next_and_bit(const unsigned long *addr1, - const unsigned long *addr2, unsigned long size, - unsigned long offset) -{ - return _find_next_bit(addr1, addr2, size, offset, 0UL); -} -#endif From patchwork Thu Apr 1 00:31:50 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yury Norov X-Patchwork-Id: 12176647 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id D2B1EC001BA for ; Thu, 1 Apr 2021 00:33:05 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 9751060FEC for ; Thu, 1 Apr 2021 00:33:05 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233174AbhDAAch (ORCPT ); Wed, 31 Mar 2021 20:32:37 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35124 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233058AbhDAAcH (ORCPT ); Wed, 31 Mar 2021 20:32:07 -0400 Received: from mail-qt1-x82a.google.com (mail-qt1-x82a.google.com [IPv6:2607:f8b0:4864:20::82a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D5B4EC06175F; Wed, 31 Mar 2021 17:32:06 -0700 (PDT) Received: by mail-qt1-x82a.google.com with SMTP id j7so349670qtx.5; Wed, 31 Mar 2021 17:32:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Rib+8cPzfkPDLYasfg8PUHyrKUJ4lS7U+r1MeE1lPMk=; b=Fk/Ci2T7eZZrNt4/qybRiq+nHIOKdGGY5a5FKgUHevi+qKsKEa4YKTZmt9UeRWzl1k P+ncnBcowX1IQfW8HX9Dlx0c/W317alz1vo5p/3CZqTH57FbLYmx2q4tCUTGDKkecT2m T6k2bQXrB/uao2aj4IxXnqDt12oAf9prYVO9I9jXH/bRt7n9aG/KoAVgvuO44z5XY03j j+Jf4zmqXREHntJPbjiO1+T6n1dLDKa3ebJ7sorgESsYnct2YFHMEUAPLduaQMCJ2TF/ XpyFSHWRd+Ldgxo5Wiic3KHVYKW9wJOKOoyKiJvuKa+NFkFP3ohy0489dY+FXgq6PLk/ r9Dg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Rib+8cPzfkPDLYasfg8PUHyrKUJ4lS7U+r1MeE1lPMk=; b=sOftraDm3YnmDScsbeI+wdWfaxyosWfTGxRS98IZ8liaLMeN1hJ/LurFboOQvrfMfa DF7GP2Mbate7ZfXZ+4390mkvDQr/8m84qvAOUCCV+GA8eqkhoKdxQFzPHyehsGpaIyXc rfpNKBBcPW8+2nT9xe2+gVo0JNPa+5BG+ektg3ncqT93h/L2GvsJaP9Z4xxKdCtRnH0F aMFFAvXsXfiU1kUgNICUs6JTeRc01Jrekq/06gBlgXxK/wr8Bw3wMuTwptHcZlCDpj7R RGqllQdOIZvKoQG4mWvW1tU0hZtqBHCQPtXiVFBnnNKO+9rqpTEnKjHf+O55CB0p0Du1 uIaw== X-Gm-Message-State: AOAM53373LbPDY9UwoQfAYaJQSKJWjlsjRs4+44ywpisQJRUzXAIsidD lYCpvZaKezdnIVycdhjhtlyvKoVGgouENA== X-Google-Smtp-Source: ABdhPJwePK3IMz1LcSBinw2JoEu3uiov+twK67s6xzlqCyeQQ2dn/5/I1PIo1yJYxzFARls6K98m7Q== X-Received: by 2002:a05:622a:205:: with SMTP id b5mr4837901qtx.186.1617237125637; Wed, 31 Mar 2021 17:32:05 -0700 (PDT) Received: from localhost ([207.98.216.60]) by smtp.gmail.com with ESMTPSA id s28sm2707880qkj.73.2021.03.31.17.32.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 31 Mar 2021 17:32:05 -0700 (PDT) From: Yury Norov To: linux-kernel@vger.kernel.org, Andrew Morton Cc: Yury Norov , linux-m68k@lists.linux-m68k.org, linux-arch@vger.kernel.org, linux-sh@vger.kernel.org, Alexey Klimov , Andy Shevchenko , Arnd Bergmann , David Sterba , Dennis Zhou , Geert Uytterhoeven , Jianpeng Ma , Joe Perches , John Paul Adrian Glaubitz , Josh Poimboeuf , Rasmus Villemoes , Rich Felker , Stefano Brivio , Wei Yang , Wolfram Sang , Yoshinori Sato Subject: [PATCH 09/12] lib: add fast path for find_next_*_bit() Date: Wed, 31 Mar 2021 17:31:50 -0700 Message-Id: <20210401003153.97325-10-yury.norov@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210401003153.97325-1-yury.norov@gmail.com> References: <20210401003153.97325-1-yury.norov@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-sh@vger.kernel.org Similarly to bitmap functions, find_next_*_bit() users will benefit if we'll handle a case of bitmaps that fit into a single word inline. In the very best case, the compiler may replace a function call with a few instructions. This is the quite typical find_next_bit() user: unsigned int cpumask_next(int n, const struct cpumask *srcp) { /* -1 is a legal arg here. */ if (n != -1) cpumask_check(n); return find_next_bit(cpumask_bits(srcp), nr_cpumask_bits, n + 1); } EXPORT_SYMBOL(cpumask_next); Currently, on ARM64 the generated code looks like this: 0000000000000000 : 0: a9bf7bfd stp x29, x30, [sp, #-16]! 4: 11000402 add w2, w0, #0x1 8: aa0103e0 mov x0, x1 c: d2800401 mov x1, #0x40 // #64 10: 910003fd mov x29, sp 14: 93407c42 sxtw x2, w2 18: 94000000 bl 0 1c: a8c17bfd ldp x29, x30, [sp], #16 20: d65f03c0 ret 24: d503201f nop After applying this patch: 0000000000000140 : 140: 11000400 add w0, w0, #0x1 144: 93407c00 sxtw x0, w0 148: f100fc1f cmp x0, #0x3f 14c: 54000168 b.hi 178 // b.pmore 150: f9400023 ldr x3, [x1] 154: 92800001 mov x1, #0xffffffffffffffff // #-1 158: 9ac02020 lsl x0, x1, x0 15c: 52800802 mov w2, #0x40 // #64 160: 8a030001 and x1, x0, x3 164: dac00020 rbit x0, x1 168: f100003f cmp x1, #0x0 16c: dac01000 clz x0, x0 170: 1a800040 csel w0, w2, w0, eq // eq = none 174: d65f03c0 ret 178: 52800800 mov w0, #0x40 // #64 17c: d65f03c0 ret find_next_bit() call is replaced with 6 instructions. find_next_bit() itself is 41 instructions plus function call overhead. Despite inlining, the scripts/bloat-o-meter report smaller .text size after applying the series: add/remove: 11/9 grow/shrink: 233/176 up/down: 5780/-6768 (-988) Signed-off-by: Yury Norov Acked-by: Rasmus Villemoes Acked-by: Andy Shevchenko --- include/asm-generic/bitops/find.h | 30 ++++++++++++++++++++++++++++++ include/asm-generic/bitops/le.h | 21 +++++++++++++++++++++ 2 files changed, 51 insertions(+) diff --git a/include/asm-generic/bitops/find.h b/include/asm-generic/bitops/find.h index 7ad70dab8e93..4148c74a1e4d 100644 --- a/include/asm-generic/bitops/find.h +++ b/include/asm-generic/bitops/find.h @@ -20,6 +20,16 @@ static inline unsigned long find_next_bit(const unsigned long *addr, unsigned long size, unsigned long offset) { + if (small_const_nbits(size)) { + unsigned long val; + + if (unlikely(offset >= size)) + return size; + + val = *addr & GENMASK(size - 1, offset); + return val ? __ffs(val) : size; + } + return _find_next_bit(addr, NULL, size, offset, 0UL, 0); } #endif @@ -40,6 +50,16 @@ unsigned long find_next_and_bit(const unsigned long *addr1, const unsigned long *addr2, unsigned long size, unsigned long offset) { + if (small_const_nbits(size)) { + unsigned long val; + + if (unlikely(offset >= size)) + return size; + + val = *addr1 & *addr2 & GENMASK(size - 1, offset); + return val ? __ffs(val) : size; + } + return _find_next_bit(addr1, addr2, size, offset, 0UL, 0); } #endif @@ -58,6 +78,16 @@ static inline unsigned long find_next_zero_bit(const unsigned long *addr, unsigned long size, unsigned long offset) { + if (small_const_nbits(size)) { + unsigned long val; + + if (unlikely(offset >= size)) + return size; + + val = *addr | ~GENMASK(size - 1, offset); + return val == ~0UL ? size : ffz(val); + } + return _find_next_bit(addr, NULL, size, offset, ~0UL, 0); } #endif diff --git a/include/asm-generic/bitops/le.h b/include/asm-generic/bitops/le.h index 21305f6cea0b..5a28629cbf4d 100644 --- a/include/asm-generic/bitops/le.h +++ b/include/asm-generic/bitops/le.h @@ -5,6 +5,7 @@ #include #include #include +#include #if defined(__LITTLE_ENDIAN) @@ -37,6 +38,16 @@ static inline unsigned long find_next_zero_bit_le(const void *addr, unsigned long size, unsigned long offset) { + if (small_const_nbits(size)) { + unsigned long val = *(const unsigned long *)addr; + + if (unlikely(offset >= size)) + return size; + + val = swab(val) | ~GENMASK(size - 1, offset); + return val == ~0UL ? size : ffz(val); + } + return _find_next_bit(addr, NULL, size, offset, ~0UL, 1); } #endif @@ -46,6 +57,16 @@ static inline unsigned long find_next_bit_le(const void *addr, unsigned long size, unsigned long offset) { + if (small_const_nbits(size)) { + unsigned long val = *(const unsigned long *)addr; + + if (unlikely(offset >= size)) + return size; + + val = swab(val) & GENMASK(size - 1, offset); + return val ? __ffs(val) : size; + } + return _find_next_bit(addr, NULL, size, offset, 0UL, 1); } #endif From patchwork Thu Apr 1 00:31:51 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yury Norov X-Patchwork-Id: 12176645 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 263C3C001B6 for ; Thu, 1 Apr 2021 00:33:05 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id E4D5F61029 for ; Thu, 1 Apr 2021 00:33:04 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233185AbhDAAch (ORCPT ); Wed, 31 Mar 2021 20:32:37 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35136 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233077AbhDAAcI (ORCPT ); Wed, 31 Mar 2021 20:32:08 -0400 Received: from mail-qv1-xf35.google.com (mail-qv1-xf35.google.com [IPv6:2607:f8b0:4864:20::f35]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 073F2C06175F; Wed, 31 Mar 2021 17:32:08 -0700 (PDT) Received: by mail-qv1-xf35.google.com with SMTP id q12so241777qvc.8; Wed, 31 Mar 2021 17:32:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=gxk1x20X1hnopKqSpU5fRPKa2nNYpg8SC0ATwCXnGOY=; b=iDfEDccou2dL1t8r+QrK51cNoAiX2OPuSvlEnLZt0B5H9AhOq6m9oMKC3Uv66Vpcf2 0hrWbZRruD+S3pM5H2DwjUde2HSbaiR+APtwrBWyznYUDiBgGup7Jk9fir96Iuems0uc aPE6Ai5CGAz4OjaFVLrNMV5gmEil/+HIb0VrrTJpQQfZHOGrbrZ4NvOv+mHCrsyd0nlA Dgc1leIrFmLN/tZCC75I1QiqjRAXQotUvMEst1oaZZAnJ3Bgs6RuR21pI2QXgoJyf7jC jdZDYUNBc1XZx+dFnksdby4Asc9/MO1gOB56oF2dppQ0GLuShjYxgVqCO5I38YA6vYs+ le0g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=gxk1x20X1hnopKqSpU5fRPKa2nNYpg8SC0ATwCXnGOY=; b=YjnEyYblr28V24mCP+gxkdxxUhCwXN+SK89tPvCXuxgnwiry4LjTmBu0eTkLoU6mxE HMl8txQre8HwTizUn29fl7RMLbm/FaaDfAmie+IWo7eSIPcIW1JCNrs9JP0fOtoywnRv VCu1Y/u56m49lCAGabwYAEipebtfGQIrQmQ+gnRUU8mZBFNB25S1wbxdXd3EgHmYOutN Dwbfao5xICaD8LsU5lfF+gLFW0YHvBWJfNXM99zUx6W12vZHiPuVi3vV+vy4JfFRhpSs WlhTp5XsLqLLsonMck5fgxLEL0mjrs77oDcfX2blmxTEkcrINscHLS6LxIv11P5KgiKI E5Sw== X-Gm-Message-State: AOAM533GB/+2gsneHNVKPuDj+FsoAvJU7KtTGJn96BZtxs9LoD+W7OrQ 9jBDHeCy9f9ZUIZ3pLG0BVhfuIDkoPLjGg== X-Google-Smtp-Source: ABdhPJxpDEohmf8RrWI+qZ1o2e1vtGgE92f3rXHNVVQTVhAdgQNCbWXn0xHdk1KZXmuFG5AMIWCDfA== X-Received: by 2002:ad4:5629:: with SMTP id cb9mr5833336qvb.62.1617237126876; Wed, 31 Mar 2021 17:32:06 -0700 (PDT) Received: from localhost ([207.98.216.60]) by smtp.gmail.com with ESMTPSA id 19sm1425205qtt.32.2021.03.31.17.32.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 31 Mar 2021 17:32:06 -0700 (PDT) From: Yury Norov To: linux-kernel@vger.kernel.org, Andrew Morton Cc: Yury Norov , linux-m68k@lists.linux-m68k.org, linux-arch@vger.kernel.org, linux-sh@vger.kernel.org, Alexey Klimov , Andy Shevchenko , Arnd Bergmann , David Sterba , Dennis Zhou , Geert Uytterhoeven , Jianpeng Ma , Joe Perches , John Paul Adrian Glaubitz , Josh Poimboeuf , Rasmus Villemoes , Rich Felker , Stefano Brivio , Wei Yang , Wolfram Sang , Yoshinori Sato Subject: [PATCH 10/12] lib: add fast path for find_first_*_bit() and find_last_bit() Date: Wed, 31 Mar 2021 17:31:51 -0700 Message-Id: <20210401003153.97325-11-yury.norov@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210401003153.97325-1-yury.norov@gmail.com> References: <20210401003153.97325-1-yury.norov@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-sh@vger.kernel.org Similarly to bitmap functions, users would benefit if we'll handle a case of small-size bitmaps that fit into a single word. While here, move the find_last_bit() declaration to bitops/find.h where other find_*_bit() functions sit. Signed-off-by: Yury Norov Acked-by: Rasmus Villemoes Acked-by: Andy Shevchenko --- include/asm-generic/bitops/find.h | 50 ++++++++++++++++++++++++++++--- include/linux/bitops.h | 12 -------- lib/find_bit.c | 12 ++++---- 3 files changed, 52 insertions(+), 22 deletions(-) diff --git a/include/asm-generic/bitops/find.h b/include/asm-generic/bitops/find.h index 4148c74a1e4d..0d132ee2a291 100644 --- a/include/asm-generic/bitops/find.h +++ b/include/asm-generic/bitops/find.h @@ -5,6 +5,9 @@ extern unsigned long _find_next_bit(const unsigned long *addr1, const unsigned long *addr2, unsigned long nbits, unsigned long start, unsigned long invert, unsigned long le); +extern unsigned long _find_first_bit(const unsigned long *addr, unsigned long size); +extern unsigned long _find_first_zero_bit(const unsigned long *addr, unsigned long size); +extern unsigned long _find_last_bit(const unsigned long *addr, unsigned long size); #ifndef find_next_bit /** @@ -102,8 +105,17 @@ unsigned long find_next_zero_bit(const unsigned long *addr, unsigned long size, * Returns the bit number of the first set bit. * If no bits are set, returns @size. */ -extern unsigned long find_first_bit(const unsigned long *addr, - unsigned long size); +static inline +unsigned long find_first_bit(const unsigned long *addr, unsigned long size) +{ + if (small_const_nbits(size)) { + unsigned long val = *addr & GENMASK(size - 1, 0); + + return val ? __ffs(val) : size; + } + + return _find_first_bit(addr, size); +} /** * find_first_zero_bit - find the first cleared bit in a memory region @@ -113,8 +125,17 @@ extern unsigned long find_first_bit(const unsigned long *addr, * Returns the bit number of the first cleared bit. * If no bits are zero, returns @size. */ -extern unsigned long find_first_zero_bit(const unsigned long *addr, - unsigned long size); +static inline +unsigned long find_first_zero_bit(const unsigned long *addr, unsigned long size) +{ + if (small_const_nbits(size)) { + unsigned long val = *addr | ~GENMASK(size - 1, 0); + + return val == ~0UL ? size : ffz(val); + } + + return _find_first_zero_bit(addr, size); +} #else /* CONFIG_GENERIC_FIND_FIRST_BIT */ #ifndef find_first_bit @@ -126,6 +147,27 @@ extern unsigned long find_first_zero_bit(const unsigned long *addr, #endif /* CONFIG_GENERIC_FIND_FIRST_BIT */ +#ifndef find_last_bit +/** + * find_last_bit - find the last set bit in a memory region + * @addr: The address to start the search at + * @size: The number of bits to search + * + * Returns the bit number of the last set bit, or size. + */ +static inline +unsigned long find_last_bit(const unsigned long *addr, unsigned long size) +{ + if (small_const_nbits(size)) { + unsigned long val = *addr & GENMASK(size - 1, 0); + + return val ? __fls(val) : size; + } + + return _find_last_bit(addr, size); +} +#endif + /** * find_next_clump8 - find next 8-bit clump with set bits in a memory region * @clump: location to store copy of found clump diff --git a/include/linux/bitops.h b/include/linux/bitops.h index a5a48303b0f1..26bf15e6cd35 100644 --- a/include/linux/bitops.h +++ b/include/linux/bitops.h @@ -286,17 +286,5 @@ static __always_inline void __assign_bit(long nr, volatile unsigned long *addr, }) #endif -#ifndef find_last_bit -/** - * find_last_bit - find the last set bit in a memory region - * @addr: The address to start the search at - * @size: The number of bits to search - * - * Returns the bit number of the last set bit, or size. - */ -extern unsigned long find_last_bit(const unsigned long *addr, - unsigned long size); -#endif - #endif /* __KERNEL__ */ #endif diff --git a/lib/find_bit.c b/lib/find_bit.c index b03a101367f8..0f8e2e369b1d 100644 --- a/lib/find_bit.c +++ b/lib/find_bit.c @@ -75,7 +75,7 @@ EXPORT_SYMBOL(_find_next_bit); /* * Find the first set bit in a memory region. */ -unsigned long find_first_bit(const unsigned long *addr, unsigned long size) +unsigned long _find_first_bit(const unsigned long *addr, unsigned long size) { unsigned long idx; @@ -86,14 +86,14 @@ unsigned long find_first_bit(const unsigned long *addr, unsigned long size) return size; } -EXPORT_SYMBOL(find_first_bit); +EXPORT_SYMBOL(_find_first_bit); #endif #ifndef find_first_zero_bit /* * Find the first cleared bit in a memory region. */ -unsigned long find_first_zero_bit(const unsigned long *addr, unsigned long size) +unsigned long _find_first_zero_bit(const unsigned long *addr, unsigned long size) { unsigned long idx; @@ -104,11 +104,11 @@ unsigned long find_first_zero_bit(const unsigned long *addr, unsigned long size) return size; } -EXPORT_SYMBOL(find_first_zero_bit); +EXPORT_SYMBOL(_find_first_zero_bit); #endif #ifndef find_last_bit -unsigned long find_last_bit(const unsigned long *addr, unsigned long size) +unsigned long _find_last_bit(const unsigned long *addr, unsigned long size) { if (size) { unsigned long val = BITMAP_LAST_WORD_MASK(size); @@ -124,7 +124,7 @@ unsigned long find_last_bit(const unsigned long *addr, unsigned long size) } return size; } -EXPORT_SYMBOL(find_last_bit); +EXPORT_SYMBOL(_find_last_bit); #endif unsigned long find_next_clump8(unsigned long *clump, const unsigned long *addr, From patchwork Thu Apr 1 00:31:52 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yury Norov X-Patchwork-Id: 12176651 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id D4D06C001BF for ; Thu, 1 Apr 2021 00:33:06 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id ABC2B61139 for ; Thu, 1 Apr 2021 00:33:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233195AbhDAAci (ORCPT ); Wed, 31 Mar 2021 20:32:38 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35140 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233092AbhDAAcJ (ORCPT ); Wed, 31 Mar 2021 20:32:09 -0400 Received: from mail-qk1-x72e.google.com (mail-qk1-x72e.google.com [IPv6:2607:f8b0:4864:20::72e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id F3EB2C06175F; Wed, 31 Mar 2021 17:32:08 -0700 (PDT) Received: by mail-qk1-x72e.google.com with SMTP id y5so637203qkl.9; Wed, 31 Mar 2021 17:32:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=OWHXje7aHb+2OQQ4sHpfObqcJeqb3/Y1e6oZgl+21cA=; b=sGTprdvoKyvEb9K8hmpQFNDJghLuuObLQ3aVFTwZ1kcFbQbug7Dz+45o7BxuQxAIQI bxBrIH8azroqP7QDqIKe8uUhoAE1YRqASRwt17TGmchjQBQPWEnawwZ2VkEaanK1VQEu SifRP4gzpH0Cs7JQYlDPmz1rl4gOgkk3qD8UUf8vPhhiplQLiv2wlIpqGqpXeync8JyA Ri5n/7RGCyf8DRC1gwnXc3Aj1LYjrRWhCrFziiGE5VC1qOqv+IogU3Oi+xJFkedJLf7V Akm9eIrg0rbyyah5vzNWpTaXW0fH+N0dw51Pg0AIEbZ+yj8T36o6U/3A2SdLrQ33Hdoj 1vIw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=OWHXje7aHb+2OQQ4sHpfObqcJeqb3/Y1e6oZgl+21cA=; b=oT6HNi0ANGg15a7EFxvnRodULDInP7d0fxDmVedbu8lBvd/VSXSH1/TS3DBvj2OP+D OCMN4rzVdAVOf3MzU0uEaJA5K/8p3kPKwj68jwgyrZNanoEfEt/42Mf/gWu6auwEYgWt O7jo4OoQqDCROK+CombTXs7TVCkwBV8kCP7sIbcVBMB8qdlh1quJWlxI8vPW0eOtUESN au+boszwhVnUBpplZgkoI+iU7/ao9z4kzzzRz+WD12IaW/oxq+Yt6b/GFwY/tVOrGKrH Nv4GabwhOUZ7YkyK+DKP7Ub2bVyuwMa8FTn/g542p65Suy43iksUSy3tVp68LAzOtbvw ZVoQ== X-Gm-Message-State: AOAM532czKamIm0HYxpPeA01M5R50Lj/hVOeI0s6g1vDPYh7gtpl6wFm f6iRpuiQNTT7hXsWTtQASsRRiUd8HLOH6g== X-Google-Smtp-Source: ABdhPJzfXvFWj5mMG8ykN+Zn8l46W+R1ArWFHf1M6eYUJklnBNeB+OQG48RDKLL5uIEBQpRMk97BHw== X-Received: by 2002:a05:620a:144a:: with SMTP id i10mr5950253qkl.431.1617237127874; Wed, 31 Mar 2021 17:32:07 -0700 (PDT) Received: from localhost ([207.98.216.60]) by smtp.gmail.com with ESMTPSA id k8sm2379342qth.74.2021.03.31.17.32.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 31 Mar 2021 17:32:07 -0700 (PDT) From: Yury Norov To: linux-kernel@vger.kernel.org, Andrew Morton Cc: Yury Norov , linux-m68k@lists.linux-m68k.org, linux-arch@vger.kernel.org, linux-sh@vger.kernel.org, Alexey Klimov , Andy Shevchenko , Arnd Bergmann , David Sterba , Dennis Zhou , Geert Uytterhoeven , Jianpeng Ma , Joe Perches , John Paul Adrian Glaubitz , Josh Poimboeuf , Rasmus Villemoes , Rich Felker , Stefano Brivio , Wei Yang , Wolfram Sang , Yoshinori Sato Subject: [PATCH 11/12] tools: sync lib/find_bit implementation Date: Wed, 31 Mar 2021 17:31:52 -0700 Message-Id: <20210401003153.97325-12-yury.norov@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210401003153.97325-1-yury.norov@gmail.com> References: <20210401003153.97325-1-yury.norov@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-sh@vger.kernel.org Add fast paths to find_*_bit() functions as per kernel implementation. Signed-off-by: Yury Norov Acked-by: Rasmus Villemoes --- tools/include/asm-generic/bitops/find.h | 58 +++++++++++++++++++++++-- tools/lib/find_bit.c | 4 +- 2 files changed, 57 insertions(+), 5 deletions(-) diff --git a/tools/include/asm-generic/bitops/find.h b/tools/include/asm-generic/bitops/find.h index 9fe62d10b084..6481fd11012a 100644 --- a/tools/include/asm-generic/bitops/find.h +++ b/tools/include/asm-generic/bitops/find.h @@ -5,6 +5,9 @@ extern unsigned long _find_next_bit(const unsigned long *addr1, const unsigned long *addr2, unsigned long nbits, unsigned long start, unsigned long invert, unsigned long le); +extern unsigned long _find_first_bit(const unsigned long *addr, unsigned long size); +extern unsigned long _find_first_zero_bit(const unsigned long *addr, unsigned long size); +extern unsigned long _find_last_bit(const unsigned long *addr, unsigned long size); #ifndef find_next_bit /** @@ -20,6 +23,16 @@ static inline unsigned long find_next_bit(const unsigned long *addr, unsigned long size, unsigned long offset) { + if (small_const_nbits(size)) { + unsigned long val; + + if (unlikely(offset >= size)) + return size; + + val = *addr & GENMASK(size - 1, offset); + return val ? __ffs(val) : size; + } + return _find_next_bit(addr, NULL, size, offset, 0UL, 0); } #endif @@ -40,6 +53,16 @@ unsigned long find_next_and_bit(const unsigned long *addr1, const unsigned long *addr2, unsigned long size, unsigned long offset) { + if (small_const_nbits(size)) { + unsigned long val; + + if (unlikely(offset >= size)) + return size; + + val = *addr1 & *addr2 & GENMASK(size - 1, offset); + return val ? __ffs(val) : size; + } + return _find_next_bit(addr1, addr2, size, offset, 0UL, 0); } #endif @@ -58,6 +81,16 @@ static inline unsigned long find_next_zero_bit(const unsigned long *addr, unsigned long size, unsigned long offset) { + if (small_const_nbits(size)) { + unsigned long val; + + if (unlikely(offset >= size)) + return size; + + val = *addr | ~GENMASK(size - 1, offset); + return val == ~0UL ? size : ffz(val); + } + return _find_next_bit(addr, NULL, size, offset, ~0UL, 0); } #endif @@ -72,8 +105,17 @@ unsigned long find_next_zero_bit(const unsigned long *addr, unsigned long size, * Returns the bit number of the first set bit. * If no bits are set, returns @size. */ -extern unsigned long find_first_bit(const unsigned long *addr, - unsigned long size); +static inline +unsigned long find_first_bit(const unsigned long *addr, unsigned long size) +{ + if (small_const_nbits(size)) { + unsigned long val = *addr & GENMASK(size - 1, 0); + + return val ? __ffs(val) : size; + } + + return _find_first_bit(addr, size); +} #endif /* find_first_bit */ @@ -87,7 +129,17 @@ extern unsigned long find_first_bit(const unsigned long *addr, * Returns the bit number of the first cleared bit. * If no bits are zero, returns @size. */ -unsigned long find_first_zero_bit(const unsigned long *addr, unsigned long size); +static inline +unsigned long find_first_zero_bit(const unsigned long *addr, unsigned long size) +{ + if (small_const_nbits(size)) { + unsigned long val = *addr | ~GENMASK(size - 1, 0); + + return val == ~0UL ? size : ffz(val); + } + + return _find_first_zero_bit(addr, size); +} #endif #endif /*_TOOLS_LINUX_ASM_GENERIC_BITOPS_FIND_H_ */ diff --git a/tools/lib/find_bit.c b/tools/lib/find_bit.c index 589fd2f26f94..109aa7ffcf97 100644 --- a/tools/lib/find_bit.c +++ b/tools/lib/find_bit.c @@ -83,7 +83,7 @@ unsigned long _find_next_bit(const unsigned long *addr1, /* * Find the first set bit in a memory region. */ -unsigned long find_first_bit(const unsigned long *addr, unsigned long size) +unsigned long _find_first_bit(const unsigned long *addr, unsigned long size) { unsigned long idx; @@ -100,7 +100,7 @@ unsigned long find_first_bit(const unsigned long *addr, unsigned long size) /* * Find the first cleared bit in a memory region. */ -unsigned long find_first_zero_bit(const unsigned long *addr, unsigned long size) +unsigned long _find_first_zero_bit(const unsigned long *addr, unsigned long size) { unsigned long idx; From patchwork Thu Apr 1 00:31:53 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yury Norov X-Patchwork-Id: 12176649 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8FE84C001BE for ; Thu, 1 Apr 2021 00:33:06 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 6D18B6108C for ; Thu, 1 Apr 2021 00:33:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233193AbhDAAcj (ORCPT ); Wed, 31 Mar 2021 20:32:39 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35150 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233105AbhDAAcK (ORCPT ); Wed, 31 Mar 2021 20:32:10 -0400 Received: from mail-qk1-x72c.google.com (mail-qk1-x72c.google.com [IPv6:2607:f8b0:4864:20::72c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 078F9C06175F; Wed, 31 Mar 2021 17:32:10 -0700 (PDT) Received: by mail-qk1-x72c.google.com with SMTP id v70so646451qkb.8; Wed, 31 Mar 2021 17:32:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=R5eR+cvpKZq1WYNNc805w7v5z1Gu54WewjgBw3zPSZw=; b=eG+/eqlEB+D/yCNe7zlVJgHe15xLKvk+EdruRzRsHl8qL/OhqO2s4dBJBxM54EXgOO sCApJaxsKTtoojPLbTTSpuKyrigZD5/pmm9f7gujpq1eFmjn9AjMqHAclzQy+wdv/GxB 4wIWcjcGJff8bilTKqOLXpVLeDm1tNLF3MKReIcz0PpZ8BNPVGTJCvMsK2VIfftig54u 0fem+lyi70p1L/YcNcsux7loTpIg2DBQOuDqIMMEi9FFRdmLfiiJz8Fgf/O3TK414z5o AmFmvH0rye2Uc2Vggamo66a6V0KRyb6Mtfm4M9V743MNySC13rw8n+2qN2nyjdZq19eQ VOiA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=R5eR+cvpKZq1WYNNc805w7v5z1Gu54WewjgBw3zPSZw=; b=oV7RaU0hwnNM5VdEiLE8dlxtzNmrJGywCidJSHQgl/RJChpEhWHBU7RLv00it6BIAr lS5cDPPaXOhhPL4UaPr/S33b1actGMkNCjnLPHAACyBgfspJxPCDbYBUbINXknqE80uJ zrkcnOUkMW+8pbuGGBVpNgtt9czkursAic3YPbUnaRSNibg1RCWn82AxelY+ZiBpoE0V cALnWd1aDH1UKy9MRx57IbS22Rg95DGv61I+l519zkd9zH0VeTe1o69Kuln+IqdOc8Ss Asht2UQ/9yxQPVknyDK+ukbMek7rqyzKsAEh7ggYfqFPUO5wauqVTVM+FIj594OlJNy2 uFiw== X-Gm-Message-State: AOAM533mOU9lEzjr3DMOZclNVQg/HpCj0Pt1L1UbbJpk/6u7bjZgMJ43 sAFfhlxwWmMtgdjhQu0OQb4PntNtvkS3fw== X-Google-Smtp-Source: ABdhPJwZYb/UGumLv+aImCXZA08eHtGRinQM4tEe5XNBd32JW273HOB7CohLCLtXAs7On6YDaUZKOQ== X-Received: by 2002:a05:620a:1353:: with SMTP id c19mr6046144qkl.392.1617237128944; Wed, 31 Mar 2021 17:32:08 -0700 (PDT) Received: from localhost ([207.98.216.60]) by smtp.gmail.com with ESMTPSA id d24sm2655513qko.54.2021.03.31.17.32.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 31 Mar 2021 17:32:08 -0700 (PDT) From: Yury Norov To: linux-kernel@vger.kernel.org, Andrew Morton Cc: Yury Norov , linux-m68k@lists.linux-m68k.org, linux-arch@vger.kernel.org, linux-sh@vger.kernel.org, Alexey Klimov , Andy Shevchenko , Arnd Bergmann , David Sterba , Dennis Zhou , Geert Uytterhoeven , Jianpeng Ma , Joe Perches , John Paul Adrian Glaubitz , Josh Poimboeuf , Rasmus Villemoes , Rich Felker , Stefano Brivio , Wei Yang , Wolfram Sang , Yoshinori Sato Subject: [PATCH 12/12] MAINTAINERS: Add entry for the bitmap API Date: Wed, 31 Mar 2021 17:31:53 -0700 Message-Id: <20210401003153.97325-13-yury.norov@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210401003153.97325-1-yury.norov@gmail.com> References: <20210401003153.97325-1-yury.norov@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-sh@vger.kernel.org Add myself as maintainer for bitmap API and Andy and Rasmus as reviewers. Signed-off-by: Yury Norov Acked-by: Andy Shevchenko Acked-by: Rasmus Villemoes --- MAINTAINERS | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index bbd4484b5ba6..fcf89f8cbb6a 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -3172,6 +3172,22 @@ F: Documentation/filesystems/bfs.rst F: fs/bfs/ F: include/uapi/linux/bfs_fs.h +BITMAP API +M: Yury Norov +R: Andy Shevchenko +R: Rasmus Villemoes +S: Maintained +F: include/asm-generic/bitops/find.h +F: include/linux/bitmap.h +F: lib/bitmap.c +F: lib/find_bit.c +F: lib/find_bit_benchmark.c +F: lib/test_bitmap.c +F: tools/include/asm-generic/bitops/find.h +F: tools/include/linux/bitmap.h +F: tools/lib/bitmap.c +F: tools/lib/find_bit.c + BLINKM RGB LED DRIVER M: Jan-Simon Moeller S: Maintained