diff mbox

[v4] kconfig/symbol.c: handle choice_values that depend on 'm' symbols

Message ID ghk3gkl32u.fsf@lena.gouders.net (mailing list archive)
State New, archived
Headers show

Commit Message

Dirk Gouders Nov. 7, 2013, 2:05 p.m. UTC
If choices consist of choice_values that depend on symbols set to 'm',
those choice_values are not set to 'n' if the choice is changed from
'm' to 'y' (in which case only one active choice_value is allowed).
Those values are also written to the config file causing modules to be
built when they should not.

The following config can be used to reproduce and examine the problem;
with the frontend of your choice set "Choice 0" and "Choice 1" to 'm',
then set "Tristate Choice" to 'y' and save the configuration:

config modules
	boolean modules
	default y
	option modules

config dependency
	tristate "Dependency"
	default m

choice
	prompt "Tristate Choice"
	default choice0

config choice0
	tristate "Choice 0"

config choice1
	tristate "Choice 1"
	depends on dependency

endchoice

This patch sets choice_values' visibility that depend on symbols set
to 'm' to 'n' if the corresponding choice is set to 'y'.  This makes
them disappear from the choice list and will also cause the
choice_values' value set to 'n' in sym_calc_value() and as a result
they are written as "not set" to the resulting .config file.

Reported-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Dirk Gouders <dirk@gouders.net>
Tested-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
---
 scripts/kconfig/symbol.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

Comments

Yann E. MORIN Nov. 18, 2013, 6:08 p.m. UTC | #1
Dirk, All,

On 2013-11-07 15:05 +0100, Dirk Gouders spake thusly:
> If choices consist of choice_values that depend on symbols set to 'm',
> those choice_values are not set to 'n' if the choice is changed from
> 'm' to 'y' (in which case only one active choice_value is allowed).
> Those values are also written to the config file causing modules to be
> built when they should not.
> 
> The following config can be used to reproduce and examine the problem;
> with the frontend of your choice set "Choice 0" and "Choice 1" to 'm',
> then set "Tristate Choice" to 'y' and save the configuration:
> 
> config modules
> 	boolean modules
> 	default y
> 	option modules
> 
> config dependency
> 	tristate "Dependency"
> 	default m
> 
> choice
> 	prompt "Tristate Choice"
> 	default choice0
> 
> config choice0
> 	tristate "Choice 0"
> 
> config choice1
> 	tristate "Choice 1"
> 	depends on dependency
> 
> endchoice
> 
> This patch sets choice_values' visibility that depend on symbols set
> to 'm' to 'n' if the corresponding choice is set to 'y'.  This makes
> them disappear from the choice list and will also cause the
> choice_values' value set to 'n' in sym_calc_value() and as a result
> they are written as "not set" to the resulting .config file.
> 
> Reported-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
> Signed-off-by: Dirk Gouders <dirk@gouders.net>
> Tested-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>

Acked-by: "Yann E. MORIN" <yann.morin.1998@free.fr>

It will be in my tree soon. Thanks!

Regards,
Yann E. MORIN.

> ---
>  scripts/kconfig/symbol.c | 11 +++++++++++
>  1 file changed, 11 insertions(+)
> 
> diff --git a/scripts/kconfig/symbol.c b/scripts/kconfig/symbol.c
> index c9a6775..06d96c9 100644
> --- a/scripts/kconfig/symbol.c
> +++ b/scripts/kconfig/symbol.c
> @@ -189,12 +189,23 @@ static void sym_validate_range(struct symbol *sym)
>  static void sym_calc_visibility(struct symbol *sym)
>  {
>  	struct property *prop;
> +	struct symbol *choice_sym = NULL;
>  	tristate tri;
>  
>  	/* any prompt visible? */
>  	tri = no;
> +
> +	if (sym_is_choice_value(sym))
> +		choice_sym = prop_get_symbol(sym_get_choice_prop(sym));
> +
>  	for_all_prompts(sym, prop) {
>  		prop->visible.tri = expr_calc_value(prop->visible.expr);
> +		/*
> +		 * choice_values with visibility 'mod' are not visible if the
> +		 * corresponding choice's value is 'yes'.
> +		 */
> +		if (prop->visible.tri == mod && (choice_sym && choice_sym->curr.tri == yes))
> +			prop->visible.tri = no;
>  		tri = EXPR_OR(tri, prop->visible.tri);
>  	}
>  	if (tri == mod && (sym->type != S_TRISTATE || modules_val == no))
> -- 
> 1.8.4
>
Sebastian Andrzej Siewior Dec. 20, 2013, 12:46 p.m. UTC | #2
On 11/18/2013 07:08 PM, Yann E. MORIN wrote:
> Dirk, All,

Hi Yann,

> Acked-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
> 
> It will be in my tree soon. Thanks!

I've been looking at gitorious.org:linux-kconfig/linux-kconfig.git into
the yem/kconfig-for-next and kconfig-rc-fixes branch and haven't found
it. Didn't you push your tree out or do you use another git tree for
that?

Sebastian

--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Bin Liu Aug. 13, 2014, 3:35 p.m. UTC | #3
All,

On Mon, Nov 18, 2013 at 12:08 PM, Yann E. MORIN <yann.morin.1998@free.fr> wrote:
> Dirk, All,
>
> On 2013-11-07 15:05 +0100, Dirk Gouders spake thusly:
>> If choices consist of choice_values that depend on symbols set to 'm',
>> those choice_values are not set to 'n' if the choice is changed from
>> 'm' to 'y' (in which case only one active choice_value is allowed).
>> Those values are also written to the config file causing modules to be
>> built when they should not.
>>
>> The following config can be used to reproduce and examine the problem;
>> with the frontend of your choice set "Choice 0" and "Choice 1" to 'm',
>> then set "Tristate Choice" to 'y' and save the configuration:
>>
>> config modules
>>       boolean modules
>>       default y
>>       option modules
>>
>> config dependency
>>       tristate "Dependency"
>>       default m
>>
>> choice
>>       prompt "Tristate Choice"
>>       default choice0
>>
>> config choice0
>>       tristate "Choice 0"
>>
>> config choice1
>>       tristate "Choice 1"
>>       depends on dependency
>>
>> endchoice
>>
>> This patch sets choice_values' visibility that depend on symbols set
>> to 'm' to 'n' if the corresponding choice is set to 'y'.  This makes
>> them disappear from the choice list and will also cause the
>> choice_values' value set to 'n' in sym_calc_value() and as a result
>> they are written as "not set" to the resulting .config file.
>>
>> Reported-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
>> Signed-off-by: Dirk Gouders <dirk@gouders.net>
>> Tested-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
>
> Acked-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
>
> It will be in my tree soon. Thanks!

I don't see this patch in 3.16 but 3.16 does not have the issue any
more. Anyone has an idea how the issue got fixed? I am trying to find
the right patch to backport.

Thanks,
-Bin.

>
> Regards,
> Yann E. MORIN.
>
>> ---
>>  scripts/kconfig/symbol.c | 11 +++++++++++
>>  1 file changed, 11 insertions(+)
>>
>> diff --git a/scripts/kconfig/symbol.c b/scripts/kconfig/symbol.c
>> index c9a6775..06d96c9 100644
>> --- a/scripts/kconfig/symbol.c
>> +++ b/scripts/kconfig/symbol.c
>> @@ -189,12 +189,23 @@ static void sym_validate_range(struct symbol *sym)
>>  static void sym_calc_visibility(struct symbol *sym)
>>  {
>>       struct property *prop;
>> +     struct symbol *choice_sym = NULL;
>>       tristate tri;
>>
>>       /* any prompt visible? */
>>       tri = no;
>> +
>> +     if (sym_is_choice_value(sym))
>> +             choice_sym = prop_get_symbol(sym_get_choice_prop(sym));
>> +
>>       for_all_prompts(sym, prop) {
>>               prop->visible.tri = expr_calc_value(prop->visible.expr);
>> +             /*
>> +              * choice_values with visibility 'mod' are not visible if the
>> +              * corresponding choice's value is 'yes'.
>> +              */
>> +             if (prop->visible.tri == mod && (choice_sym && choice_sym->curr.tri == yes))
>> +                     prop->visible.tri = no;
>>               tri = EXPR_OR(tri, prop->visible.tri);
>>       }
>>       if (tri == mod && (sym->type != S_TRISTATE || modules_val == no))
>> --
>> 1.8.4
>>
>
> --
> .-----------------.--------------------.------------------.--------------------.
> |  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
> | +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
> | +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
> | http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
> '------------------------------^-------^------------------^--------------------'
> --
> To unsubscribe from this list: send the line "unsubscribe linux-usb" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Dirk Gouders Aug. 14, 2014, 6:52 a.m. UTC | #4
Bin Liu <binmlist@gmail.com> writes:

> All,
>
> On Mon, Nov 18, 2013 at 12:08 PM, Yann E. MORIN <yann.morin.1998@free.fr> wrote:
>> Dirk, All,
>>
>> On 2013-11-07 15:05 +0100, Dirk Gouders spake thusly:
>>> If choices consist of choice_values that depend on symbols set to 'm',
>>> those choice_values are not set to 'n' if the choice is changed from
>>> 'm' to 'y' (in which case only one active choice_value is allowed).
>>> Those values are also written to the config file causing modules to be
>>> built when they should not.
>>>
>>> The following config can be used to reproduce and examine the problem;
>>> with the frontend of your choice set "Choice 0" and "Choice 1" to 'm',
>>> then set "Tristate Choice" to 'y' and save the configuration:
>>>
>>> config modules
>>>       boolean modules
>>>       default y
>>>       option modules
>>>
>>> config dependency
>>>       tristate "Dependency"
>>>       default m
>>>
>>> choice
>>>       prompt "Tristate Choice"
>>>       default choice0
>>>
>>> config choice0
>>>       tristate "Choice 0"
>>>
>>> config choice1
>>>       tristate "Choice 1"
>>>       depends on dependency
>>>
>>> endchoice
>>>
>>> This patch sets choice_values' visibility that depend on symbols set
>>> to 'm' to 'n' if the corresponding choice is set to 'y'.  This makes
>>> them disappear from the choice list and will also cause the
>>> choice_values' value set to 'n' in sym_calc_value() and as a result
>>> they are written as "not set" to the resulting .config file.
>>>
>>> Reported-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
>>> Signed-off-by: Dirk Gouders <dirk@gouders.net>
>>> Tested-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
>>
>> Acked-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
>>
>> It will be in my tree soon. Thanks!
>
> I don't see this patch in 3.16 but 3.16 does not have the issue any
> more. Anyone has an idea how the issue got fixed? I am trying to find
> the right patch to backport.

With the above sample kconfig I still see the issue.  How did you
notice the issue got fixed?

Dirk

>
> Thanks,
> -Bin.
>
>>
>> Regards,
>> Yann E. MORIN.
>>
>>> ---
>>>  scripts/kconfig/symbol.c | 11 +++++++++++
>>>  1 file changed, 11 insertions(+)
>>>
>>> diff --git a/scripts/kconfig/symbol.c b/scripts/kconfig/symbol.c
>>> index c9a6775..06d96c9 100644
>>> --- a/scripts/kconfig/symbol.c
>>> +++ b/scripts/kconfig/symbol.c
>>> @@ -189,12 +189,23 @@ static void sym_validate_range(struct symbol *sym)
>>>  static void sym_calc_visibility(struct symbol *sym)
>>>  {
>>>       struct property *prop;
>>> +     struct symbol *choice_sym = NULL;
>>>       tristate tri;
>>>
>>>       /* any prompt visible? */
>>>       tri = no;
>>> +
>>> +     if (sym_is_choice_value(sym))
>>> +             choice_sym = prop_get_symbol(sym_get_choice_prop(sym));
>>> +
>>>       for_all_prompts(sym, prop) {
>>>               prop->visible.tri = expr_calc_value(prop->visible.expr);
>>> +             /*
>>> +              * choice_values with visibility 'mod' are not visible if the
>>> +              * corresponding choice's value is 'yes'.
>>> +              */
>>> +             if (prop->visible.tri == mod && (choice_sym && choice_sym->curr.tri == yes))
>>> +                     prop->visible.tri = no;
>>>               tri = EXPR_OR(tri, prop->visible.tri);
>>>       }
>>>       if (tri == mod && (sym->type != S_TRISTATE || modules_val == no))
>>> --
>>> 1.8.4
>>>
>>
>> --
>> .-----------------.--------------------.------------------.--------------------.
>> |  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
>> | +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
>> | +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
>> | http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
>> '------------------------------^-------^------------------^--------------------'
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-usb" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Bin Liu Aug. 14, 2014, 1:54 p.m. UTC | #5
Dirk,

On Thu, Aug 14, 2014 at 1:52 AM, Dirk Gouders <dirk@gouders.net> wrote:
> Bin Liu <binmlist@gmail.com> writes:
>
>> All,
>>
>> On Mon, Nov 18, 2013 at 12:08 PM, Yann E. MORIN <yann.morin.1998@free.fr> wrote:
>>> Dirk, All,
>>>
>>> On 2013-11-07 15:05 +0100, Dirk Gouders spake thusly:
>>>> If choices consist of choice_values that depend on symbols set to 'm',
>>>> those choice_values are not set to 'n' if the choice is changed from
>>>> 'm' to 'y' (in which case only one active choice_value is allowed).
>>>> Those values are also written to the config file causing modules to be
>>>> built when they should not.
>>>>
>>>> The following config can be used to reproduce and examine the problem;
>>>> with the frontend of your choice set "Choice 0" and "Choice 1" to 'm',
>>>> then set "Tristate Choice" to 'y' and save the configuration:
>>>>
>>>> config modules
>>>>       boolean modules
>>>>       default y
>>>>       option modules
>>>>
>>>> config dependency
>>>>       tristate "Dependency"
>>>>       default m
>>>>
>>>> choice
>>>>       prompt "Tristate Choice"
>>>>       default choice0
>>>>
>>>> config choice0
>>>>       tristate "Choice 0"
>>>>
>>>> config choice1
>>>>       tristate "Choice 1"
>>>>       depends on dependency
>>>>
>>>> endchoice
>>>>
>>>> This patch sets choice_values' visibility that depend on symbols set
>>>> to 'm' to 'n' if the corresponding choice is set to 'y'.  This makes
>>>> them disappear from the choice list and will also cause the
>>>> choice_values' value set to 'n' in sym_calc_value() and as a result
>>>> they are written as "not set" to the resulting .config file.
>>>>
>>>> Reported-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
>>>> Signed-off-by: Dirk Gouders <dirk@gouders.net>
>>>> Tested-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
>>>
>>> Acked-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
>>>
>>> It will be in my tree soon. Thanks!
>>
>> I don't see this patch in 3.16 but 3.16 does not have the issue any
>> more. Anyone has an idea how the issue got fixed? I am trying to find
>> the right patch to backport.
>
> With the above sample kconfig I still see the issue.  How did you
> notice the issue got fixed?

I did not pay much attention on the above sample kconfig, but just
focused on the USB gadget driver kconfig issue initially reported by
Sebastian. I saw the issue exists in 3.14, but does not in 3.16,
unless I messed up with my test. I will test 3.16 again some time next
week.

Regards,
-Bin.

>
> Dirk
>
>>
>> Thanks,
>> -Bin.
>>
>>>
>>> Regards,
>>> Yann E. MORIN.
>>>
>>>> ---
>>>>  scripts/kconfig/symbol.c | 11 +++++++++++
>>>>  1 file changed, 11 insertions(+)
>>>>
>>>> diff --git a/scripts/kconfig/symbol.c b/scripts/kconfig/symbol.c
>>>> index c9a6775..06d96c9 100644
>>>> --- a/scripts/kconfig/symbol.c
>>>> +++ b/scripts/kconfig/symbol.c
>>>> @@ -189,12 +189,23 @@ static void sym_validate_range(struct symbol *sym)
>>>>  static void sym_calc_visibility(struct symbol *sym)
>>>>  {
>>>>       struct property *prop;
>>>> +     struct symbol *choice_sym = NULL;
>>>>       tristate tri;
>>>>
>>>>       /* any prompt visible? */
>>>>       tri = no;
>>>> +
>>>> +     if (sym_is_choice_value(sym))
>>>> +             choice_sym = prop_get_symbol(sym_get_choice_prop(sym));
>>>> +
>>>>       for_all_prompts(sym, prop) {
>>>>               prop->visible.tri = expr_calc_value(prop->visible.expr);
>>>> +             /*
>>>> +              * choice_values with visibility 'mod' are not visible if the
>>>> +              * corresponding choice's value is 'yes'.
>>>> +              */
>>>> +             if (prop->visible.tri == mod && (choice_sym && choice_sym->curr.tri == yes))
>>>> +                     prop->visible.tri = no;
>>>>               tri = EXPR_OR(tri, prop->visible.tri);
>>>>       }
>>>>       if (tri == mod && (sym->type != S_TRISTATE || modules_val == no))
>>>> --
>>>> 1.8.4
>>>>
>>>
>>> --
>>> .-----------------.--------------------.------------------.--------------------.
>>> |  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
>>> | +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
>>> | +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
>>> | http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
>>> '------------------------------^-------^------------------^--------------------'
>>> --
>>> To unsubscribe from this list: send the line "unsubscribe linux-usb" in
>>> the body of a message to majordomo@vger.kernel.org
>>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Dirk Gouders Aug. 15, 2014, 7:37 a.m. UTC | #6
Bin Liu <binmlist@gmail.com> writes:

> Dirk,
>
> On Thu, Aug 14, 2014 at 1:52 AM, Dirk Gouders <dirk@gouders.net> wrote:
>> Bin Liu <binmlist@gmail.com> writes:
>>
>>> All,
>>>
>>> On Mon, Nov 18, 2013 at 12:08 PM, Yann E. MORIN <yann.morin.1998@free.fr> wrote:
>>>> Dirk, All,
>>>>
>>>> On 2013-11-07 15:05 +0100, Dirk Gouders spake thusly:
>>>>> If choices consist of choice_values that depend on symbols set to 'm',
>>>>> those choice_values are not set to 'n' if the choice is changed from
>>>>> 'm' to 'y' (in which case only one active choice_value is allowed).
>>>>> Those values are also written to the config file causing modules to be
>>>>> built when they should not.
>>>>>
>>>>> The following config can be used to reproduce and examine the problem;
>>>>> with the frontend of your choice set "Choice 0" and "Choice 1" to 'm',
>>>>> then set "Tristate Choice" to 'y' and save the configuration:
>>>>>
>>>>> config modules
>>>>>       boolean modules
>>>>>       default y
>>>>>       option modules
>>>>>
>>>>> config dependency
>>>>>       tristate "Dependency"
>>>>>       default m
>>>>>
>>>>> choice
>>>>>       prompt "Tristate Choice"
>>>>>       default choice0
>>>>>
>>>>> config choice0
>>>>>       tristate "Choice 0"
>>>>>
>>>>> config choice1
>>>>>       tristate "Choice 1"
>>>>>       depends on dependency
>>>>>
>>>>> endchoice
>>>>>
>>>>> This patch sets choice_values' visibility that depend on symbols set
>>>>> to 'm' to 'n' if the corresponding choice is set to 'y'.  This makes
>>>>> them disappear from the choice list and will also cause the
>>>>> choice_values' value set to 'n' in sym_calc_value() and as a result
>>>>> they are written as "not set" to the resulting .config file.
>>>>>
>>>>> Reported-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
>>>>> Signed-off-by: Dirk Gouders <dirk@gouders.net>
>>>>> Tested-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
>>>>
>>>> Acked-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
>>>>
>>>> It will be in my tree soon. Thanks!
>>>
>>> I don't see this patch in 3.16 but 3.16 does not have the issue any
>>> more. Anyone has an idea how the issue got fixed? I am trying to find
>>> the right patch to backport.
>>
>> With the above sample kconfig I still see the issue.  How did you
>> notice the issue got fixed?
>
> I did not pay much attention on the above sample kconfig, but just
> focused on the USB gadget driver kconfig issue initially reported by
> Sebastian. I saw the issue exists in 3.14, but does not in 3.16,
> unless I messed up with my test. I will test 3.16 again some time next
> week.

Hi Bin,

I now also re-tested the initially reported steps to reproduce the
issue:

------------------------------------------------------------------------
> in USB gadget menu (that is Device Drivers ---> USB support ---> USB
> Gadget Support --->  USB Gadget Drivers) I can create a configuration
> which is "lost". Here is how to reproduce it:
> 
> - first config two gadgets as M:
>  <M>   USB Gadget Drivers
>  <M>     Audio Gadget
>  <M>     Ethernet Gadget
>  <M>     MIDI Gadget
> 
>  save config & leave
> 
> - now start menu config again and go to the same menu, now select
>   built-in:
>   <*>   USB Gadget Drivers (Ethernet Gadget
>   the ethernet gadget is chosen automatically because we can have only
>   one gadget selected.
>   save config & leave
> 
> - step three, go back to the menu and you will see that everything is
>   as it was (the <*> is ignored).
------------------------------------------------------------------------

Here, I still see the problem (I was wondering if the issue has been
solved/gone by a kconfig-file modification).

Perhaps, Sebastian could check if the problem, he reported still exists...

Dirk

>
> Regards,
> -Bin.
>
>>
>> Dirk
>>
>>>
>>> Thanks,
>>> -Bin.
>>>
>>>>
>>>> Regards,
>>>> Yann E. MORIN.
>>>>
>>>>> ---
>>>>>  scripts/kconfig/symbol.c | 11 +++++++++++
>>>>>  1 file changed, 11 insertions(+)
>>>>>
>>>>> diff --git a/scripts/kconfig/symbol.c b/scripts/kconfig/symbol.c
>>>>> index c9a6775..06d96c9 100644
>>>>> --- a/scripts/kconfig/symbol.c
>>>>> +++ b/scripts/kconfig/symbol.c
>>>>> @@ -189,12 +189,23 @@ static void sym_validate_range(struct symbol *sym)
>>>>>  static void sym_calc_visibility(struct symbol *sym)
>>>>>  {
>>>>>       struct property *prop;
>>>>> +     struct symbol *choice_sym = NULL;
>>>>>       tristate tri;
>>>>>
>>>>>       /* any prompt visible? */
>>>>>       tri = no;
>>>>> +
>>>>> +     if (sym_is_choice_value(sym))
>>>>> +             choice_sym = prop_get_symbol(sym_get_choice_prop(sym));
>>>>> +
>>>>>       for_all_prompts(sym, prop) {
>>>>>               prop->visible.tri = expr_calc_value(prop->visible.expr);
>>>>> +             /*
>>>>> +              * choice_values with visibility 'mod' are not visible if the
>>>>> +              * corresponding choice's value is 'yes'.
>>>>> +              */
>>>>> +             if (prop->visible.tri == mod && (choice_sym && choice_sym->curr.tri == yes))
>>>>> +                     prop->visible.tri = no;
>>>>>               tri = EXPR_OR(tri, prop->visible.tri);
>>>>>       }
>>>>>       if (tri == mod && (sym->type != S_TRISTATE || modules_val == no))
>>>>> --
>>>>> 1.8.4
>>>>>
>>>>
>>>> --
>>>> .-----------------.--------------------.------------------.--------------------.
>>>> |  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
>>>> | +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
>>>> | +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
>>>> | http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
>>>> '------------------------------^-------^------------------^--------------------'
>>>> --
>>>> To unsubscribe from this list: send the line "unsubscribe linux-usb" in
>>>> the body of a message to majordomo@vger.kernel.org
>>>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Sebastian Andrzej Siewior Aug. 15, 2014, 7:43 a.m. UTC | #7
On 08/15/2014 09:37 AM, Dirk Gouders wrote:
> Here, I still see the problem (I was wondering if the issue has been
> solved/gone by a kconfig-file modification).
> 
> Perhaps, Sebastian could check if the problem, he reported still exists...

I will re-test tonight and report. I don't see the patch in this thread
(and I remeber that it fixed the issue) so I doubt that anything will
change but lets see.

> 
> Dirk

Sebastian
--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Bin Liu March 30, 2016, 10:08 p.m. UTC | #8
Hi,

On Fri, Aug 15, 2014 at 2:37 AM, Dirk Gouders <dirk@gouders.net> wrote:
> Bin Liu <binmlist@gmail.com> writes:
>
>> Dirk,
>>
>> On Thu, Aug 14, 2014 at 1:52 AM, Dirk Gouders <dirk@gouders.net> wrote:
>>> Bin Liu <binmlist@gmail.com> writes:
>>>
>>>> All,
>>>>
>>>> On Mon, Nov 18, 2013 at 12:08 PM, Yann E. MORIN <yann.morin.1998@free.fr> wrote:
>>>>> Dirk, All,
>>>>>
>>>>> On 2013-11-07 15:05 +0100, Dirk Gouders spake thusly:
>>>>>> If choices consist of choice_values that depend on symbols set to 'm',
>>>>>> those choice_values are not set to 'n' if the choice is changed from
>>>>>> 'm' to 'y' (in which case only one active choice_value is allowed).
>>>>>> Those values are also written to the config file causing modules to be
>>>>>> built when they should not.
>>>>>>
>>>>>> The following config can be used to reproduce and examine the problem;
>>>>>> with the frontend of your choice set "Choice 0" and "Choice 1" to 'm',
>>>>>> then set "Tristate Choice" to 'y' and save the configuration:
>>>>>>
>>>>>> config modules
>>>>>>       boolean modules
>>>>>>       default y
>>>>>>       option modules
>>>>>>
>>>>>> config dependency
>>>>>>       tristate "Dependency"
>>>>>>       default m
>>>>>>
>>>>>> choice
>>>>>>       prompt "Tristate Choice"
>>>>>>       default choice0
>>>>>>
>>>>>> config choice0
>>>>>>       tristate "Choice 0"
>>>>>>
>>>>>> config choice1
>>>>>>       tristate "Choice 1"
>>>>>>       depends on dependency
>>>>>>
>>>>>> endchoice
>>>>>>
>>>>>> This patch sets choice_values' visibility that depend on symbols set
>>>>>> to 'm' to 'n' if the corresponding choice is set to 'y'.  This makes
>>>>>> them disappear from the choice list and will also cause the
>>>>>> choice_values' value set to 'n' in sym_calc_value() and as a result
>>>>>> they are written as "not set" to the resulting .config file.
>>>>>>
>>>>>> Reported-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
>>>>>> Signed-off-by: Dirk Gouders <dirk@gouders.net>
>>>>>> Tested-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
>>>>>
>>>>> Acked-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
>>>>>
>>>>> It will be in my tree soon. Thanks!
>>>>
>>>> I don't see this patch in 3.16 but 3.16 does not have the issue any
>>>> more. Anyone has an idea how the issue got fixed? I am trying to find
>>>> the right patch to backport.
>>>
>>> With the above sample kconfig I still see the issue.  How did you
>>> notice the issue got fixed?
>>
>> I did not pay much attention on the above sample kconfig, but just
>> focused on the USB gadget driver kconfig issue initially reported by
>> Sebastian. I saw the issue exists in 3.14, but does not in 3.16,
>> unless I messed up with my test. I will test 3.16 again some time next
>> week.
>
> Hi Bin,
>
> I now also re-tested the initially reported steps to reproduce the
> issue:
>
> ------------------------------------------------------------------------
>> in USB gadget menu (that is Device Drivers ---> USB support ---> USB
>> Gadget Support --->  USB Gadget Drivers) I can create a configuration
>> which is "lost". Here is how to reproduce it:
>>
>> - first config two gadgets as M:
>>  <M>   USB Gadget Drivers
>>  <M>     Audio Gadget
>>  <M>     Ethernet Gadget
>>  <M>     MIDI Gadget
>>
>>  save config & leave
>>
>> - now start menu config again and go to the same menu, now select
>>   built-in:
>>   <*>   USB Gadget Drivers (Ethernet Gadget
>>   the ethernet gadget is chosen automatically because we can have only
>>   one gadget selected.
>>   save config & leave
>>
>> - step three, go back to the menu and you will see that everything is
>>   as it was (the <*> is ignored).
> ------------------------------------------------------------------------
>
> Here, I still see the problem (I was wondering if the issue has been
> solved/gone by a kconfig-file modification).

This issue was gone since 3.16, but came back again due to commit
1fd6d08 ARM: omap2plus_defconfig: Enable n900 modem as loadable modules.

Regards,
-Bin.
--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Ruslan Bilovol March 30, 2016, 10:16 p.m. UTC | #9
Hi,

On Thu, Mar 31, 2016 at 1:08 AM, Bin Liu <binmlist@gmail.com> wrote:
> Hi,
>
> On Fri, Aug 15, 2014 at 2:37 AM, Dirk Gouders <dirk@gouders.net> wrote:
>> Bin Liu <binmlist@gmail.com> writes:
>>
>>> Dirk,
>>>
>>> On Thu, Aug 14, 2014 at 1:52 AM, Dirk Gouders <dirk@gouders.net> wrote:
>>>> Bin Liu <binmlist@gmail.com> writes:
>>>>
>>>>> All,
>>>>>
>>>>> On Mon, Nov 18, 2013 at 12:08 PM, Yann E. MORIN <yann.morin.1998@free.fr> wrote:
>>>>>> Dirk, All,
>>>>>>
>>>>>> On 2013-11-07 15:05 +0100, Dirk Gouders spake thusly:
>>>>>>> If choices consist of choice_values that depend on symbols set to 'm',
>>>>>>> those choice_values are not set to 'n' if the choice is changed from
>>>>>>> 'm' to 'y' (in which case only one active choice_value is allowed).
>>>>>>> Those values are also written to the config file causing modules to be
>>>>>>> built when they should not.
>>>>>>>
>>>>>>> The following config can be used to reproduce and examine the problem;
>>>>>>> with the frontend of your choice set "Choice 0" and "Choice 1" to 'm',
>>>>>>> then set "Tristate Choice" to 'y' and save the configuration:
>>>>>>>
>>>>>>> config modules
>>>>>>>       boolean modules
>>>>>>>       default y
>>>>>>>       option modules
>>>>>>>
>>>>>>> config dependency
>>>>>>>       tristate "Dependency"
>>>>>>>       default m
>>>>>>>
>>>>>>> choice
>>>>>>>       prompt "Tristate Choice"
>>>>>>>       default choice0
>>>>>>>
>>>>>>> config choice0
>>>>>>>       tristate "Choice 0"
>>>>>>>
>>>>>>> config choice1
>>>>>>>       tristate "Choice 1"
>>>>>>>       depends on dependency
>>>>>>>
>>>>>>> endchoice
>>>>>>>
>>>>>>> This patch sets choice_values' visibility that depend on symbols set
>>>>>>> to 'm' to 'n' if the corresponding choice is set to 'y'.  This makes
>>>>>>> them disappear from the choice list and will also cause the
>>>>>>> choice_values' value set to 'n' in sym_calc_value() and as a result
>>>>>>> they are written as "not set" to the resulting .config file.
>>>>>>>
>>>>>>> Reported-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
>>>>>>> Signed-off-by: Dirk Gouders <dirk@gouders.net>
>>>>>>> Tested-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
>>>>>>
>>>>>> Acked-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
>>>>>>
>>>>>> It will be in my tree soon. Thanks!
>>>>>
>>>>> I don't see this patch in 3.16 but 3.16 does not have the issue any
>>>>> more. Anyone has an idea how the issue got fixed? I am trying to find
>>>>> the right patch to backport.
>>>>
>>>> With the above sample kconfig I still see the issue.  How did you
>>>> notice the issue got fixed?
>>>
>>> I did not pay much attention on the above sample kconfig, but just
>>> focused on the USB gadget driver kconfig issue initially reported by
>>> Sebastian. I saw the issue exists in 3.14, but does not in 3.16,
>>> unless I messed up with my test. I will test 3.16 again some time next
>>> week.
>>
>> Hi Bin,
>>
>> I now also re-tested the initially reported steps to reproduce the
>> issue:
>>
>> ------------------------------------------------------------------------
>>> in USB gadget menu (that is Device Drivers ---> USB support ---> USB
>>> Gadget Support --->  USB Gadget Drivers) I can create a configuration
>>> which is "lost". Here is how to reproduce it:
>>>
>>> - first config two gadgets as M:
>>>  <M>   USB Gadget Drivers
>>>  <M>     Audio Gadget
>>>  <M>     Ethernet Gadget
>>>  <M>     MIDI Gadget
>>>
>>>  save config & leave
>>>
>>> - now start menu config again and go to the same menu, now select
>>>   built-in:
>>>   <*>   USB Gadget Drivers (Ethernet Gadget
>>>   the ethernet gadget is chosen automatically because we can have only
>>>   one gadget selected.
>>>   save config & leave
>>>
>>> - step three, go back to the menu and you will see that everything is
>>>   as it was (the <*> is ignored).
>> ------------------------------------------------------------------------
>>
>> Here, I still see the problem (I was wondering if the issue has been
>> solved/gone by a kconfig-file modification).
>
> This issue was gone since 3.16, but came back again due to commit
> 1fd6d08 ARM: omap2plus_defconfig: Enable n900 modem as loadable modules.
>

I can confirm this issue too, faced it on v4.5 (but didn't try v4.6-rc1 yet)
Roger Quadros March 31, 2016, 7:13 a.m. UTC | #10
On 31/03/16 01:16, Ruslan Bilovol wrote:
> Hi,
> 
> On Thu, Mar 31, 2016 at 1:08 AM, Bin Liu <binmlist@gmail.com> wrote:
>> Hi,
>>
>> On Fri, Aug 15, 2014 at 2:37 AM, Dirk Gouders <dirk@gouders.net> wrote:
>>> Bin Liu <binmlist@gmail.com> writes:
>>>
>>>> Dirk,
>>>>
>>>> On Thu, Aug 14, 2014 at 1:52 AM, Dirk Gouders <dirk@gouders.net> wrote:
>>>>> Bin Liu <binmlist@gmail.com> writes:
>>>>>
>>>>>> All,
>>>>>>
>>>>>> On Mon, Nov 18, 2013 at 12:08 PM, Yann E. MORIN <yann.morin.1998@free.fr> wrote:
>>>>>>> Dirk, All,
>>>>>>>
>>>>>>> On 2013-11-07 15:05 +0100, Dirk Gouders spake thusly:
>>>>>>>> If choices consist of choice_values that depend on symbols set to 'm',
>>>>>>>> those choice_values are not set to 'n' if the choice is changed from
>>>>>>>> 'm' to 'y' (in which case only one active choice_value is allowed).
>>>>>>>> Those values are also written to the config file causing modules to be
>>>>>>>> built when they should not.
>>>>>>>>
>>>>>>>> The following config can be used to reproduce and examine the problem;
>>>>>>>> with the frontend of your choice set "Choice 0" and "Choice 1" to 'm',
>>>>>>>> then set "Tristate Choice" to 'y' and save the configuration:
>>>>>>>>
>>>>>>>> config modules
>>>>>>>>       boolean modules
>>>>>>>>       default y
>>>>>>>>       option modules
>>>>>>>>
>>>>>>>> config dependency
>>>>>>>>       tristate "Dependency"
>>>>>>>>       default m
>>>>>>>>
>>>>>>>> choice
>>>>>>>>       prompt "Tristate Choice"
>>>>>>>>       default choice0
>>>>>>>>
>>>>>>>> config choice0
>>>>>>>>       tristate "Choice 0"
>>>>>>>>
>>>>>>>> config choice1
>>>>>>>>       tristate "Choice 1"
>>>>>>>>       depends on dependency
>>>>>>>>
>>>>>>>> endchoice
>>>>>>>>
>>>>>>>> This patch sets choice_values' visibility that depend on symbols set
>>>>>>>> to 'm' to 'n' if the corresponding choice is set to 'y'.  This makes
>>>>>>>> them disappear from the choice list and will also cause the
>>>>>>>> choice_values' value set to 'n' in sym_calc_value() and as a result
>>>>>>>> they are written as "not set" to the resulting .config file.
>>>>>>>>
>>>>>>>> Reported-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
>>>>>>>> Signed-off-by: Dirk Gouders <dirk@gouders.net>
>>>>>>>> Tested-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
>>>>>>>
>>>>>>> Acked-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
>>>>>>>
>>>>>>> It will be in my tree soon. Thanks!
>>>>>>
>>>>>> I don't see this patch in 3.16 but 3.16 does not have the issue any
>>>>>> more. Anyone has an idea how the issue got fixed? I am trying to find
>>>>>> the right patch to backport.
>>>>>
>>>>> With the above sample kconfig I still see the issue.  How did you
>>>>> notice the issue got fixed?
>>>>
>>>> I did not pay much attention on the above sample kconfig, but just
>>>> focused on the USB gadget driver kconfig issue initially reported by
>>>> Sebastian. I saw the issue exists in 3.14, but does not in 3.16,
>>>> unless I messed up with my test. I will test 3.16 again some time next
>>>> week.
>>>
>>> Hi Bin,
>>>
>>> I now also re-tested the initially reported steps to reproduce the
>>> issue:
>>>
>>> ------------------------------------------------------------------------
>>>> in USB gadget menu (that is Device Drivers ---> USB support ---> USB
>>>> Gadget Support --->  USB Gadget Drivers) I can create a configuration
>>>> which is "lost". Here is how to reproduce it:
>>>>
>>>> - first config two gadgets as M:
>>>>  <M>   USB Gadget Drivers
>>>>  <M>     Audio Gadget
>>>>  <M>     Ethernet Gadget
>>>>  <M>     MIDI Gadget
>>>>
>>>>  save config & leave
>>>>
>>>> - now start menu config again and go to the same menu, now select
>>>>   built-in:
>>>>   <*>   USB Gadget Drivers (Ethernet Gadget
>>>>   the ethernet gadget is chosen automatically because we can have only
>>>>   one gadget selected.
>>>>   save config & leave
>>>>
>>>> - step three, go back to the menu and you will see that everything is
>>>>   as it was (the <*> is ignored).
>>> ------------------------------------------------------------------------
>>>
>>> Here, I still see the problem (I was wondering if the issue has been
>>> solved/gone by a kconfig-file modification).
>>
>> This issue was gone since 3.16, but came back again due to commit
>> 1fd6d08 ARM: omap2plus_defconfig: Enable n900 modem as loadable modules.
>>
> 
> I can confirm this issue too, faced it on v4.5 (but didn't try v4.6-rc1 yet)
> 

Issue is present on v4.6-rc1 as well and the $subject patch fixes the issue.

cheers,
-roger
--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Dirk Gouders March 31, 2016, 9:38 a.m. UTC | #11
Roger Quadros <rogerq@ti.com> writes:

> On 31/03/16 01:16, Ruslan Bilovol wrote:
>> Hi,
>> 
>> On Thu, Mar 31, 2016 at 1:08 AM, Bin Liu <binmlist@gmail.com> wrote:
>>> Hi,
>>>
>>> On Fri, Aug 15, 2014 at 2:37 AM, Dirk Gouders <dirk@gouders.net> wrote:
>>>> Bin Liu <binmlist@gmail.com> writes:
>>>>
>>>>> Dirk,
>>>>>
>>>>> On Thu, Aug 14, 2014 at 1:52 AM, Dirk Gouders <dirk@gouders.net> wrote:
>>>>>> Bin Liu <binmlist@gmail.com> writes:
>>>>>>
>>>>>>> All,
>>>>>>>
>>>>>>> On Mon, Nov 18, 2013 at 12:08 PM, Yann E. MORIN <yann.morin.1998@free.fr> wrote:
>>>>>>>> Dirk, All,
>>>>>>>>
>>>>>>>> On 2013-11-07 15:05 +0100, Dirk Gouders spake thusly:
>>>>>>>>> If choices consist of choice_values that depend on symbols set to 'm',
>>>>>>>>> those choice_values are not set to 'n' if the choice is changed from
>>>>>>>>> 'm' to 'y' (in which case only one active choice_value is allowed).
>>>>>>>>> Those values are also written to the config file causing modules to be
>>>>>>>>> built when they should not.
>>>>>>>>>
>>>>>>>>> The following config can be used to reproduce and examine the problem;
>>>>>>>>> with the frontend of your choice set "Choice 0" and "Choice 1" to 'm',
>>>>>>>>> then set "Tristate Choice" to 'y' and save the configuration:
>>>>>>>>>
>>>>>>>>> config modules
>>>>>>>>>       boolean modules
>>>>>>>>>       default y
>>>>>>>>>       option modules
>>>>>>>>>
>>>>>>>>> config dependency
>>>>>>>>>       tristate "Dependency"
>>>>>>>>>       default m
>>>>>>>>>
>>>>>>>>> choice
>>>>>>>>>       prompt "Tristate Choice"
>>>>>>>>>       default choice0
>>>>>>>>>
>>>>>>>>> config choice0
>>>>>>>>>       tristate "Choice 0"
>>>>>>>>>
>>>>>>>>> config choice1
>>>>>>>>>       tristate "Choice 1"
>>>>>>>>>       depends on dependency
>>>>>>>>>
>>>>>>>>> endchoice
>>>>>>>>>
>>>>>>>>> This patch sets choice_values' visibility that depend on symbols set
>>>>>>>>> to 'm' to 'n' if the corresponding choice is set to 'y'.  This makes
>>>>>>>>> them disappear from the choice list and will also cause the
>>>>>>>>> choice_values' value set to 'n' in sym_calc_value() and as a result
>>>>>>>>> they are written as "not set" to the resulting .config file.
>>>>>>>>>
>>>>>>>>> Reported-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
>>>>>>>>> Signed-off-by: Dirk Gouders <dirk@gouders.net>
>>>>>>>>> Tested-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
>>>>>>>>
>>>>>>>> Acked-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
>>>>>>>>
>>>>>>>> It will be in my tree soon. Thanks!
>>>>>>>
>>>>>>> I don't see this patch in 3.16 but 3.16 does not have the issue any
>>>>>>> more. Anyone has an idea how the issue got fixed? I am trying to find
>>>>>>> the right patch to backport.
>>>>>>
>>>>>> With the above sample kconfig I still see the issue.  How did you
>>>>>> notice the issue got fixed?
>>>>>
>>>>> I did not pay much attention on the above sample kconfig, but just
>>>>> focused on the USB gadget driver kconfig issue initially reported by
>>>>> Sebastian. I saw the issue exists in 3.14, but does not in 3.16,
>>>>> unless I messed up with my test. I will test 3.16 again some time next
>>>>> week.
>>>>
>>>> Hi Bin,
>>>>
>>>> I now also re-tested the initially reported steps to reproduce the
>>>> issue:
>>>>
>>>> ------------------------------------------------------------------------
>>>>> in USB gadget menu (that is Device Drivers ---> USB support ---> USB
>>>>> Gadget Support --->  USB Gadget Drivers) I can create a configuration
>>>>> which is "lost". Here is how to reproduce it:
>>>>>
>>>>> - first config two gadgets as M:
>>>>>  <M>   USB Gadget Drivers
>>>>>  <M>     Audio Gadget
>>>>>  <M>     Ethernet Gadget
>>>>>  <M>     MIDI Gadget
>>>>>
>>>>>  save config & leave
>>>>>
>>>>> - now start menu config again and go to the same menu, now select
>>>>>   built-in:
>>>>>   <*>   USB Gadget Drivers (Ethernet Gadget
>>>>>   the ethernet gadget is chosen automatically because we can have only
>>>>>   one gadget selected.
>>>>>   save config & leave
>>>>>
>>>>> - step three, go back to the menu and you will see that everything is
>>>>>   as it was (the <*> is ignored).
>>>> ------------------------------------------------------------------------
>>>>
>>>> Here, I still see the problem (I was wondering if the issue has been
>>>> solved/gone by a kconfig-file modification).
>>>
>>> This issue was gone since 3.16, but came back again due to commit
>>> 1fd6d08 ARM: omap2plus_defconfig: Enable n900 modem as loadable modules.
>>>
>> 
>> I can confirm this issue too, faced it on v4.5 (but didn't try v4.6-rc1 yet)
>> 
>
> Issue is present on v4.6-rc1 as well and the $subject patch fixes the issue.

I would say the issue is present until the code is fixed.  Whether it is
triggered depends on the Kconfig used.

Perhaps, Michal could take a look at the patch that Yann ack'ed, some
time ago.

Dirk
--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Dirk Gouders March 31, 2016, 9:53 a.m. UTC | #12
Dirk Gouders <dirk@gouders.net> writes:

> Roger Quadros <rogerq@ti.com> writes:
>
>> On 31/03/16 01:16, Ruslan Bilovol wrote:
>>> Hi,
>>> 
>>> On Thu, Mar 31, 2016 at 1:08 AM, Bin Liu <binmlist@gmail.com> wrote:
>>>> Hi,
>>>>
>>>> On Fri, Aug 15, 2014 at 2:37 AM, Dirk Gouders <dirk@gouders.net> wrote:
>>>>> Bin Liu <binmlist@gmail.com> writes:
>>>>>
>>>>>> Dirk,
>>>>>>
>>>>>> On Thu, Aug 14, 2014 at 1:52 AM, Dirk Gouders <dirk@gouders.net> wrote:
>>>>>>> Bin Liu <binmlist@gmail.com> writes:
>>>>>>>
>>>>>>>> All,
>>>>>>>>
>>>>>>>> On Mon, Nov 18, 2013 at 12:08 PM, Yann E. MORIN <yann.morin.1998@free.fr> wrote:
>>>>>>>>> Dirk, All,
>>>>>>>>>
>>>>>>>>> On 2013-11-07 15:05 +0100, Dirk Gouders spake thusly:
>>>>>>>>>> If choices consist of choice_values that depend on symbols set to 'm',
>>>>>>>>>> those choice_values are not set to 'n' if the choice is changed from
>>>>>>>>>> 'm' to 'y' (in which case only one active choice_value is allowed).
>>>>>>>>>> Those values are also written to the config file causing modules to be
>>>>>>>>>> built when they should not.
>>>>>>>>>>
>>>>>>>>>> The following config can be used to reproduce and examine the problem;
>>>>>>>>>> with the frontend of your choice set "Choice 0" and "Choice 1" to 'm',
>>>>>>>>>> then set "Tristate Choice" to 'y' and save the configuration:
>>>>>>>>>>
>>>>>>>>>> config modules
>>>>>>>>>>       boolean modules
>>>>>>>>>>       default y
>>>>>>>>>>       option modules
>>>>>>>>>>
>>>>>>>>>> config dependency
>>>>>>>>>>       tristate "Dependency"
>>>>>>>>>>       default m
>>>>>>>>>>
>>>>>>>>>> choice
>>>>>>>>>>       prompt "Tristate Choice"
>>>>>>>>>>       default choice0
>>>>>>>>>>
>>>>>>>>>> config choice0
>>>>>>>>>>       tristate "Choice 0"
>>>>>>>>>>
>>>>>>>>>> config choice1
>>>>>>>>>>       tristate "Choice 1"
>>>>>>>>>>       depends on dependency
>>>>>>>>>>
>>>>>>>>>> endchoice
>>>>>>>>>>
>>>>>>>>>> This patch sets choice_values' visibility that depend on symbols set
>>>>>>>>>> to 'm' to 'n' if the corresponding choice is set to 'y'.  This makes
>>>>>>>>>> them disappear from the choice list and will also cause the
>>>>>>>>>> choice_values' value set to 'n' in sym_calc_value() and as a result
>>>>>>>>>> they are written as "not set" to the resulting .config file.
>>>>>>>>>>
>>>>>>>>>> Reported-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
>>>>>>>>>> Signed-off-by: Dirk Gouders <dirk@gouders.net>
>>>>>>>>>> Tested-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
>>>>>>>>>
>>>>>>>>> Acked-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
>>>>>>>>>
>>>>>>>>> It will be in my tree soon. Thanks!
>>>>>>>>
>>>>>>>> I don't see this patch in 3.16 but 3.16 does not have the issue any
>>>>>>>> more. Anyone has an idea how the issue got fixed? I am trying to find
>>>>>>>> the right patch to backport.
>>>>>>>
>>>>>>> With the above sample kconfig I still see the issue.  How did you
>>>>>>> notice the issue got fixed?
>>>>>>
>>>>>> I did not pay much attention on the above sample kconfig, but just
>>>>>> focused on the USB gadget driver kconfig issue initially reported by
>>>>>> Sebastian. I saw the issue exists in 3.14, but does not in 3.16,
>>>>>> unless I messed up with my test. I will test 3.16 again some time next
>>>>>> week.
>>>>>
>>>>> Hi Bin,
>>>>>
>>>>> I now also re-tested the initially reported steps to reproduce the
>>>>> issue:
>>>>>
>>>>> ------------------------------------------------------------------------
>>>>>> in USB gadget menu (that is Device Drivers ---> USB support ---> USB
>>>>>> Gadget Support --->  USB Gadget Drivers) I can create a configuration
>>>>>> which is "lost". Here is how to reproduce it:
>>>>>>
>>>>>> - first config two gadgets as M:
>>>>>>  <M>   USB Gadget Drivers
>>>>>>  <M>     Audio Gadget
>>>>>>  <M>     Ethernet Gadget
>>>>>>  <M>     MIDI Gadget
>>>>>>
>>>>>>  save config & leave
>>>>>>
>>>>>> - now start menu config again and go to the same menu, now select
>>>>>>   built-in:
>>>>>>   <*>   USB Gadget Drivers (Ethernet Gadget
>>>>>>   the ethernet gadget is chosen automatically because we can have only
>>>>>>   one gadget selected.
>>>>>>   save config & leave
>>>>>>
>>>>>> - step three, go back to the menu and you will see that everything is
>>>>>>   as it was (the <*> is ignored).
>>>>> ------------------------------------------------------------------------
>>>>>
>>>>> Here, I still see the problem (I was wondering if the issue has been
>>>>> solved/gone by a kconfig-file modification).
>>>>
>>>> This issue was gone since 3.16, but came back again due to commit
>>>> 1fd6d08 ARM: omap2plus_defconfig: Enable n900 modem as loadable modules.
>>>>
>>> 
>>> I can confirm this issue too, faced it on v4.5 (but didn't try v4.6-rc1 yet)
>>> 
>>
>> Issue is present on v4.6-rc1 as well and the $subject patch fixes the issue.
>
> I would say the issue is present until the code is fixed.  Whether it is
> triggered depends on the Kconfig used.
>
> Perhaps, Michal could take a look at the patch that Yann ack'ed, some
> time ago.

Apologies if this sounded rude (I am not a native speaker).  What I
had in mind was that as far as I remember this patch was posted at the
time when Yann changed his interests and therefore it probably now needs
Michals attention.

Dirk
--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/scripts/kconfig/symbol.c b/scripts/kconfig/symbol.c
index c9a6775..06d96c9 100644
--- a/scripts/kconfig/symbol.c
+++ b/scripts/kconfig/symbol.c
@@ -189,12 +189,23 @@  static void sym_validate_range(struct symbol *sym)
 static void sym_calc_visibility(struct symbol *sym)
 {
 	struct property *prop;
+	struct symbol *choice_sym = NULL;
 	tristate tri;
 
 	/* any prompt visible? */
 	tri = no;
+
+	if (sym_is_choice_value(sym))
+		choice_sym = prop_get_symbol(sym_get_choice_prop(sym));
+
 	for_all_prompts(sym, prop) {
 		prop->visible.tri = expr_calc_value(prop->visible.expr);
+		/*
+		 * choice_values with visibility 'mod' are not visible if the
+		 * corresponding choice's value is 'yes'.
+		 */
+		if (prop->visible.tri == mod && (choice_sym && choice_sym->curr.tri == yes))
+			prop->visible.tri = no;
 		tri = EXPR_OR(tri, prop->visible.tri);
 	}
 	if (tri == mod && (sym->type != S_TRISTATE || modules_val == no))