kconfig: Add `make mod2noconfig` to disable module options
authorJosh Triplett <josh@joshtriplett.org>
Sun, 17 Oct 2021 17:43:13 +0000 (19:43 +0200)
committerMasahiro Yamada <masahiroy@kernel.org>
Thu, 2 Dec 2021 08:02:36 +0000 (17:02 +0900)
When converting a modular kernel to a monolithic kernel, once the kernel
works without loading any modules, this helps to quickly disable all the
modules before turning off module support entirely.

Refactor conf_rewrite_mod_or_yes to a more general
conf_rewrite_tristates that accepts an old and new state.

Signed-off-by: Josh Triplett <josh@joshtriplett.org>
Tested-by: Björn Töpel <bjorn@kernel.org>
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
scripts/kconfig/Makefile
scripts/kconfig/conf.c

index 5a21588..b8ef0fb 100644 (file)
@@ -69,7 +69,7 @@ localyesconfig localmodconfig: $(obj)/conf
 #  deprecated for external use
 simple-targets := oldconfig allnoconfig allyesconfig allmodconfig \
        alldefconfig randconfig listnewconfig olddefconfig syncconfig \
-       helpnewconfig yes2modconfig mod2yesconfig
+       helpnewconfig yes2modconfig mod2yesconfig mod2noconfig
 
 PHONY += $(simple-targets)
 
@@ -134,6 +134,7 @@ help:
        @echo  '  randconfig      - New config with random answer to all options'
        @echo  '  yes2modconfig   - Change answers from yes to mod if possible'
        @echo  '  mod2yesconfig   - Change answers from mod to yes if possible'
+       @echo  '  mod2noconfig    - Change answers from mod to no if possible'
        @echo  '  listnewconfig   - List new options'
        @echo  '  helpnewconfig   - List new options and help text'
        @echo  '  olddefconfig    - Same as oldconfig but sets new symbols to their'
index 971da35..4178065 100644 (file)
@@ -35,6 +35,7 @@ enum input_mode {
        olddefconfig,
        yes2modconfig,
        mod2yesconfig,
+       mod2noconfig,
 };
 static enum input_mode input_mode = oldaskconfig;
 static int input_mode_opt;
@@ -163,8 +164,6 @@ enum conf_def_mode {
        def_default,
        def_yes,
        def_mod,
-       def_y2m,
-       def_m2y,
        def_no,
        def_random
 };
@@ -302,12 +301,10 @@ static bool conf_set_all_new_symbols(enum conf_def_mode mode)
        return has_changed;
 }
 
-static void conf_rewrite_mod_or_yes(enum conf_def_mode mode)
+static void conf_rewrite_tristates(tristate old_val, tristate new_val)
 {
        struct symbol *sym;
        int i;
-       tristate old_val = (mode == def_y2m) ? yes : mod;
-       tristate new_val = (mode == def_y2m) ? mod : yes;
 
        for_all_symbols(i, sym) {
                if (sym_get_type(sym) == S_TRISTATE &&
@@ -685,6 +682,7 @@ static const struct option long_opts[] = {
        {"olddefconfig",  no_argument,       &input_mode_opt, olddefconfig},
        {"yes2modconfig", no_argument,       &input_mode_opt, yes2modconfig},
        {"mod2yesconfig", no_argument,       &input_mode_opt, mod2yesconfig},
+       {"mod2noconfig",  no_argument,       &input_mode_opt, mod2noconfig},
        {NULL, 0, NULL, 0}
 };
 
@@ -713,6 +711,7 @@ static void conf_usage(const char *progname)
        printf("  --randconfig            New config with random answer to all options\n");
        printf("  --yes2modconfig         Change answers from yes to mod if possible\n");
        printf("  --mod2yesconfig         Change answers from mod to yes if possible\n");
+       printf("  --mod2noconfig          Change answers from mod to no if possible\n");
        printf("  (If none of the above is given, --oldaskconfig is the default)\n");
 }
 
@@ -788,6 +787,7 @@ int main(int ac, char **av)
        case olddefconfig:
        case yes2modconfig:
        case mod2yesconfig:
+       case mod2noconfig:
                conf_read(NULL);
                break;
        case allnoconfig:
@@ -862,10 +862,13 @@ int main(int ac, char **av)
        case savedefconfig:
                break;
        case yes2modconfig:
-               conf_rewrite_mod_or_yes(def_y2m);
+               conf_rewrite_tristates(yes, mod);
                break;
        case mod2yesconfig:
-               conf_rewrite_mod_or_yes(def_m2y);
+               conf_rewrite_tristates(mod, yes);
+               break;
+       case mod2noconfig:
+               conf_rewrite_tristates(mod, no);
                break;
        case oldaskconfig:
                rootEntry = &rootmenu;