All of lore.kernel.org
 help / color / mirror / Atom feed
From: Yury Norov <yury.norov@gmail.com>
To: "Andy Shevchenko" <andriy.shevchenko@linux.intel.com>,
	"David Laight" <David.Laight@ACULAB.COM>,
	"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
	"Joe Perches" <joe@perches.com>,
	"Julia Lawall" <Julia.Lawall@inria.fr>,
	"Michał Mirosław" <mirq-linux@rere.qmqm.pl>,
	"Nicholas Piggin" <npiggin@gmail.com>,
	"Nicolas Palix" <nicolas.palix@imag.fr>,
	"Peter Zijlstra" <peterz@infradead.org>,
	"Rasmus Villemoes" <linux@rasmusvillemoes.dk>,
	"Matti Vaittinen" <Matti.Vaittinen@fi.rohmeurope.com>,
	linux-kernel@vger.kernel.org
Cc: "Yury Norov" <yury.norov@gmail.com>,
	"Alexei Starovoitov" <ast@kernel.org>,
	"Andrew Morton" <akpm@linux-foundation.org>,
	"Chris Zankel" <chris@zankel.net>,
	"Christophe Leroy" <christophe.leroy@csgroup.eu>,
	"Eric W . Biederman" <ebiederm@xmission.com>,
	"Kumar Kartikeya Dwivedi" <memxor@gmail.com>,
	"Max Filippov" <jcmvbkbc@gmail.com>,
	"Toke Høiland-Jørgensen" <toke@redhat.com>,
	linux-xtensa@linux-xtensa.org
Subject: [PATCH 08/22] bitops: introduce MANY_BITS() macro
Date: Tue, 10 May 2022 08:47:36 -0700	[thread overview]
Message-ID: <20220510154750.212913-9-yury.norov@gmail.com> (raw)
In-Reply-To: <20220510154750.212913-1-yury.norov@gmail.com>

arch/xtensa/kernel/traps.c and include/linux/log2.h define very similar
functions with different behaviour. XTENSA defines IS_POW2(), and
log2.h defines is_power_of_2(). The difference is that IS_POW2()
considers 0 as power of 2, while is_power_of_2() - does not.

This discrepancy may confuse reader. From mathematical point of view,
0 is not a power of 2. So let's introduce macro MANY_BITS(), which
returns true if 2 or more bits are set in a number (which is what
XTENSA actually needs), and use it in is_power_of_2().

CC: Alexei Starovoitov <ast@kernel.org>
CC: Andrew Morton <akpm@linux-foundation.org>
CC: Chris Zankel <chris@zankel.net>
CC: Christophe Leroy <christophe.leroy@csgroup.eu>
CC: Eric W. Biederman <ebiederm@xmission.com>
CC: Kumar Kartikeya Dwivedi <memxor@gmail.com>
CC: Max Filippov <jcmvbkbc@gmail.com>
CC: Toke Høiland-Jørgensen <toke@redhat.com>
CC: linux-xtensa@linux-xtensa.org
CC: linux-kernel@vger.kernel.org
Signed-off-by: Yury Norov <yury.norov@gmail.com>
---
 arch/xtensa/kernel/traps.c | 5 +----
 include/linux/bitops.h     | 3 +++
 include/linux/log2.h       | 2 +-
 3 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/arch/xtensa/kernel/traps.c b/arch/xtensa/kernel/traps.c
index 138a86fbe9d7..040ec38bfce2 100644
--- a/arch/xtensa/kernel/traps.c
+++ b/arch/xtensa/kernel/traps.c
@@ -203,10 +203,7 @@ static void do_multihit(struct pt_regs *regs)
 
 #if XTENSA_FAKE_NMI
 
-#define IS_POW2(v) (((v) & ((v) - 1)) == 0)
-
-#if !(PROFILING_INTLEVEL == XCHAL_EXCM_LEVEL && \
-      IS_POW2(XTENSA_INTLEVEL_MASK(PROFILING_INTLEVEL)))
+#if (MANY_BITS(XTENSA_INTLEVEL_MASK(PROFILING_INTLEVEL)) || PROFILING_INTLEVEL != XCHAL_EXCM_LEVEL)
 #warning "Fake NMI is requested for PMM, but there are other IRQs at or above its level."
 #warning "Fake NMI will be used, but there will be a bugcheck if one of those IRQs fire."
 
diff --git a/include/linux/bitops.h b/include/linux/bitops.h
index 7aaed501f768..96bc6a2552d6 100644
--- a/include/linux/bitops.h
+++ b/include/linux/bitops.h
@@ -21,6 +21,9 @@
 #define BITS_TO_U32(nr)		__KERNEL_DIV_ROUND_UP(nr, BITS_PER_TYPE(u32))
 #define BITS_TO_BYTES(nr)	__KERNEL_DIV_ROUND_UP(nr, BITS_PER_TYPE(char))
 
+/* Return: nonzero if 2 or more bits are set */
+#define MANY_BITS(n)		((n) & ((n) - 1))
+
 extern unsigned int __sw_hweight8(unsigned int w);
 extern unsigned int __sw_hweight16(unsigned int w);
 extern unsigned int __sw_hweight32(unsigned int w);
diff --git a/include/linux/log2.h b/include/linux/log2.h
index 9f30d087a128..335b9dbd302d 100644
--- a/include/linux/log2.h
+++ b/include/linux/log2.h
@@ -44,7 +44,7 @@ int __ilog2_u64(u64 n)
 static inline __attribute__((const))
 bool is_power_of_2(unsigned long n)
 {
-	return (n != 0 && ((n & (n - 1)) == 0));
+	return n != 0 && !MANY_BITS(n);
 }
 
 /**
-- 
2.32.0


  parent reply	other threads:[~2022-05-10 15:56 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-05-10 15:47 [PATCH 00/21] add coccinelle scripts for {bitmap,cpumask,nodes}_empty() Yury Norov
2022-05-10 15:47 ` [PATCH 01/22] introduce bitmap.cocci Yury Norov
2022-05-10 15:47   ` [cocci] " Yury Norov
2022-05-10 15:47 ` [PATCH 02/22] introduce cpumask.cocci Yury Norov
2022-05-10 15:47   ` [cocci] " Yury Norov
2022-05-10 15:47 ` [PATCH 03/22] introduce nodemask.cocci Yury Norov
2022-05-10 15:47   ` [cocci] " Yury Norov
2022-05-10 15:47 ` [PATCH 04/22] ice: use bitmap_empty() in ice_vf_has_no_qs_ena() Yury Norov
2022-05-10 15:47   ` [Intel-wired-lan] " Yury Norov
2022-05-10 15:47 ` [PATCH 05/22] iio: replace bitmap_weight with bitmap_weitght_{eq,le} where appropriate Yury Norov
2022-05-14 15:53   ` Jonathan Cameron
2022-05-14 16:31     ` Joe Perches
2022-05-15 16:40       ` Jonathan Cameron
2022-05-10 15:47 ` [PATCH 06/22] octeontx2: use bitmap_empty() instead of bitmap_weight() Yury Norov
2022-05-10 21:31   ` Jakub Kicinski
2022-05-10 15:47 ` [PATCH 07/22] risc-v: replace bitmap_weight with bitmap_empty in riscv_fill_hwcap() Yury Norov
2022-05-10 15:47   ` Yury Norov
2022-05-10 16:31   ` Anup Patel
2022-05-10 16:31     ` Anup Patel
2022-05-10 15:47 ` Yury Norov [this message]
2022-05-10 16:50   ` [PATCH 08/22] bitops: introduce MANY_BITS() macro Alexei Starovoitov
2022-05-10 17:54     ` David Laight
2022-05-10 19:11       ` Yury Norov
2022-05-11 10:59         ` Rasmus Villemoes
2022-05-10 17:57   ` Max Filippov
2022-05-10 19:16     ` Yury Norov
2022-05-11  4:55       ` Max Filippov
2022-05-10 15:47 ` [PATCH 09/22] qed: replace bitmap_weight() with MANY_BITS() Yury Norov
2022-05-10 15:47 ` [PATCH 10/22] net/mlx5e: simplify mlx5e_set_fecparam() Yury Norov
2022-05-10 15:47 ` [PATCH 11/22] KVM: x86: hyper-v: replace bitmap_weight() with hweight64() Yury Norov
2022-05-16 13:08   ` Vitaly Kuznetsov
2022-05-22 14:53   ` Guenter Roeck
2022-05-22 17:39     ` Yury Norov
2022-05-10 15:47 ` [PATCH 12/22] ia64: cleanup remove_siblinginfo() Yury Norov
2022-05-10 15:47   ` Yury Norov
2022-05-10 22:33   ` Andrew Morton
2022-05-10 22:33     ` Andrew Morton
2022-05-10 15:47 ` [PATCH 13/22] x86: smp: move cpumask_weight() out of for-loop in remove_siblinginfo Yury Norov
2022-05-11  9:47   ` Thomas Gleixner
2022-05-10 15:47 ` [PATCH 14/22] x86: smp: use cpumask_weight_eq() " Yury Norov
2022-05-10 15:47 ` [PATCH 15/22] net/mlx5: use cpumask_weight_gt() in irq_pool_request_irq() Yury Norov
2022-05-10 15:47 ` [PATCH 16/22] x86/tsc: use cpumask_weight_gt() in loop_timeout() Yury Norov
2022-05-10 15:47 ` [PATCH 17/22] sched/core: fix opencoded cpumask_any_but() Yury Norov
2022-05-10 16:37   ` Peter Zijlstra
2022-05-10 17:21     ` Valentin Schneider
2022-05-10 15:47 ` [PATCH 18/22] sched/core: remove unneeded cpumask_weight() in sched_core_cpu_{starting,deactivate} Yury Norov
2022-05-10 15:47 ` [PATCH 19/22] sched/core: replace cpumask_weight() with cpumask_weight_eq() where appropriate Yury Norov
2022-05-10 15:47 ` [PATCH 20/22] sched/topology: " Yury Norov
2022-05-10 15:47 ` [PATCH 21/22] cpufreq: use cpumask_weight_gt() in policy_is_shared() Yury Norov
2022-05-11  3:16   ` Viresh Kumar
2022-05-10 15:47 ` [PATCH 22/22] clockevents: use cpumask_weight_eq() in tick_cleanup_dead_cpu() Yury Norov
2022-05-11  8:18   ` Thomas Gleixner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220510154750.212913-9-yury.norov@gmail.com \
    --to=yury.norov@gmail.com \
    --cc=David.Laight@ACULAB.COM \
    --cc=Julia.Lawall@inria.fr \
    --cc=Matti.Vaittinen@fi.rohmeurope.com \
    --cc=akpm@linux-foundation.org \
    --cc=andriy.shevchenko@linux.intel.com \
    --cc=ast@kernel.org \
    --cc=chris@zankel.net \
    --cc=christophe.leroy@csgroup.eu \
    --cc=ebiederm@xmission.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=jcmvbkbc@gmail.com \
    --cc=joe@perches.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-xtensa@linux-xtensa.org \
    --cc=linux@rasmusvillemoes.dk \
    --cc=memxor@gmail.com \
    --cc=mirq-linux@rere.qmqm.pl \
    --cc=nicolas.palix@imag.fr \
    --cc=npiggin@gmail.com \
    --cc=peterz@infradead.org \
    --cc=toke@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.