Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 16 May 2011 16:19:53 +0000 (UTC)
From:      Nathan Whitehorn <nwhitehorn@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r221994 - projects/pseries/powerpc/aim
Message-ID:  <201105161619.p4GGJrgp089924@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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);



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