Re: [PATCH 1/3] kconfig: remove tristate choice support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sun, Jun 2, 2024 at 9:54 PM Masahiro Yamada <masahiroy@xxxxxxxxxx> wrote:
>
> I previously submitted a fix for a bug in the choice feature [1], where
> I mentioned, "Another (much cleaner) approach would be to remove the
> tristate choice support entirely".
>
> There are more issues in the tristate choice feature. For example, you
> can observe a couple of bugs in the following test code.
>
> [Test Code]
>
>     config MODULES
>             def_bool y
>             modules
>
>     choice
>             prompt "tristate choice"
>             default A
>
>     config A
>             tristate "A"
>
>     config B
>             tristate "B"
>
>     endchoice
>
> [Bug 1] the 'default' property is not correctly processed
>
> 'make alldefconfig' produces:
>
>     CONFIG_MODULES=y
>     # CONFIG_A is not set
>     # CONFIG_B is not set
>
> However, the correct output should be:
>
>     CONFIG_MODULES=y
>     CONFIG_A=y
>     # CONFIG_B is not set
>
> The unit test file, scripts/kconfig/tests/choice/alldef_expected_config,
> is wrong as well.
>
> [Bug 2] choice members never get 'y' with randconfig
>
> For the test code above, the following combinations are possible:
>
>                A    B
>         (1)    y    n
>         (2)    n    y
>         (3)    m    m
>         (4)    m    n
>         (5)    n    m
>         (6)    n    n
>
> 'make randconfig' never produces (1) or (2).
>
> These bugs are fixable, but a more critical problem is the lack of a
> sensible syntax to specify the default for the tristate choice.
> The default for the choice must be one of the choice members, which
> cannot specify any of the patterns (3) through (6) above.
>
> In addition, I have never seen it being used in a useful way.
>
> The following commits removed unnecessary use of tristate choices:
>
>  - df8df5e4bc37 ("usb: get rid of 'choice' for legacy gadget drivers")
>  - bfb57ef0544a ("rapidio: remove choice for enumeration")
>
> This commit removes the tristate choice support entirely, which allows
> me to delete a lot of code, making further refactoring easier.
>
> This includes the revert of commit fa64e5f6a35e ("kconfig/symbol.c:
> handle choice_values that depend on 'm' symbols"). It was suspicious
> because it did not address the root cause but introduced inconsistency
> in visibility between choice members and other symbols.
>
> [1]: https://lore.kernel.org/linux-kbuild/20240427104231.2728905-1-masahiroy@xxxxxxxxxx/T/#m0a1bb6992581462ceca861b409bb33cb8fd7dbae
>
> Signed-off-by: Masahiro Yamada <masahiroy@xxxxxxxxxx>
> ---


I will fix a couple of mistakes.



> diff --git a/scripts/kconfig/gconf.c b/scripts/kconfig/gconf.c
> index baa1c512de3c..217f85ea0910 100644
> --- a/scripts/kconfig/gconf.c
> +++ b/scripts/kconfig/gconf.c
> @@ -1067,10 +1067,7 @@ static gchar **fill_row(struct menu *menu)
>                         row[COL_VALUE] =
>                             g_strdup(menu_get_prompt(def_menu));
>
> -               if (sym_get_type(sym) == S_BOOLEAN) {
> -                       row[COL_BTNVIS] = GINT_TO_POINTER(FALSE);
> -                       return row;
> -               }
> +               return row;



I accidentally dropped

  row[COL_BTNVIS] = GINT_TO_POINTER(FALSE);


I will restore it.

The intention is to drop the if-condition that
is always met.









> @@ -479,7 +461,7 @@ void sym_calc_value(struct symbol *sym)
>         }
>
>         sym->curr = newval;
> -       if (sym_is_choice(sym) && newval.tri == yes)
> +       if (sym_is_choice(sym))
>                 sym->curr.val = sym_calc_choice(sym);
>         sym_validate_range(sym);
>


I will keep "&& newval.tri == yes" here.


When a choice block is hidden by 'depends on',
there is no need to call sym_calc_choice().





-- 
Best Regards
Masahiro Yamada





[Index of Archives]     [Linux&nblp;USB Development]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite Secrets]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux