Skip to contentSkip to conversation

kconfig: add short explanation to SYMBOL_WRITE

PATCH In review Martin Walch 2 participants 5 messages Oct 2, 2013 – Oct 3, 2013

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/4 kconfig: add short explanation to SYMBOL_WRITE

From: Martin Walch <[email protected]>
Date: Wed, 2 Oct 2013 06:54:27 +0200
Subject: [PATCH 1/4] kconfig: add short explanation to SYMBOL_WRITE

replace the question mark in the comment after SYMBOL_WRITE with an explanation

---
 scripts/kconfig/expr.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
scripts/kconfig/expr.h +1 -1
index df198a5..ba663e1 100644
@@ -93,7 +93,7 @@ struct symbol {
 #define SYMBOL_CHOICEVAL  0x0020  /* used as a value in a choice block */
 #define SYMBOL_VALID      0x0080  /* set when symbol.curr is calculated */
 #define SYMBOL_OPTIONAL   0x0100  /* choice is optional - values can be 'n' */
-#define SYMBOL_WRITE      0x0200  /* ? */
+#define SYMBOL_WRITE      0x0200  /* write symbol to file (KCONFIG_CONFIG) */
 #define SYMBOL_CHANGED    0x0400  /* ? */
 #define SYMBOL_AUTO       0x1000  /* value from environment variable */
 #define SYMBOL_CHECKED    0x2000  /* used during dependency checking */
Signature · 1 line
1.8.1.5
#1 lore raw

scripts/kconfig/expr.h struct symbol { · line 99

Quoted 13 lines · Martin Walch
scripts/kconfig/expr.h +1 -1
index df198a5..ba663e1 100644
@@ -93,7 +93,7 @@ struct symbol {
 #define SYMBOL_CHOICEVAL  0x0020  /* used as a value in a choice block */
 #define SYMBOL_VALID      0x0080  /* set when symbol.curr is calculated */
 #define SYMBOL_OPTIONAL   0x0100  /* choice is optional - values can be 'n' */
-#define SYMBOL_WRITE      0x0200  /* ? */
+#define SYMBOL_WRITE      0x0200  /* write symbol to file (KCONFIG_CONFIG) */
 #define SYMBOL_CHANGED    0x0400  /* ? */
 #define SYMBOL_AUTO       0x1000  /* value from environment variable */
 #define SYMBOL_CHECKED    0x2000  /* used during dependency checking */

Perhaps stating that the choice is writable by the user?

#2 lore raw
Quoted 7 lines
Quoted 7 lines
scripts/kconfig/expr.h +0 -0
index df198a5..ba663e1 100644
@@ -93,7 +93,7 @@ struct symbol {
 #define SYMBOL_CHOICEVAL  0x0020  /* used as a value in a choice block */
 #define SYMBOL_VALID      0x0080  /* set when symbol.curr is calculated */
Quoted 8 lines

scripts/kconfig/expr.h struct symbol { · line 99

Quoted 6 lines
scripts/kconfig/expr.h +1 -1
 #define SYMBOL_OPTIONAL   0x0100  /* choice is optional - values can be 'n' */
-#define SYMBOL_WRITE      0x0200  /* ? */
+#define SYMBOL_WRITE      0x0200  /* write symbol to file (KCONFIG_CONFIG) */
 #define SYMBOL_CHANGED    0x0400  /* ? */
 #define SYMBOL_AUTO       0x1000  /* value from environment variable */
 #define SYMBOL_CHECKED    0x2000  /* used during dependency checking */

Perhaps stating that the choice is writable by the user?

As far as I understand SYMBOL_WRITE, its main purpose is in the function conf_write in confdata.c:

Quoted 5 lines

if (!(sym->flags & SYMBOL_WRITE))

	goto next;

sym->flags &= ~SYMBOL_WRITE;

conf_write_symbol(out, sym, &kconfig_printer_cb, NULL);

So, if I have not missed anything, SYMBOL_WRITE decides whether to write a symbol to .config or not. This does not necessarily mean that the user can change the value. SYMBOL_WRITE may be set and the symbol may be written to .config while the user does not even see the corresponding prompt.

#3 lore raw
Quoted 5 lines · Martin Walch

So, if I have not missed anything, SYMBOL_WRITE decides whether to write a symbol to .config or not. This does not necessarily mean that the user can change the value. SYMBOL_WRITE may be set and the symbol may be written to .config while the user does not even see the corresponding prompt.

The purpose of SYMBOL_WRITE is in sym_calc_value() where it is set if the config symbol is visible and settable by the user, which is why I suggested it be specified as being writable by the user.

#4 lore raw
Quoted 3 lines · On Wednesday 02 October 2013 16:42:27 David Rientjes wrote:

The purpose of SYMBOL_WRITE is in sym_calc_value() where it is set if the config symbol is visible and settable by the user, which is why I suggested it be specified as being writable by the user.

Then this looks strange to me: a config symbol of type boolean or tristate that is not visible, but has a default value != n will have SYMBOL_WRITE set in sym_calc_value:

Quoted 16 lines

case S_BOOLEAN:
case S_TRISTATE:

	if (sym_is_choice_value(sym) && sym->visible == yes) {
		...
	} else {
		...
		if (!sym_is_choice(sym)) {
			prop = sym_get_default_prop(sym);
			if (prop) {
				sym->flags |= SYMBOL_WRITE;
				newval.tri = EXPR_AND(expr_calc_value(prop->expr),
					prop->visible.tri);
			}
		}
		...
	}