Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 05 Mar 2003 21:59:01 -0700 (MST)
From:      "M. Warner Losh" <imp@bsdimp.com>
To:        hackers@freebsd.org, smkelly@zombie.org
Subject:   Re: Smarter kernel modules?
Message-ID:  <20030305.215901.36360277.imp@bsdimp.com>

next in thread | raw e-mail | index | archive | help
Here's a simple patch.  However, it is a total suck-ass kludge (and
that's being generous).  The ABI isn't THE ABI, but rather a
collection of ABIs.  These ABIs change slowly and there is a certain
range that work together.  Historically, we've been really bad about
bumping version numbers when things change in modules.  Also, there's
no built-in versioning in the module names, which makes it harder to
have multiple versions around.  As such, the version numbers are set
to 1 and never change.

Warner

Index: sys/module.h
===================================================================
RCS file: /home/ncvs/src/sys/sys/module.h,v
retrieving revision 1.20
diff -u -r1.20 module.h
--- sys/module.h	18 Mar 2002 07:45:30 -0000	1.20
+++ sys/module.h	6 Mar 2003 04:51:04 -0000
@@ -95,7 +95,10 @@
 
 #include <sys/linker_set.h>
 
+extern char __version_5_1;
+
 #define	MODULE_METADATA(uniquifier, type, data, cval)			\
+	static char *_mod_version_depend##uniquifier = &__version_5_1;	\
 	static struct mod_metadata _mod_metadata##uniquifier = {	\
 		MDT_STRUCT_VERSION,					\
 		type,							\
Index: kern/kern_module.c
===================================================================
RCS file: /home/ncvs/src/sys/kern/kern_module.c,v
retrieving revision 1.41
diff -u -r1.41 kern_module.c
--- kern/kern_module.c	19 Feb 2003 05:47:25 -0000	1.41
+++ kern/kern_module.c	6 Mar 2003 04:51:04 -0000
@@ -42,6 +42,12 @@
 
 static MALLOC_DEFINE(M_MODULE, "module", "module data structures");
 
+/*
+ * Define the version.  Change the symbol name when things get too
+ * incompatible.  version_5_1 means the 'ABI compatible with FreeBSD 5.1'
+ */
+char __version_5_1 = 1;
+
 typedef TAILQ_HEAD(, module) modulelist_t;
 struct module {
 	TAILQ_ENTRY(module)	link;	/* chain together all modules */

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20030305.215901.36360277.imp>