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>