Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 3 Nov 2005 08:57:56 -0500
From:      John Baldwin <jhb@freebsd.org>
To:        freebsd-acpi@freebsd.org
Cc:        jkim@freebsd.org, freebsd-current@freebsd.org, robert.moore@intel.com, keramida@linux.gr
Subject:   Re: Panic on boot with new ACPI-CA
Message-ID:  <200511030857.58338.jhb@freebsd.org>
In-Reply-To: <20051103.114712.74756421.haro@h4.dion.ne.jp>
References:  <436961FD.3040605@root.org> <20051103020902.GA29536@flame.pc> <20051103.114712.74756421.haro@h4.dion.ne.jp>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wednesday 02 November 2005 09:47 pm, Munehiro Matsuda wrote:
> From: Giorgos Keramidas <keramida@linux.gr>
> Date: Thu, 3 Nov 2005 04:09:02 +0200
>
> ::On 2005-11-03 03:47, Giorgos Keramidas <keramida@ceid.upatras.gr> wrote:
> ::> On 2005-11-02 17:03, Nate Lawson <nate@root.org> wrote:
> ::> > As I mentioned to Jung-uk, the problem is likely an error in
> ::> > acpi-ca modifying memory after it has freed it.  The way to
> ::> > track this down is to enable memguard(9).  See the man page for
> ::> > info.  You need to add options DEBUG_MEMGUARD to your kernel,
> ::> > set the malloc type to watch to M_ACPICA, and rebuild your
> ::> > kernel and modules.  Memguard sets page permissions so we can
> ::> > catch the culprit who is modifying the memory.
> ::>
> ::> This is exactly the messgae printed on my console at panic time
> ::> -- of memory modified after free.  I'm building a kernel with
> ::> MEMGUARD now, but it's probably going to be a bit hard to get a
> ::> kernel dump, because the panic happens before disks are available
> ::> and I don't have a serial console here.
> ::
> ::Does the following look ok for using memguard(9) with M_ACPICA?
> ::
> ::%%% begin acpica-memguard.patch
> ::Index: kern/kern_malloc.c
> ::===================================================================
> ::RCS file: /home/ncvs/src/sys/kern/kern_malloc.c,v
> ::retrieving revision 1.148
> ::diff -u -r1.148 kern_malloc.c
> ::--- kern/kern_malloc.c	20 Oct 2005 21:28:31 -0000	1.148
> ::+++ kern/kern_malloc.c	3 Nov 2005 02:04:02 -0000
> ::@@ -62,6 +62,8 @@
> :: #include <vm/uma_int.h>
> :: #include <vm/uma_dbg.h>
> ::
> ::+MALLOC_DECLARE(M_ACPICA);
> ::+
> :: #ifdef DEBUG_MEMGUARD
> :: #include <vm/memguard.h>
> :: #endif
> ::@@ -305,7 +307,7 @@
> ::
> :: #ifdef DEBUG_MEMGUARD
> :: 	/* XXX CHANGEME! */
> ::-	if (mtp == M_SUBPROC)
> ::+	if (mtp == M_ACPICA)
> :: 		return memguard_alloc(size, flags);
> :: #endif
> ::
> ::%%% end acpica-memguard.patch
>
> Hi,
>
> There are few more "CHANGEME!" places.
> I used following:
>
> @@ -64,6 +64,7 @@
>
>  #ifdef DEBUG_MEMGUARD
>  #include <vm/memguard.h>
> +MALLOC_DECLARE(M_ACPICA);
>  #endif
>
>  #if defined(INVARIANTS) && defined(__i386__)
> @@ -305,7 +306,7 @@
>
>  #ifdef DEBUG_MEMGUARD
>  	/* XXX CHANGEME! */
> -	if (mtp == M_SUBPROC)
> +	if (mtp == M_ACPICA)
>  		return memguard_alloc(size, flags);
>  #endif
>
> @@ -360,7 +361,7 @@
>
>  #ifdef DEBUG_MEMGUARD
>  	/* XXX CHANGEME! */
> -	if (mtp == M_SUBPROC) {
> +	if (mtp == M_ACPICA) {
>  		memguard_free(addr);
>  		return;
>  	}
> @@ -424,7 +425,7 @@
>
>  #ifdef DEBUG_MEMGUARD
>  /* XXX: CHANGEME! */
> -if (mtp == M_SUBPROC) {
> +if (mtp == M_ACPICA) {
>  	slab = NULL;
>  	alloc = size;
>  } else {

Someone should fix it so that the type is a kernel option so you can do:

options 	MEMGUARD=M_ACPICA

or some such.

-- 
John Baldwin <jhb@FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve"  =  http://www.FreeBSD.org



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