Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 11 Oct 2001 16:18:41 -0700 (PDT)
From:      Julian Elischer <julian@elischer.org>
To:        hackers@freebsd.org
Cc:        developers@freebsd.org
Subject:   Patch to allow 4.2 driver .o to run on 4.4
Message-ID:  <Pine.BSF.4.21.0110111604380.37124-100000@InterJet.elischer.org>

next in thread | raw e-mail | index | archive | help

Sorry about the crosspost but I estimate that this reaches those who need
to see this..

There was a change in the 4.x kernel.h on June 15 that broke backwards
compatibility for binary distributed driver files
(distributed as .o files)  It was an MFC of a patch by peter..
but we didn't understand the ramifications in 4.x.


my fix (a reversion in part) is as follows:

Index: kernel.h
===================================================================
RCS file: /repos/cvs/mod/freebsd/src/sys/sys/kernel.h,v
retrieving revision 1.63.2.5
diff -u -r1.63.2.5 kernel.h
--- kernel.h	2001/07/26 23:27:53	1.63.2.5
+++ kernel.h	2001/10/11 21:30:03
@@ -113,13 +113,13 @@
 	SI_SUB_VM		= 0x1000000,	/* virtual memory system
init*/
 	SI_SUB_KMEM		= 0x1800000,	/* kernel memory*/
 	SI_SUB_KVM_RSRC		= 0x1A00000,	/* kvm operational
limits*/
-	SI_SUB_CPU		= 0x2000000,	/* CPU resource(s)*/
-	SI_SUB_KLD		= 0x2100000,	/* KLD and module setup */
-	SI_SUB_INTRINSIC	= 0x2200000,	/* proc 0*/
-	SI_SUB_VM_CONF		= 0x2300000,	/* config VM, set limits*/
-	SI_SUB_RUN_QUEUE	= 0x2400000,	/* the run queue*/
-	SI_SUB_CREATE_INIT	= 0x2500000,	/* create the init process
*/
-	SI_SUB_DRIVERS		= 0x3100000,	/* Let Drivers initialize
*/
+	SI_SUB_CPU		= 0x1e00000,	/* CPU resource(s)*/
+	SI_SUB_KLD		= 0x1f00000,	/* KLD and module setup */
+	SI_SUB_INTRINSIC	= 0x2000000,	/* proc 0*/
+	SI_SUB_VM_CONF		= 0x2100000,	/* config VM, set limits*/
+	SI_SUB_RUN_QUEUE	= 0x2200000,	/* the run queue*/
+	SI_SUB_CREATE_INIT	= 0x2300000,	/* create the init process
*/
+	SI_SUB_DRIVERS		= 0x2400000,	/* Let Drivers initialize
*/
 	SI_SUB_CONFIGURE	= 0x3800000,	/* Configure devices */
 	SI_SUB_VFS		= 0x4000000,	/* virtual file system*/
 	SI_SUB_CLOCKS		= 0x4800000,	/* real time and stat
clocks*/


The result of this was that old .o  drivers are initialise at sequence 
0x2400000 but the device framework is not initialised until 0x3100000.

my patch shifts all the numbers back to below that that binary
,o files would be compiled with, thus ensuring that
the world is ready for them when they initialise.

The hardest hit would be any drivers using the PCI compatibility shims
which core-dump on a null reference because the pci compatibility
shim devclass pointer is not yet initialised..

I'd like to check this in to 4.4++ as itwill allow anyone else with binary
.o drivers (No idea if there are any others) to use their 
dirvers without having to go back to their suppliers and pay "lots-o-cash"
to get them to recompile it. (If they still have the source).


Julian




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?Pine.BSF.4.21.0110111604380.37124-100000>