On Wed, Apr 09, 2025 at 11:39:22AM -0700, Guenter Roeck wrote: > On 4/9/25 11:25, Kuan-Wei Chiu wrote: > > On Wed, Apr 09, 2025 at 12:59:14PM -0400, Yury Norov wrote: > > > On Wed, Apr 09, 2025 at 11:43:44PM +0800, Kuan-Wei Chiu wrote: > > > > Redesign the parity8() helper as parity_odd(), changing its input type > > > > from u8 to u64 to support broader use cases and its return type from > > > > int to bool to clearly reflect the function's binary output. The > > > > function now returns true for odd parity and false for even parity, > > > > making its behavior more intuitive based on the name. > > > > > > > > Also mark the function with __attribute_const__ to enable better > > > > compiler optimization, as the result depends solely on its input and > > > > has no side effects. > > > > > > > > While more efficient implementations may exist, further optimization is > > > > postponed until a use case in performance-critical paths arises. > > > > > > > > Co-developed-by: Yu-Chun Lin <eleanor...@gmail.com> > > > > Signed-off-by: Yu-Chun Lin <eleanor...@gmail.com> > > > > Signed-off-by: Kuan-Wei Chiu <visitor...@gmail.com> > > > > --- > > > > arch/x86/kernel/bootflag.c | 4 ++-- > > > > drivers/hwmon/spd5118.c | 2 +- > > > > drivers/i3c/master/dw-i3c-master.c | 2 +- > > > > drivers/i3c/master/i3c-master-cdns.c | 2 +- > > > > drivers/i3c/master/mipi-i3c-hci/dat_v1.c | 2 +- > > > > include/linux/bitops.h | 19 ++++++++++++------- > > > > 6 files changed, 18 insertions(+), 13 deletions(-) > > > > > > > > diff --git a/arch/x86/kernel/bootflag.c b/arch/x86/kernel/bootflag.c > > > > index 73274d76ce16..86aae4b2bfd5 100644 > > > > --- a/arch/x86/kernel/bootflag.c > > > > +++ b/arch/x86/kernel/bootflag.c > > > > @@ -26,7 +26,7 @@ static void __init sbf_write(u8 v) > > > > unsigned long flags; > > > > if (sbf_port != -1) { > > > > - if (!parity8(v)) > > > > + if (!parity_odd(v)) > > What is the benefit of this change all over the place instead of > adding parity_odd() as new API and keeping the old one (just letting > it call the new API) ? > > A simple > > static inline int parity8(u8 val) > { > return parity_odd(val); > } > > would have done the trick and be much less invasive. > Yury has previously mentioned that adding multiple fixed-type parity functions increases his maintenance burden. IIUC, he prefers having a single interface in bitops.h rather than multiple ones.
He were reluctant to add three more functions like: static inline bool parity16(u16 val) { return parity8(val ^ (val >> 8)); } static inline bool parity32(u32 val) { return parity16(val ^ (val >> 16)); } static inline bool parity64(u64 val) { return parity32(val ^ (val >> 32)); } But instead, we ended up with: static inline bool parity(u64 val) { val ^= val >> 32; val ^= val >> 16; val ^= val >> 8; val ^= val >> 4; return (0x6996 >> (val & 0xf)) & 1; } static inline bool parity8(u8 val) { return parity_odd(val); } But in the end, we introduced both parity(u64) and parity8(u8), which, IMHO, might be even more confusing than having consistent fixed-type helpers. Regards, Kuan-Wei