Subject: Re: port-amd64/33927: -current/amd64 kernel reboots early in boot
To: Frank van der Linden <fvdl@NetBSD.org>
From: Matthias Drochner <M.Drochner@fz-juelich.de>
List: netbsd-bugs
Date: 07/13/2006 00:42:00
This is a multipart MIME message.
--==_Exmh_18046359692640
Content-Type: text/plain; charset=us-ascii
fvdl@NetBSD.org said:
> Ok, that narrows it down to changes that only affect the
> MULTIPROCESSOR case.
Didn't follow the thread from the beginning, but there was a change
by me which unfortunately affects multiprocessor systems: I changed
the kernel memory allocator to respect the execute permission bit.
(This used to work all the time for alpha.)
I don't understand all the details yet, but MP systems need some
pieces of memory mapped with execute permission; see the appended
patch.
sorry for any breakage
Matthias
--==_Exmh_18046359692640
Content-Type: text/plain ; name="amdmp.txt"; charset=us-ascii
Content-Description: amdmp.txt
Content-Disposition: attachment; filename="amdmp.txt"
Index: sys/arch/amd64/amd64/cpu.c
===================================================================
RCS file: /cvsroot/src/sys/arch/amd64/amd64/cpu.c,v
retrieving revision 1.10
diff -u -p -r1.10 cpu.c
--- sys/arch/amd64/amd64/cpu.c 7 Jun 2006 22:37:14 -0000 1.10
+++ sys/arch/amd64/amd64/cpu.c 12 Jul 2006 19:18:54 -0000
@@ -249,7 +249,8 @@ cpu_attach(parent, self, aux)
* structure, otherwise use the primary's.
*/
if (caa->cpu_role == CPU_ROLE_AP) {
- ci = malloc(sizeof(*ci), M_DEVBUF, M_WAITOK);
+ ci = (struct cpu_info *)uvm_km_alloc(kernel_map, sizeof(*ci),
+ 0, UVM_KMF_WIRED | UVM_KMF_EXEC);
memset(ci, 0, sizeof(*ci));
#if defined(MULTIPROCESSOR)
if (cpu_info[cpunum] != NULL)
@@ -289,7 +290,8 @@ cpu_attach(parent, self, aux)
/*
* Allocate UPAGES contiguous pages for the idle PCB and stack.
*/
- kstack = uvm_km_alloc(kernel_map, USPACE, 0, UVM_KMF_WIRED);
+ kstack = uvm_km_alloc(kernel_map, USPACE, 0,
+ UVM_KMF_WIRED|UVM_KMF_EXEC);
if (kstack == 0) {
if (caa->cpu_role != CPU_ROLE_AP) {
panic("cpu_attach: unable to allocate idle stack for"
--==_Exmh_18046359692640--