svn commit: r221994 - projects/pseries/powerpc/aim

Nathan Whitehorn nwhitehorn at FreeBSD.org
Mon May 16 16:19:53 UTC 2011


Author: nwhitehorn
Date: Mon May 16 16:19:53 2011
New Revision: 221994
URL: http://svn.freebsd.org/changeset/base/221994

Log:
  Keep track of useful information like where preloaded metadata and modules
  are. On some firmwares (SLOF) OF_claim() does not reduce the size of the
  available array, meaning that these data (a) can be overwritten and (b)
  are not mapped into the kernel's address space except by accident in the
  direct-mapped case. loader provides the kernel with the end of the
  metadata + modules, mapped immediately after the kernel, so just replace
  endkernel by loader's KERNEND variable, if available.
  
  The kernel now boots on emulated POWER7 hardware to probing the device
  tree (where it stops due to lack of drivers) without any hacks.
  
  Note: this patch also affects PS3, and should be merged to HEAD after some
  more testing.

Modified:
  projects/pseries/powerpc/aim/machdep.c

Modified: projects/pseries/powerpc/aim/machdep.c
==============================================================================
--- projects/pseries/powerpc/aim/machdep.c	Mon May 16 16:18:40 2011	(r221993)
+++ projects/pseries/powerpc/aim/machdep.c	Mon May 16 16:19:53 2011	(r221994)
@@ -251,7 +251,6 @@ powerpc_init(vm_offset_t startkernel, vm
     vm_offset_t basekernel, void *mdp)
 {
 	struct		pcpu *pc;
-	vm_offset_t	end;
 	void		*generictrap;
 	size_t		trap_offset;
 	void		*kmdp;
@@ -263,7 +262,6 @@ powerpc_init(vm_offset_t startkernel, vm
 	int		ppc64;
 	#endif
 
-	end = 0;
 	kmdp = NULL;
 	trap_offset = 0;
 	cacheline_warn = 0;
@@ -279,7 +277,8 @@ powerpc_init(vm_offset_t startkernel, vm
 		if (kmdp != NULL) {
 			boothowto = MD_FETCH(kmdp, MODINFOMD_HOWTO, int);
 			kern_envp = MD_FETCH(kmdp, MODINFOMD_ENVP, char *);
-			end = MD_FETCH(kmdp, MODINFOMD_KERNEND, vm_offset_t);
+			endkernel = ulmax(endkernel, MD_FETCH(kmdp,
+			    MODINFOMD_KERNEND, vm_offset_t));
 #ifdef DDB
 			ksym_start = MD_FETCH(kmdp, MODINFOMD_SSYM, uintptr_t);
 			ksym_end = MD_FETCH(kmdp, MODINFOMD_ESYM, uintptr_t);


More information about the svn-src-projects mailing list