Re: [PATCH v4 33/40] sh: mach-x3proto: optimize ilsel_enable()

John Paul Adrian Glaubitz <[email protected]>
Newsgroups gmane.linux.ports.sh.devel,gmane.linux.kernel
Message-ID <4bd2e538d70d8acbdc8da7b0fdb05b93e0614e43.camel@physik.fu-berlin.de>
Hi Yury,

thanks for your patch!

On Thu, 2024-06-20 at 10:56 -0700, Yury Norov wrote:
> Simplify ilsel_enable() by using find_and_set_bit().
> 
> Geert also pointed the bug in the old implementation:
> 
> 	I don't think the old code worked as intended: the first time
> 	no free bit is found, bit would have been ILSEL_LEVELS, and
> 	test_and_set_bit() would have returned false, thus terminating
> 	the loop, and continuing with an out-of-range bit value? Hence
> 	to work correctly, bit ILSEL_LEVELS of ilsel_level_map should
> 	have been initialized to one?  Or am I missing something?
> 
> The new code does not have that issue.
> 
> CC: John Paul Adrian Glaubitz <[email protected]>
> Signed-off-by: Yury Norov <[email protected]>
> Reviewed-by: Geert Uytterhoeven <[email protected]>
> ---
>  arch/sh/boards/mach-x3proto/ilsel.c | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/sh/boards/mach-x3proto/ilsel.c b/arch/sh/boards/mach-x3proto/ilsel.c
> index f0d5eb41521a..35b585e154f0 100644
> --- a/arch/sh/boards/mach-x3proto/ilsel.c
> +++ b/arch/sh/boards/mach-x3proto/ilsel.c
> @@ -8,6 +8,7 @@
>   */
>  #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
>  
> +#include <linux/find_atomic.h>
>  #include <linux/init.h>
>  #include <linux/kernel.h>
>  #include <linux/module.h>
> @@ -99,8 +100,8 @@ int ilsel_enable(ilsel_source_t set)
>  	}
>  
>  	do {
> -		bit = find_first_zero_bit(&ilsel_level_map, ILSEL_LEVELS);
> -	} while (test_and_set_bit(bit, &ilsel_level_map));
> +		bit = find_and_set_bit(&ilsel_level_map, ILSEL_LEVELS);
> +	} while (bit >= ILSEL_LEVELS);
>  
>  	__ilsel_enable(set, bit);

I will need to take a closer look at the whole code in ilsel_enable() to understand what's
happening here. If Geert's explanation is correct, it sounds more like you're fixing a bug
and saying you're optimizing the function in the patch subject would sound more like an
euphemism.

Also, I think we should add a Fixes tag if possible in case your patch fixes an actual bug.

I will have a closer look over the weekend.

Adrian

-- 
 .''`.  John Paul Adrian Glaubitz
: :' :  Debian Developer
`. `'   Physicist
  `-    GPG: 62FF 8A75 84E0 2956 9546  0006 7426 3B37 F5B5 F913
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.