On Fri, Mar 13, 2026 at 03:20:42PM +0100, Greg Kroah-Hartman wrote:
> Module "versions" do not make sense as the kernel is built all at once,
> the "version" is the overall kernel version number, so modules can not
> really be described as having a unique version given that they rely on
> the infrastructure of the whole kernel.
> 
> For now, just make this an "empty" define, to keep existing code
> building properly as the tree is slowly purged of the use of this over
> time.
> 
> This macro will be removed entirely in the future when there are no
> in-tree users.
> 
> Cc: Luis Chamberlain <[email protected]>
> Cc: Petr Pavlu <[email protected]>
> Cc: Daniel Gomez <[email protected]>
> Cc: Sami Tolvanen <[email protected]>
> Cc: Aaron Tomlin <[email protected]>
> Cc: Shyam Saini <[email protected]>
> Cc: Kees Cook <[email protected]>
> Cc: Thorsten Blum <[email protected]>
> Cc: Christoph Hellwig <[email protected]>
> Signed-off-by: Greg Kroah-Hartman <[email protected]>
> ---
>  include/linux/module.h | 56 +++++++++---------------------------------
>  kernel/params.c        | 30 ----------------------
>  2 files changed, 11 insertions(+), 75 deletions(-)


Sami just pointed out to me off-list that maybe I should also drop the
srcversion stuff too.  I'll gladly do that too, does anyone know if
anyone even uses that anymore?

thanks,

greg k-h


> 
> diff --git a/include/linux/module.h b/include/linux/module.h
> index 14f391b186c6..37cb369b4c3a 100644
> --- a/include/linux/module.h
> +++ b/include/linux/module.h
> @@ -62,15 +62,6 @@ struct module_attribute {
>       void (*free)(struct module *);
>  };
>  
> -struct module_version_attribute {
> -     struct module_attribute mattr;
> -     const char *module_name;
> -     const char *version;
> -};
> -
> -extern ssize_t __modver_version_show(const struct module_attribute *,
> -                                  struct module_kobject *, char *);
> -
>  extern const struct module_attribute module_uevent;
>  
>  /* These are either module local, or the kernel's dummy ones. */
> @@ -256,43 +247,18 @@ struct module_kobject 
> *lookup_or_create_module_kobject(const char *name);
>  static typeof(name) __mod_device_table(type, name)                   \
>    __attribute__ ((used, alias(__stringify(name))))
>  
> -/* Version of form [<epoch>:]<version>[-<extra-version>].
> - * Or for CVS/RCS ID version, everything but the number is stripped.
> - * <epoch>: A (small) unsigned integer which allows you to start versions
> - * anew. If not mentioned, it's zero.  eg. "2:1.0" is after
> - * "1:2.0".
> -
> - * <version>: The <version> may contain only alphanumerics and the
> - * character `.'.  Ordered by numeric sort for numeric parts,
> - * ascii sort for ascii parts (as per RPM or DEB algorithm).
> -
> - * <extraversion>: Like <version>, but inserted for local
> - * customizations, eg "rh3" or "rusty1".
> -
> - * Using this automatically adds a checksum of the .c files and the
> - * local headers in "srcversion".
> +/*
> + * Module "versions" do not make sense as the kernel is built all at once, 
> the
> + * "version" is the overall kernel version number, so modules can not really 
> be
> + * described as having a unique version given that they rely on the
> + * infrastructure of the whole kernel.
> + *
> + * For now, just make this an "empty" define, to keep existing code building
> + * properly as the tree is slowly purged of the use of this over time.
> + *
> + * It will be removed in the future when there are no in-tree users.
>   */
> -
> -#if defined(MODULE) || !defined(CONFIG_SYSFS)
> -#define MODULE_VERSION(_version) MODULE_INFO(version, _version)
> -#else
> -#define MODULE_VERSION(_version)                                     \
> -     MODULE_INFO(version, _version);                                 \
> -     static const struct module_version_attribute __modver_attr      \
> -             __used __section("__modver")                            \
> -             __aligned(__alignof__(struct module_version_attribute)) \
> -             = {                                                     \
> -                     .mattr  = {                                     \
> -                             .attr   = {                             \
> -                                     .name   = "version",            \
> -                                     .mode   = S_IRUGO,              \
> -                             },                                      \
> -                             .show   = __modver_version_show,        \
> -                     },                                              \
> -                     .module_name    = KBUILD_MODNAME,               \
> -                     .version        = _version,                     \
> -             }
> -#endif
> +#define MODULE_VERSION(_version)
>  
>  /* Optional firmware file (or files) needed by the module
>   * format is simply firmware file name.  Multiple firmware
> diff --git a/kernel/params.c b/kernel/params.c
> index 7188a12dbe86..1b14b1ab5fcb 100644
> --- a/kernel/params.c
> +++ b/kernel/params.c
> @@ -846,35 +846,6 @@ static void __init param_sysfs_builtin(void)
>       }
>  }
>  
> -ssize_t __modver_version_show(const struct module_attribute *mattr,
> -                           struct module_kobject *mk, char *buf)
> -{
> -     const struct module_version_attribute *vattr =
> -             container_of_const(mattr, struct module_version_attribute, 
> mattr);
> -
> -     return scnprintf(buf, PAGE_SIZE, "%s\n", vattr->version);
> -}
> -
> -extern const struct module_version_attribute __start___modver[];
> -extern const struct module_version_attribute __stop___modver[];
> -
> -static void __init version_sysfs_builtin(void)
> -{
> -     const struct module_version_attribute *vattr;
> -     struct module_kobject *mk;
> -     int err;
> -
> -     for (vattr = __start___modver; vattr < __stop___modver; vattr++) {
> -             mk = lookup_or_create_module_kobject(vattr->module_name);
> -             if (mk) {
> -                     err = sysfs_create_file(&mk->kobj, &vattr->mattr.attr);
> -                     WARN_ON_ONCE(err);
> -                     kobject_uevent(&mk->kobj, KOBJ_ADD);
> -                     kobject_put(&mk->kobj);
> -             }
> -     }
> -}
> -
>  /* module-related sysfs stuff */
>  
>  static ssize_t module_attr_show(struct kobject *kobj,
> @@ -977,7 +948,6 @@ static int __init param_sysfs_builtin_init(void)
>       if (!module_kset)
>               return -ENOMEM;
>  
> -     version_sysfs_builtin();
>       param_sysfs_builtin();
>  
>       return 0;
> -- 
> 2.53.0
> 

Reply via email to