Received: by 2002:a05:7412:d8a:b0:e2:908c:2ebd with SMTP id b10csp2632593rdg; Mon, 16 Oct 2023 09:58:05 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHH4qKK1x7xrT8t/XUyfIMvmzorARqlrR/QXsQ/XVpmVbOIEO0/t8LA9SuZWhyRrTQNv6u7 X-Received: by 2002:a17:902:eccc:b0:1c4:44a0:5c03 with SMTP id a12-20020a170902eccc00b001c444a05c03mr36137576plh.9.1697475485359; Mon, 16 Oct 2023 09:58:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1697475485; cv=none; d=google.com; s=arc-20160816; b=R9/PCuoDwljnhltfjfUEx6jNlFiaE77MoRnvv+oLYdRyjWmyRKjIRtMrAxy5PcHylM oCg4Tg4qcj+X4R2HdZzfIJNnMqd5ito9N2wPkvyaIf2SBDyrHM/0MDnx75M0Hd+j64RR VUKHq2/chCei+FMzI9dAhRML/cQd5DTRih4g4rD1sxqiTcSaCVoXhzAtmu0ltTpX8/KO xmsgl29pgpAyhf0r/7Z0tyujK6dEAW1H2QK8ot6UA4jUQjJfbAb6lSGUOepIOJfE4zWn ThDpymbU/fuzKRMUlJwnfC6f4/HsarulhVLp2xH8Arqg2+IdJoPm3oM0wOeEObyFcWpv 3H3w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=xcOpZEwPQbSD62BAAnJc8EcfEvYoECmwk7L7MISuopg=; fh=2kCdHXvcAULJv/9f8X/O+IrT3ddiMaJJNnCkHNJ/OJY=; b=nyRpAGxLg5AgGAronk3bxCII4YBSflTbCU9RFL6jtFEdKVvlQT5uIC8Nq6YWyopeTz QORC13+7KGjpAUjrDLq3lXsWPMlkIlJS9EJN7vd2nnKsA22W1U8HWrYXkCFyUGiM+F3r QD42Gw39ypTXjeedd3FGCuYxgxxXemFNXr0fg+7es1HCAYEcKHOWCnyAcJTovJ6CIfA5 ilG4CjizKdkxughIeLCZ+Aihjfr7QS3hKUX+kJ1BIjQ9oOWKa8w23YcIxy7hGQil4m5i rv3i68vSofmCa84YchChUWkzF4e0aQDdZ/6yaE4EsUEpjx2qR+OdsoSAr0tXz5Lfte7a QLMQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=Nfe2iKxB; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from snail.vger.email (snail.vger.email. [23.128.96.37]) by mx.google.com with ESMTPS id x5-20020a170902820500b001c3c75842f1si6863201pln.14.2023.10.16.09.58.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Oct 2023 09:58:05 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) client-ip=23.128.96.37; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=Nfe2iKxB; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id 49B66802A7D0; Mon, 16 Oct 2023 09:58:04 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234498AbjJPQ54 (ORCPT + 99 others); Mon, 16 Oct 2023 12:57:56 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60886 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233659AbjJPQ4s (ORCPT ); Mon, 16 Oct 2023 12:56:48 -0400 Received: from mgamail.intel.com (mgamail.intel.com [192.55.52.136]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C20D849FE; Mon, 16 Oct 2023 09:54:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1697475271; x=1729011271; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=6Yna5gTXo7UZceq8nYgGY6hXKf64iK95iaaag7rQQik=; b=Nfe2iKxBpUkrq9tv4/tc3cn3WYL1rgYpKuYqWrO7VURvBEe27Cld9jiW y+UqJAR84oMtj9Sf5OtLxyyv0Cvuvascb2+2nN3om86zK7P6AqgaA37X6 kf5qYke1aRBYsd8IcA6gvMSwA3TgB2yQKmvzYoCrNT2vAQeeruUljCsze pGG+Xn+VZG9Hdcu6+rxkSzU6DZ7xHuiSbe5PsoHud61bBVk7DryVLy/nw FMxD42jViF9mhBlSIk+nIGVPqySM2cuC0uGKdH1aqUb7Yvtnw+uJBkumC q/R3bzkNGtxyQowKrrrwWAtixwC69QcIueWjDxYBish1EVn8U+Z6WvZgI w==; X-IronPort-AV: E=McAfee;i="6600,9927,10865"; a="364937108" X-IronPort-AV: E=Sophos;i="6.03,229,1694761200"; d="scan'208";a="364937108" Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 16 Oct 2023 09:54:31 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10865"; a="826084041" X-IronPort-AV: E=Sophos;i="6.03,229,1694761200"; d="scan'208";a="826084041" Received: from newjersey.igk.intel.com ([10.102.20.203]) by fmsmga004.fm.intel.com with ESMTP; 16 Oct 2023 09:54:27 -0700 From: Alexander Lobakin To: Yury Norov Cc: Alexander Lobakin , Andy Shevchenko , Rasmus Villemoes , Alexander Potapenko , Jakub Kicinski , Eric Dumazet , David Ahern , Przemek Kitszel , Simon Horman , netdev@vger.kernel.org, linux-btrfs@vger.kernel.org, dm-devel@redhat.com, ntfs3@lists.linux.dev, linux-s390@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 04/13] linkmode: convert linkmode_{test,set,clear,mod}_bit() to macros Date: Mon, 16 Oct 2023 18:52:38 +0200 Message-ID: <20231016165247.14212-5-aleksander.lobakin@intel.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20231016165247.14212-1-aleksander.lobakin@intel.com> References: <20231016165247.14212-1-aleksander.lobakin@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF, RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Mon, 16 Oct 2023 09:58:04 -0700 (PDT) Since commit b03fc1173c0c ("bitops: let optimize out non-atomic bitops on compile-time constants"), the non-atomic bitops are macros which can be expanded by the compilers into compile-time expressions, which will result in better optimized object code. Unfortunately, turned out that passing `volatile` to those macros discards any possibility of optimization, as the compilers then don't even try to look whether the passed bitmap is known at compilation time. In addition to that, the mentioned linkmode helpers are marked with `inline`, not `__always_inline`, meaning that it's not guaranteed some compiler won't uninline them for no reason, which will also effectively prevent them from being optimized (it's a well-known thing the compilers sometimes uninline `2 + 2`). Convert linkmode_*_bit() from inlines to macros. Their calling convention are 1:1 with the corresponding bitops, so that it's not even needed to enumerate and map the arguments, only the names. No changes in vmlinux' object code (compiled by LLVM for x86_64) whatsoever, but that doesn't necessarily means the change is meaningless. Reviewed-by: Przemek Kitszel Signed-off-by: Alexander Lobakin --- include/linux/linkmode.h | 27 ++++----------------------- 1 file changed, 4 insertions(+), 23 deletions(-) diff --git a/include/linux/linkmode.h b/include/linux/linkmode.h index 15e0e0209da4..f231e2edbfa5 100644 --- a/include/linux/linkmode.h +++ b/include/linux/linkmode.h @@ -38,10 +38,10 @@ static inline int linkmode_andnot(unsigned long *dst, const unsigned long *src1, return bitmap_andnot(dst, src1, src2, __ETHTOOL_LINK_MODE_MASK_NBITS); } -static inline void linkmode_set_bit(int nr, volatile unsigned long *addr) -{ - __set_bit(nr, addr); -} +#define linkmode_test_bit test_bit +#define linkmode_set_bit __set_bit +#define linkmode_clear_bit __clear_bit +#define linkmode_mod_bit __assign_bit static inline void linkmode_set_bit_array(const int *array, int array_size, unsigned long *addr) @@ -52,25 +52,6 @@ static inline void linkmode_set_bit_array(const int *array, int array_size, linkmode_set_bit(array[i], addr); } -static inline void linkmode_clear_bit(int nr, volatile unsigned long *addr) -{ - __clear_bit(nr, addr); -} - -static inline void linkmode_mod_bit(int nr, volatile unsigned long *addr, - int set) -{ - if (set) - linkmode_set_bit(nr, addr); - else - linkmode_clear_bit(nr, addr); -} - -static inline int linkmode_test_bit(int nr, const volatile unsigned long *addr) -{ - return test_bit(nr, addr); -} - static inline int linkmode_equal(const unsigned long *src1, const unsigned long *src2) { -- 2.41.0