Jeff Mahoney 450b8d
From: Jeff Mahoney <jeffm@suse.com>
Jeff Mahoney 450b8d
Subject: kernel: add product-identifying information to kernel build
Michal Kubecek 0a6d0d
Patch-mainline: Never, SUSE specific
Michal Kubecek b493de
References: FATE#325281
Jeff Mahoney 450b8d
Jeff Mahoney 450b8d
Our kernels may be offered using the same base kernel version across
Jeff Mahoney 450b8d
several product streams.  We have tags in our git repository to map
Jeff Mahoney 450b8d
specific versions to a release, but that requires having easy access
Jeff Mahoney 450b8d
to the repository and taking the multiple steps to resolve the release
Jeff Mahoney 450b8d
information.
Jeff Mahoney 450b8d
Jeff Mahoney 450b8d
This patch makes the product release easier to discover by both SUSE
Jeff Mahoney 450b8d
support staff and third-party developers.
Jeff Mahoney 450b8d
Jeff Mahoney 450b8d
This adds a new <linux/suse_version.h> header that defines several
Jeff Mahoney 450b8d
values that can be used to programatically discover what kernel
Jeff Mahoney 450b8d
version is being used:
Jeff Mahoney 450b8d
Jeff Mahoney 450b8d
* SUSE_PRODUCT_FAMILY     The "family" of product, e.g. SLE or Leap
Jeff Mahoney 450b8d
* SUSE_PRODUCT_NAME       The full product name, which may consist of
Jeff Mahoney 450b8d
                          several whitespace-separated words
Jeff Mahoney 450b8d
* SUSE_PRODUCT_SHORTNAME  The abbreviated product name where it makes
Jeff Mahoney 450b8d
			  sense, e.g. SLE15-SP1.
Jeff Mahoney 450b8d
* SUSE_VERSION            Numeric major number of release
Jeff Mahoney 450b8d
* SUSE_PATCHLEVEL         The minor numer or service pack level of the
Jeff Mahoney 450b8d
			  release
Jeff Mahoney 450b8d
* SUSE_AUXRELEASE	  Currently unused
Jeff Mahoney 450b8d
* SUSE_PRODUCT_CODE       An encoded product code that is the result of
Jeff Mahoney 450b8d
                          combining the family, version, patchlevel, and
Jeff Mahoney 450b8d
			  aux release
Jeff Mahoney 450b8d
* SUSE_PRODUCT		  Macro to use to generate the code
Jeff Mahoney 450b8d
Jeff Mahoney 450b8d
It also adds a new "suserelease" module tag that contains the
Jeff Mahoney 450b8d
shortname and also prints the shortname after the kernel version during
Jeff Mahoney 450b8d
system faults.
Jeff Mahoney 450b8d
Michal Kubecek 8751a9
mkubecek: after 5.17-rc1 mainline commit 129ab0d2d9f3 ("kbuild: do not
Michal Kubecek 8751a9
quote string values in include/config/auto.conf"), we cannot include
Michal Kubecek 8751a9
include/config/auto.conf in scripts/gen-suse_version_h.sh any more, extract
Michal Kubecek 8751a9
the config values from it manually.
Michal Kubecek 8751a9
Jeff Mahoney 450b8d
Signed-off-by: Jeff Mahoney <jeffm@suse.com>
Jeff Mahoney 450b8d
---
Jeff Mahoney 0f442b
 Makefile                      |   12 ++++-
Jeff Mahoney a26a81
 init/Kconfig.suse             |   86 ++++++++++++++++++++++++++++++++++++
Jeff Mahoney 0f442b
 lib/dump_stack.c              |    5 +-
Jeff Mahoney a26a81
 scripts/gen-suse_version_h.sh |  100 ++++++++++++++++++++++++++++++++++++++++++
Jeff Mahoney 0f442b
 scripts/mod/modpost.c         |   10 ++++
Jeff Mahoney a26a81
 5 files changed, 210 insertions(+), 3 deletions(-)
Michal Kubecek 4e61ec
 create mode 100644 scripts/gen-suse_version_h.sh
Jeff Mahoney 450b8d
Jeff Mahoney 450b8d
--- a/Makefile
Jeff Mahoney 450b8d
+++ b/Makefile
Jeff Mahoney 0f442b
@@ -1173,6 +1173,15 @@ export extmod_prefix = $(if $(KBUILD_EXT
Michal Kubecek 0ba08a
 export MODORDER := $(extmod_prefix)modules.order
Michal Kubecek 0ba08a
 export MODULES_NSDEPS := $(extmod_prefix)modules.nsdeps
Jeff Mahoney 450b8d
 
Jeff Mahoney 450b8d
+suse_version_h := include/generated/uapi/linux/suse_version.h
Jeff Mahoney 450b8d
+
Jeff Mahoney 450b8d
+define filechk_suse_version
Jeff Mahoney 450b8d
+	$(CONFIG_SHELL) $(srctree)/scripts/gen-suse_version_h.sh
Jeff Mahoney 450b8d
+endef
Jeff Mahoney 450b8d
+
Jeff Mahoney 450b8d
+$(suse_version_h): include/config/auto.conf FORCE
Jeff Mahoney 450b8d
+	$(call filechk,suse_version)
Jeff Mahoney 450b8d
+
Michal Kubecek 4e61ec
 ifeq ($(KBUILD_EXTMOD),)
Michal Kubecek 79462d
 
Michal Kubecek 79462d
 build-dir	:= .
Michal Kubecek 79462d
@@ -1268,7 +1277,8 @@ PHONY += prepare archprepare
Jeff Mahoney 450b8d
 
Michal Kubecek 059916
 archprepare: outputmakefile archheaders archscripts scripts include/config/kernel.release \
Michal Kubecek 887490
 	asm-generic $(version_h) $(autoksyms_h) include/generated/utsrelease.h \
Michal Kubecek 79462d
-	include/generated/compile.h include/generated/autoconf.h remove-stale-files
Michal Kubecek 79462d
+	include/generated/compile.h include/generated/autoconf.h remove-stale-files \
Michal Kubecek 79462d
+	$(suse_version_h)
Jeff Mahoney 450b8d
 
Michal Kubecek 0a6d0d
 prepare0: archprepare
Michal Kubecek 0a6d0d
 	$(Q)$(MAKE) $(build)=scripts/mod
Jeff Mahoney 450b8d
--- a/init/Kconfig.suse
Jeff Mahoney 450b8d
+++ b/init/Kconfig.suse
Jeff Mahoney 0f442b
@@ -1,6 +1,91 @@
Jeff Mahoney 450b8d
 config SUSE_KERNEL
Jeff Mahoney 450b8d
 	def_bool y
Jeff Mahoney 450b8d
 
Jeff Mahoney 450b8d
+menu "SUSE Release Details"
Jeff Mahoney 450b8d
+choice SUSE_PRODUCT_CODE
Jeff Mahoney 450b8d
+	prompt "SUSE Product Family"
Jeff Mahoney 450b8d
+	default SUSE_PRODUCT_SLE
Jeff Mahoney 450b8d
+	depends on SUSE_KERNEL
Jeff Mahoney 450b8d
+	help
Jeff Mahoney 450b8d
+	  This option defines the SUSE product family that owns this
Jeff Mahoney 450b8d
+	  kernel release.
Jeff Mahoney 450b8d
+
Jeff Mahoney 450b8d
+config SUSE_PRODUCT_SLE
Jeff Mahoney 450b8d
+	bool "SUSE Linux Enteprise"
Jeff Mahoney 450b8d
+
Jeff Mahoney 450b8d
+config SUSE_PRODUCT_OPENSUSE_LEAP
Jeff Mahoney 450b8d
+	bool "openSUSE Leap"
Jeff Mahoney 450b8d
+
Jeff Mahoney 450b8d
+config SUSE_PRODUCT_OPENSUSE_TUMBLEWEED
Jeff Mahoney 450b8d
+	bool "openSUSE Tumbleweed"
Jeff Mahoney 0f442b
+
Jeff Mahoney 0f442b
+config SUSE_PRODUCT_ALP
Jeff Mahoney 0f442b
+	bool "SUSE Adaptable Linux Platform"
Jeff Mahoney 450b8d
+endchoice
Jeff Mahoney 450b8d
+
Jeff Mahoney 450b8d
+config SUSE_PRODUCT_CODE
Jeff Mahoney 450b8d
+	int
Jeff Mahoney 0f442b
+	range 1 4
Jeff Mahoney 450b8d
+	default 1 if SUSE_PRODUCT_SLE
Jeff Mahoney 450b8d
+	default 2 if SUSE_PRODUCT_OPENSUSE_LEAP
Jeff Mahoney 450b8d
+	default 3 if SUSE_PRODUCT_OPENSUSE_TUMBLEWEED
Jeff Mahoney 0f442b
+	default 4 if SUSE_PRODUCT_ALP
Jeff Mahoney 450b8d
+
Jeff Mahoney 450b8d
+if SUSE_PRODUCT_SLE
Jeff Mahoney 450b8d
+config SUSE_VERSION
Jeff Mahoney 450b8d
+	int "Release Version"
Jeff Mahoney 450b8d
+	range 0 255
Jeff Mahoney 450b8d
+	default 255
Jeff Mahoney 450b8d
+
Jeff Mahoney 450b8d
+config SUSE_PATCHLEVEL
Jeff Mahoney 450b8d
+	int "Service Pack Version"
Jeff Mahoney 450b8d
+	range 0 255
Jeff Mahoney 450b8d
+	default 255
Jeff Mahoney 450b8d
+endif
Jeff Mahoney 450b8d
+
Jeff Mahoney 450b8d
+if SUSE_PRODUCT_OPENSUSE_LEAP
Jeff Mahoney 450b8d
+config SUSE_VERSION
Jeff Mahoney 450b8d
+	int "Release Major Version"
Jeff Mahoney 450b8d
+	range 0 255
Jeff Mahoney 450b8d
+	default 255
Jeff Mahoney 450b8d
+
Jeff Mahoney 450b8d
+config SUSE_PATCHLEVEL
Jeff Mahoney 450b8d
+	int "Release Minor Version"
Jeff Mahoney 450b8d
+	range 0 255
Jeff Mahoney 450b8d
+	default 255
Jeff Mahoney 450b8d
+endif
Jeff Mahoney 450b8d
+
Jeff Mahoney 450b8d
+# Tumbleweed doesn't currently use version information, but we should
Jeff Mahoney 450b8d
+# still have the values defined even if zeroed out.
Jeff Mahoney 450b8d
+if SUSE_PRODUCT_OPENSUSE_TUMBLEWEED
Jeff Mahoney 450b8d
+config SUSE_VERSION
Jeff Mahoney 450b8d
+	int
Jeff Mahoney 450b8d
+	range 0 255
Jeff Mahoney 450b8d
+	default 0
Jeff Mahoney 450b8d
+
Jeff Mahoney 450b8d
+config SUSE_PATCHLEVEL
Jeff Mahoney 450b8d
+	int
Jeff Mahoney 450b8d
+	range 0 255
Jeff Mahoney 450b8d
+	default 0
Jeff Mahoney 450b8d
+endif
Jeff Mahoney 450b8d
+
Jeff Mahoney 0f442b
+if SUSE_PRODUCT_ALP
Jeff Mahoney 0f442b
+config SUSE_VERSION
Jeff Mahoney 0f442b
+	int "Release Major Version"
Jeff Mahoney 0f442b
+	range 0 255
Jeff Mahoney 0f442b
+	default 255
Jeff Mahoney 0f442b
+
Jeff Mahoney 0f442b
+config SUSE_PATCHLEVEL
Jeff Mahoney 0f442b
+	int "Release Minor Version"
Jeff Mahoney 0f442b
+	range 0 255
Jeff Mahoney 0f442b
+	default 255
Jeff Mahoney 0f442b
+endif
Jeff Mahoney 0f442b
+
Jeff Mahoney 450b8d
+config SUSE_AUXRELEASE
Jeff Mahoney 450b8d
+	int
Jeff Mahoney 450b8d
+	range 0 255
Jeff Mahoney 450b8d
+	default 0
Jeff Mahoney 450b8d
+
Jeff Mahoney 450b8d
 config SUSE_KERNEL_SUPPORTED
Jeff Mahoney 450b8d
 	bool "Enable enterprise support facility"
Jeff Mahoney 450b8d
 	depends on SUSE_KERNEL
Jeff Mahoney 0f442b
@@ -18,3 +103,4 @@ config SUSE_KERNEL_SUPPORTED
Jeff Mahoney 450b8d
 	  If you aren't building a kernel for an enterprise distribution,
Jeff Mahoney 450b8d
 	  say n.
Jeff Mahoney 450b8d
 
Jeff Mahoney 450b8d
+endmenu
Michal Kubecek 4e61ec
--- a/lib/dump_stack.c
Michal Kubecek 4e61ec
+++ b/lib/dump_stack.c
Michal Kubecek 34fe32
@@ -14,6 +14,7 @@
Michal Kubecek 4e61ec
 #include <linux/kexec.h>
Michal Kubecek 4e61ec
 #include <linux/utsname.h>
Michal Kubecek acbbbf
 #include <linux/stop_machine.h>
Jeff Mahoney 450b8d
+#include <linux/suse_version.h>
Jeff Mahoney 450b8d
 
Michal Kubecek 4e61ec
 static char dump_stack_arch_desc_str[128];
Michal Kubecek 4e61ec
 
Jeff Mahoney 0f442b
@@ -54,13 +55,13 @@ void __init dump_stack_set_arch_desc(con
Jeff Mahoney 450b8d
  */
Jeff Mahoney 450b8d
 void dump_stack_print_info(const char *log_lvl)
Jeff Mahoney 450b8d
 {
Michal Kubecek 34fe32
-	printk("%sCPU: %d PID: %d Comm: %.20s %s%s %s %.*s" BUILD_ID_FMT "\n",
Michal Kubecek 34fe32
+	printk("%sCPU: %d PID: %d Comm: %.20s %s%s %s %.*s %s" BUILD_ID_FMT "\n",
Jeff Mahoney 450b8d
 	       log_lvl, raw_smp_processor_id(), current->pid, current->comm,
Michal Kubecek 4e61ec
 	       kexec_crash_loaded() ? "Kdump: loaded " : "",
Michal Kubecek 4e61ec
 	       print_tainted(),
Michal Kubecek 4e61ec
 	       init_utsname()->release,
Jeff Mahoney 450b8d
 	       (int)strcspn(init_utsname()->version, " "),
Michal Kubecek 34fe32
-	       init_utsname()->version, BUILD_ID_VAL);
Michal Kubecek 34fe32
+	       init_utsname()->version, SUSE_PRODUCT_SHORTNAME, BUILD_ID_VAL);
Jeff Mahoney 450b8d
 
Jeff Mahoney 450b8d
 	if (dump_stack_arch_desc_str[0] != '\0')
Jeff Mahoney 450b8d
 		printk("%sHardware name: %s\n",
Jeff Mahoney 450b8d
--- /dev/null
Jeff Mahoney 450b8d
+++ b/scripts/gen-suse_version_h.sh
Jeff Mahoney a26a81
@@ -0,0 +1,100 @@
Jeff Mahoney 450b8d
+#!/bin/bash
Jeff Mahoney 450b8d
+
Michal Kubecek 8751a9
+function get_config() {
Michal Kubecek 8751a9
+	local line
Michal Kubecek 8751a9
+
Michal Kubecek 8751a9
+	line=$(grep "^${1}=" include/config/auto.conf)
Michal Kubecek 8751a9
+	if [ -z "$line" ]; then
Michal Kubecek 8751a9
+		return
Michal Kubecek 8751a9
+	fi
Michal Kubecek 8751a9
+	echo "${line#*=}"
Michal Kubecek 8751a9
+}
Michal Kubecek 8751a9
+
Michal Kubecek 8751a9
+if [ ! -e include/config/auto.conf ]; then
Jeff Mahoney 450b8d
+        echo "Error: auto.conf not generated - run 'make prepare' to create it" >&2
Jeff Mahoney 450b8d
+	exit 1
Jeff Mahoney 450b8d
+fi
Jeff Mahoney 450b8d
+
Michal Kubecek 8751a9
+VERSION=$(get_config CONFIG_SUSE_VERSION)
Michal Kubecek 8751a9
+PATCHLEVEL=$(get_config CONFIG_SUSE_PATCHLEVEL)
Michal Kubecek 8751a9
+AUXRELEASE=$(get_config CONFIG_SUSE_AUXRELEASE)
Michal Kubecek 8751a9
+PRODUCT_CODE=$(get_config CONFIG_SUSE_PRODUCT_CODE)
Jeff Mahoney 450b8d
+
Jeff Mahoney 450b8d
+if [ -z "$VERSION" -o -z "$PATCHLEVEL" -o -z "$AUXRELEASE" ]; then
Jeff Mahoney 450b8d
+	# This would be a bug in the Kconfig
Jeff Mahoney 450b8d
+	cat <<- END >&2
Jeff Mahoney 450b8d
+	ERROR: Missing VERSION, PATCHLEVEL, or AUXRELEASE."
Jeff Mahoney 450b8d
+	Please check init/Kconfig.suse for correctness.
Jeff Mahoney 450b8d
+	END
Jeff Mahoney 450b8d
+	exit 1
Jeff Mahoney 450b8d
+fi
Jeff Mahoney 450b8d
+
Jeff Mahoney 450b8d
+if [ "$VERSION" = 255 -o "$PATCHLEVEL" = 255 ]; then
Jeff Mahoney 450b8d
+	cat <<- END >&2
Jeff Mahoney 450b8d
+
Jeff Mahoney 450b8d
+	ERROR: This release needs to be properly configured.
Jeff Mahoney 450b8d
+	Please add real values for SUSE_VERSION and SUSE_PATCHLEVEL.
Jeff Mahoney 450b8d
+
Jeff Mahoney 450b8d
+	END
Jeff Mahoney 450b8d
+	exit 1
Jeff Mahoney 450b8d
+fi
Jeff Mahoney 450b8d
+
Jeff Mahoney 450b8d
+
Michal Kubecek 8751a9
+case "$PRODUCT_CODE" in
Jeff Mahoney 450b8d
+	1)
Jeff Mahoney 450b8d
+		if [ "${PATCHLEVEL}" = "0" ]; then
Jeff Mahoney 450b8d
+			SP=""
Jeff Mahoney 450b8d
+		else
Jeff Mahoney 450b8d
+			SP="${PATCHLEVEL}"
Jeff Mahoney 450b8d
+		fi
Jeff Mahoney 450b8d
+		SUSE_PRODUCT_NAME="SUSE Linux Enterprise ${VERSION}${SP:+ SP}${SP}"
Jeff Mahoney 450b8d
+		SUSE_PRODUCT_SHORTNAME="SLE${VERSION}${SP:+-SP}${SP}"
Jeff Mahoney 450b8d
+		SUSE_PRODUCT_FAMILY="SLE"
Jeff Mahoney 450b8d
+		;;
Jeff Mahoney 450b8d
+	2)
Jeff Mahoney 450b8d
+		SUSE_PRODUCT_NAME="openSUSE Leap ${VERSION}.${PATCHLEVEL}"
Jeff Mahoney 450b8d
+		SUSE_PRODUCT_SHORTNAME="$SUSE_PRODUCT_NAME"
Jeff Mahoney 450b8d
+		SUSE_PRODUCT_FAMILY="Leap"
Jeff Mahoney 450b8d
+		;;
Jeff Mahoney 450b8d
+	3)
Jeff Mahoney 450b8d
+		SUSE_PRODUCT_NAME="openSUSE Tumbleweed"
Jeff Mahoney 450b8d
+		SUSE_PRODUCT_SHORTNAME="$SUSE_PRODUCT_NAME"
Jeff Mahoney 450b8d
+		SUSE_PRODUCT_FAMILY="Tumbleweed"
Jeff Mahoney 450b8d
+		;;
Jeff Mahoney 0f442b
+	4)
Jeff Mahoney 0f442b
+		SUSE_PRODUCT_NAME="SUSE Adaptable Linux Platform ${VERSION}.${PATCHLEVEL}"
Jeff Mahoney 0f442b
+		SUSE_PRODUCT_SHORTNAME="ALP-${VERSION}.${PATCHLEVEL}"
Jeff Mahoney 0f442b
+		SUSE_PRODUCT_FAMILY="ALP"
Jeff Mahoney 0f442b
+		;;
Jeff Mahoney 450b8d
+	*)
Michal Kubecek 8751a9
+		echo "Unknown SUSE_PRODUCT_CODE=${PRODUCT_CODE}" >&2
Jeff Mahoney 450b8d
+		exit 1
Jeff Mahoney 450b8d
+		;;
Jeff Mahoney 450b8d
+esac
Jeff Mahoney 450b8d
+
Michal Kubecek 8751a9
+SUSE_PRODUCT_CODE=$(( (${PRODUCT_CODE} << 24) + \
Jeff Mahoney 450b8d
+		      (${VERSION} << 16) + (${PATCHLEVEL} << 8) + \
Jeff Mahoney 450b8d
+		       ${AUXRELEASE} ))
Jeff Mahoney 450b8d
+
Jeff Mahoney 450b8d
+cat <
Jeff Mahoney 450b8d
+#ifndef _SUSE_VERSION_H
Jeff Mahoney 450b8d
+#define _SUSE_VERSION_H
Jeff Mahoney 450b8d
+
Jeff Mahoney a26a81
+#define SUSE_PRODUCT_CODE_SLE				1
Jeff Mahoney a26a81
+#define SUSE_PRODUCT_CODE_OPENSUSE_LEAP			2
Jeff Mahoney a26a81
+#define SUSE_PRODUCT_CODE_OPENSUSE_TUMBLEWEED		3
Jeff Mahoney a26a81
+#define SUSE_PRODUCT_CODE_ALP				4
Jeff Mahoney a26a81
+
Jeff Mahoney 450b8d
+#define SUSE_PRODUCT_FAMILY     "${SUSE_PRODUCT_FAMILY}"
Jeff Mahoney 450b8d
+#define SUSE_PRODUCT_NAME       "${SUSE_PRODUCT_NAME}"
Jeff Mahoney 450b8d
+#define SUSE_PRODUCT_SHORTNAME  "${SUSE_PRODUCT_SHORTNAME}"
Jeff Mahoney 450b8d
+#define SUSE_VERSION            ${VERSION}
Jeff Mahoney 450b8d
+#define SUSE_PATCHLEVEL         ${PATCHLEVEL}
Jeff Mahoney 450b8d
+#define SUSE_AUXRELEASE		${AUXRELEASE}
Jeff Mahoney 450b8d
+#define SUSE_PRODUCT_CODE       ${SUSE_PRODUCT_CODE}
Jeff Mahoney 450b8d
+#define SUSE_PRODUCT(product, version, patchlevel, auxrelease)		\\
Jeff Mahoney 450b8d
+	(((product) << 24) + ((version) << 16) +			\\
Jeff Mahoney 450b8d
+	 ((patchlevel) << 8) + (auxrelease))
Jeff Mahoney 450b8d
+
Jeff Mahoney 450b8d
+#endif /* _SUSE_VERSION_H */
Jeff Mahoney 450b8d
+END
Jeff Mahoney 450b8d
--- a/scripts/mod/modpost.c
Jeff Mahoney 450b8d
+++ b/scripts/mod/modpost.c
Michal Kubecek 79462d
@@ -24,6 +24,7 @@
Michal Kubecek 549a5b
 #include "modpost.h"
Jan Beulich 8b0e2e
 #include "../../include/generated/autoconf.h"
Jeff Mahoney 450b8d
 #include "../../include/linux/license.h"
Jeff Mahoney 450b8d
+#include "../../include/generated/uapi/linux/suse_version.h"
Jeff Mahoney 450b8d
 
Jeff Mahoney 450b8d
 /* Are we using CONFIG_MODVERSIONS? */
Michal Kubecek 515f42
 static bool modversions;
Jeff Mahoney 0f442b
@@ -2268,6 +2269,14 @@ static void write_buf(struct buffer *b,
Jeff Mahoney 450b8d
 	}
Jeff Mahoney 450b8d
 }
Jeff Mahoney 450b8d
 
Jeff Mahoney 450b8d
+static void add_suserelease(struct buffer *b, struct module *mod)
Jeff Mahoney 450b8d
+{
Jeff Mahoney 450b8d
+#ifdef SUSE_PRODUCT_SHORTNAME
Jeff Mahoney 450b8d
+	buf_printf(b, "\n");
Jeff Mahoney 450b8d
+	buf_printf(b, "MODULE_INFO(suserelease, \"%s\");\n",
Jeff Mahoney 450b8d
+		   SUSE_PRODUCT_SHORTNAME);
Jeff Mahoney 450b8d
+#endif
Jeff Mahoney 450b8d
+}
Jeff Mahoney 450b8d
 static void write_if_changed(struct buffer *b, const char *fname)
Jeff Mahoney 450b8d
 {
Jeff Mahoney 450b8d
 	char *tmp;
Jeff Mahoney 0f442b
@@ -2334,6 +2343,7 @@ static void write_mod_c_file(struct modu
Michal Kubecek 515f42
 	add_depends(&buf, mod);
Michal Kubecek 515f42
 	add_moddevtable(&buf, mod);
Michal Kubecek 515f42
 	add_srcversion(&buf, mod);
Michal Kubecek 515f42
+	add_suserelease(&buf, mod);
Jeff Mahoney 450b8d
 
Michal Kubecek 515f42
 	ret = snprintf(fname, sizeof(fname), "%s.mod.c", mod->name);
Michal Kubecek 515f42
 	if (ret >= sizeof(fname)) {