Panic on boot with new ACPI-CA
Munehiro Matsuda
haro at h4.dion.ne.jp
Wed Nov 2 18:47:17 PST 2005
From: Giorgos Keramidas <keramida at linux.gr>
Date: Thu, 3 Nov 2005 04:09:02 +0200
::On 2005-11-03 03:47, Giorgos Keramidas <keramida at ceid.upatras.gr> wrote:
::> On 2005-11-02 17:03, Nate Lawson <nate at 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 {
=------------------------------------------------------------------------------
_ _ Munehiro (haro) Matsuda
-|- /_\ |_|_| Internet Solution Dept., KGT Inc.
/|\ |_| |_|_| 2-8-8 Shinjuku Shinjuku-ku Tokyo 160-0022, Japan
Tel: +81-3-3225-0767 Fax: +81-3-3225-0740
More information about the freebsd-current
mailing list