diff mbox series

kconfig: Add `make mod2noconfig` to disable module options

Message ID 37c3a9d3d6fceba0f55d05e7558370e3f60b8bf0.1634492509.git.josh@joshtriplett.org (mailing list archive)
State New, archived
Headers show
Series kconfig: Add `make mod2noconfig` to disable module options | expand

Commit Message

Josh Triplett Oct. 17, 2021, 5:43 p.m. UTC
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>
---
 scripts/kconfig/Makefile |  3 ++-
 scripts/kconfig/conf.c   | 17 ++++++++++-------
 2 files changed, 12 insertions(+), 8 deletions(-)

Comments

Björn Töpel Nov. 17, 2021, 10:45 a.m. UTC | #1
Josh Triplett wrote:
> 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>

Hmm, I don't think this was picked up yet?

FWIW,

Tested-by: Björn Töpel <bjorn@kernel.org>
Masahiro Yamada Nov. 20, 2021, 3:41 p.m. UTC | #2
On Wed, Nov 17, 2021 at 7:46 PM Björn Töpel <bjorn@kernel.org> wrote:
>
> Josh Triplett wrote:
> > 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>
>
> Hmm, I don't think this was picked up yet?
>
> FWIW,
>
> Tested-by: Björn Töpel <bjorn@kernel.org>


Applied to linux-kbuild.
Thanks.
diff mbox series

Patch

diff --git a/scripts/kconfig/Makefile b/scripts/kconfig/Makefile
index 5a215880b268..b8ef0fb4bbef 100644
--- a/scripts/kconfig/Makefile
+++ b/scripts/kconfig/Makefile
@@ -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'
diff --git a/scripts/kconfig/conf.c b/scripts/kconfig/conf.c
index 5d84b44a2a2a..5535dddab770 100644
--- a/scripts/kconfig/conf.c
+++ b/scripts/kconfig/conf.c
@@ -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 &&
@@ -696,6 +693,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}
 };
 
@@ -724,6 +722,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");
 }
 
@@ -799,6 +798,7 @@  int main(int ac, char **av)
 	case olddefconfig:
 	case yes2modconfig:
 	case mod2yesconfig:
+	case mod2noconfig:
 		conf_read(NULL);
 		break;
 	case allnoconfig:
@@ -873,10 +873,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;