2024-04-13 06:22:02

by Chin-Chun Chen

[permalink] [raw]
Subject: [PATCH] include/linux/bitops.h: Fix function fns

Modified the function fns to resolve a calculation error by:
1. Reducing n first.
2. Adding 1 at the end to get the correct index.

This commit improves the accuracy and reliability of the code.

Signed-off-by: Chin-Chun Chen <[email protected]>
---
include/linux/bitops.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/include/linux/bitops.h b/include/linux/bitops.h
index 2ba557e067fe..2457610f74eb 100644
--- a/include/linux/bitops.h
+++ b/include/linux/bitops.h
@@ -258,8 +258,8 @@ static inline unsigned long fns(unsigned long word, unsigned int n)

while (word) {
bit = __ffs(word);
- if (n-- == 0)
- return bit;
+ if (--n == 0)
+ return bit + 1;
__clear_bit(bit, &word);
}


base-commit: 8f2c057754b25075aa3da132cd4fd4478cdab854
--
2.40.1



2024-04-13 16:15:49

by Chin-Chun Chen

[permalink] [raw]
Subject: [PATCH v2] include/linux/bitops.h: Fix function fns

Modified the function fns to resolve a calculation error by reducing n first to correctly determine the n-th set bit instead of n+1.

This commit improves the accuracy and reliability of the code.
---
Changes since v1:
* Clarified the commit message.
* Fixed the incorrect operation.

Signed-off-by: Chin-Chun Chen <[email protected]>
---
include/linux/bitops.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/include/linux/bitops.h b/include/linux/bitops.h
index 2ba557e067fe..5842d7d03f19 100644
--- a/include/linux/bitops.h
+++ b/include/linux/bitops.h
@@ -258,7 +258,7 @@ static inline unsigned long fns(unsigned long word, unsigned int n)

while (word) {
bit = __ffs(word);
- if (n-- == 0)
+ if (--n == 0)
return bit;
__clear_bit(bit, &word);
}

base-commit: 8f2c057754b25075aa3da132cd4fd4478cdab854
--
2.40.1


2024-04-13 17:14:20

by Yury Norov

[permalink] [raw]
Subject: Re: [PATCH v2] include/linux/bitops.h: Fix function fns

On Sat, Apr 13, 2024 at 11:56:35PM +0800, Chin-Chun Chen wrote:
> Modified the function fns to resolve a calculation error by reducing n first to correctly determine the n-th set bit instead of n+1.
>
> This commit improves the accuracy and reliability of the code.

No it doesn't. Accuracy and reliability is tested in lib/test_bitmap.c.
Have you tried to run it before sending this patch?

What error did you mean? How does pre-decrement over post-increment fix it?

> ---
> Changes since v1:
> * Clarified the commit message.
> * Fixed the incorrect operation.
>
> Signed-off-by: Chin-Chun Chen <[email protected]>
> ---
> include/linux/bitops.h | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/include/linux/bitops.h b/include/linux/bitops.h
> index 2ba557e067fe..5842d7d03f19 100644
> --- a/include/linux/bitops.h
> +++ b/include/linux/bitops.h
> @@ -258,7 +258,7 @@ static inline unsigned long fns(unsigned long word, unsigned int n)
>
> while (word) {
> bit = __ffs(word);
> - if (n-- == 0)
> + if (--n == 0)
> return bit;
> __clear_bit(bit, &word);
> }
>
> base-commit: 8f2c057754b25075aa3da132cd4fd4478cdab854

What does this 'base-commit' mean?

Chin-Chun, if it's your first attempt to contribute to a public
project, you're very welcome. But you have to be more descriptive
on the error you're facing and trying to fix. The best practice is
to provide a test together with a fix.

Thanks,
Yury

--

It may be just my paranoia after UMN and xz stories, but... I
googled for this person and the email and found that it didn't
appear in public domain before now. Let's see...