]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
lib: count_zeros: unify count_{leading,trailing}_zeros()
authorYury Norov <ynorov@nvidia.com>
Mon, 23 Mar 2026 16:17:12 +0000 (12:17 -0400)
committerYury Norov <ynorov@nvidia.com>
Mon, 23 Mar 2026 17:33:51 +0000 (13:33 -0400)
The 'leading' helper returns BITS_PER_LONG if x == 0, while 'trailing'
one returns COUNT_TRAILING_ZEROS_0, which turns to be -1.

None of the current users explicitly check the returned value for
COUNT_TRAILING_ZEROS_0, except the loongarch, which tests implicitly
for the '>= 0'.

So, align count_trailing_zeros() with the count_leading_zeros(), and
simplify the loongarch handling.

Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com>
Signed-off-by: Yury Norov <ynorov@nvidia.com>
arch/loongarch/kvm/intc/eiointc.c
include/linux/count_zeros.h

index d2acb4d09e73f5f3cc3e5a9d046db04e08e95070..3b5268116727c9ce5161312622203b65d0017ad9 100644 (file)
@@ -16,7 +16,7 @@ static void eiointc_set_sw_coreisr(struct loongarch_eiointc *s)
                ipnum = (s->ipmap >> (irq / 32 * 8)) & 0xff;
                if (!(s->status & BIT(EIOINTC_ENABLE_INT_ENCODE))) {
                        ipnum = count_trailing_zeros(ipnum);
-                       ipnum = (ipnum >= 0 && ipnum < 4) ? ipnum : 0;
+                       ipnum = ipnum < 4 ? ipnum : 0;
                }
 
                cpuid = ((u8 *)s->coremap)[irq];
@@ -41,7 +41,7 @@ static void eiointc_update_irq(struct loongarch_eiointc *s, int irq, int level)
        ipnum = (s->ipmap >> (irq / 32 * 8)) & 0xff;
        if (!(s->status & BIT(EIOINTC_ENABLE_INT_ENCODE))) {
                ipnum = count_trailing_zeros(ipnum);
-               ipnum = (ipnum >= 0 && ipnum < 4) ? ipnum : 0;
+               ipnum = ipnum < 4 ? ipnum : 0;
        }
 
        cpu = s->sw_coremap[irq];
index 5034a30b5c7c76d39bccf83e4e8fda4ce5592d36..b72ba3faa036b0262ee422a313bb23d8091ce48c 100644 (file)
@@ -10,8 +10,6 @@
 
 #include <asm/bitops.h>
 
-#define COUNT_TRAILING_ZEROS_0 (-1)
-
 /**
  * count_leading_zeros - Count the number of zeros from the MSB back
  * @x: The value
@@ -38,11 +36,11 @@ static inline int count_leading_zeros(unsigned long x)
  *
  * If the LSB of @x is set, the result is 0.
  * If only the MSB of @x is set, then the result is BITS_PER_LONG-1.
- * If @x is 0 then the result is COUNT_TRAILING_ZEROS_0.
+ * If @x is 0 then the result is BITS_PER_LONG.
  */
 static inline int count_trailing_zeros(unsigned long x)
 {
-       return (x != 0) ? __ffs(x) : COUNT_TRAILING_ZEROS_0;
+       return x ? __ffs(x) : BITS_PER_LONG;
 }
 
 #endif /* _LINUX_BITOPS_COUNT_ZEROS_H_ */