If you know that your kernel modules will only ever be loaded by a newer
kernel, you can disable BASIC_MODVERSIONS to save space. This also
allows easy creation of test modules to see how tooling will respond to
modules that only have the new format.

Signed-off-by: Matthew Maurer <mmau...@google.com>
---
 kernel/module/Kconfig    | 15 +++++++++++++++
 scripts/Makefile.modpost |  1 +
 scripts/mod/modpost.c    |  9 +++++++--
 3 files changed, 23 insertions(+), 2 deletions(-)

diff --git a/kernel/module/Kconfig b/kernel/module/Kconfig
index 
9568b629a03ce8289d3f3597eefc66fc96445720..4538f3af63e1ca531d0f74ef45a6f5268e505aec
 100644
--- a/kernel/module/Kconfig
+++ b/kernel/module/Kconfig
@@ -217,6 +217,21 @@ config EXTENDED_MODVERSIONS
          The most likely reason you would enable this is to enable Rust
          support. If unsure, say N.
 
+config BASIC_MODVERSIONS
+       bool "Basic Module Versioning Support"
+       depends on MODVERSIONS
+       default y
+       help
+         This enables basic MODVERSIONS support, allowing older tools or
+         kernels to potentially load modules.
+
+         Disabling this may cause older `modprobe` or `kmod` to be unable
+         to read MODVERSIONS information from built modules. With this
+         disabled, older kernels may treat this module as unversioned.
+
+         This is enabled by default when MODVERSIONS are enabled.
+         If unsure, say Y.
+
 config MODULE_SRCVERSION_ALL
        bool "Source checksum for all modules"
        help
diff --git a/scripts/Makefile.modpost b/scripts/Makefile.modpost
index 
40426fc6350985780c0092beb49c6cc29b9eff62..d7d45067d08b94a82451d66a64eae29b6826e139
 100644
--- a/scripts/Makefile.modpost
+++ b/scripts/Makefile.modpost
@@ -43,6 +43,7 @@ MODPOST = $(objtree)/scripts/mod/modpost
 modpost-args =                                                                 
        \
        $(if $(CONFIG_MODULES),-M)                                              
        \
        $(if $(CONFIG_MODVERSIONS),-m)                                          
        \
+       $(if $(CONFIG_BASIC_MODVERSIONS),-b)                                    
        \
        $(if $(CONFIG_EXTENDED_MODVERSIONS),-x)                                 
        \
        $(if $(CONFIG_MODULE_SRCVERSION_ALL),-a)                                
        \
        $(if $(CONFIG_SECTION_MISMATCH_WARN_ONLY),,-E)                          
        \
diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
index 
6324b30f6b97ac24dc517b9229f227c6c369f7d5..3784f1e08104dc2ca1da10d45ed92bb8adf4826a
 100644
--- a/scripts/mod/modpost.c
+++ b/scripts/mod/modpost.c
@@ -33,6 +33,8 @@ static bool module_enabled;
 static bool modversions;
 /* Is CONFIG_MODULE_SRCVERSION_ALL set? */
 static bool all_versions;
+/* Is CONFIG_BASIC_MODVERSIONS set? */
+static bool basic_modversions;
 /* Is CONFIG_EXTENDED_MODVERSIONS set? */
 static bool extended_modversions;
 /* If we are modposting external module set to 1 */
@@ -1856,7 +1858,7 @@ static void add_versions(struct buffer *b, struct module 
*mod)
 {
        struct symbol *s;
 
-       if (!modversions)
+       if (!basic_modversions)
                return;
 
        buf_printf(b, "\n");
@@ -2176,7 +2178,7 @@ int main(int argc, char **argv)
        LIST_HEAD(dump_lists);
        struct dump_list *dl, *dl2;
 
-       while ((opt = getopt(argc, argv, "ei:MmnT:to:au:WwENd:x")) != -1) {
+       while ((opt = getopt(argc, argv, "ei:MmnT:to:au:WwENd:xb")) != -1) {
                switch (opt) {
                case 'e':
                        external_module = true;
@@ -2225,6 +2227,9 @@ int main(int argc, char **argv)
                case 'd':
                        missing_namespace_deps = optarg;
                        break;
+               case 'b':
+                       basic_modversions = true;
+                       break;
                case 'x':
                        extended_modversions = true;
                        break;

-- 
2.47.1.613.gc27f4b7a9f-goog


Reply via email to