From owner-acpi-jp@jp.FreeBSD.org Thu Jul  4 22:10:48 2002
Received: (from daemon@localhost)
	by castle.jp.FreeBSD.org (8.11.6+3.4W/8.11.3) id g64DAma58631;
	Thu, 4 Jul 2002 22:10:48 +0900 (JST)
	(envelope-from owner-acpi-jp@jp.FreeBSD.org)
Received: from tasogare.imasy.or.jp (root@tasogare.imasy.or.jp [202.227.24.5])
	by castle.jp.FreeBSD.org (8.11.6+3.4W/8.11.3) with ESMTP/inet id g64DAkn58626
	for <acpi-jp@jp.FreeBSD.org>; Thu, 4 Jul 2002 22:10:47 +0900 (JST)
	(envelope-from iwasaki@jp.FreeBSD.org)
Received: from localhost (iwa@tasogare.imasy.or.jp [202.227.24.5])
	by tasogare.imasy.or.jp (8.11.6+3.4W/8.11.6/tasogare) with ESMTP/inet id g64DAIZ08868;
	Thu, 4 Jul 2002 22:10:20 +0900 (JST)
	(envelope-from iwasaki@jp.FreeBSD.org)
Date: Thu, 04 Jul 2002 22:09:52 +0900 (JST)
Message-Id: <20020704.220952.104026566.iwasaki@jp.FreeBSD.org>
To: shizukakudo_99@yahoo.com
Cc: freebsd-current@freebsd.org, acpi-jp@jp.FreeBSD.org
From: Mitsuru IWASAKI <iwasaki@jp.FreeBSD.org>
In-Reply-To: <20020704.120342.38720157.iwasaki@jp.FreeBSD.org>
References: <20020702185518.87573.qmail@web11402.mail.yahoo.com>
	<20020703.142736.112630398.iwasaki@jp.FreeBSD.org>
	<20020704.120342.38720157.iwasaki@jp.FreeBSD.org>
X-Mailer: Mew version 2.1 on Emacs 20.7 / Mule 4.0 (HANANOEN)
Mime-Version: 1.0
Content-Type: Text/Plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Reply-To: acpi-jp@jp.FreeBSD.org
Precedence: list
X-Distribute: distribute version 2.1 (Alpha) patchlevel 24e+020630
X-Sequence: acpi-jp 1662
Subject: [acpi-jp 1662] Re: ASUS CUSL2 panic on acpi
Errors-To: owner-acpi-jp@jp.FreeBSD.org
Sender: owner-acpi-jp@jp.FreeBSD.org
X-Originator: iwasaki@jp.FreeBSD.org

My analysis was finished.  Please try this patch.

--- exfield.c-	Thu Jul  4 21:54:24 2002
+++ exfield.c	Thu Jul  4 21:55:02 2002
@@ -200,7 +200,7 @@
     /* Handle both ACPI 1.0 and ACPI 2.0 Integer widths */
 
     IntegerSize = sizeof (ACPI_INTEGER);
-    if (WalkState->MethodNode->Flags & ANOBJ_DATA_WIDTH_32)
+    if (WalkState->MethodNode != NULL && WalkState->MethodNode->Flags & ANOBJ_DATA_WIDTH_32)
     {
         /*
          * We are running a method that exists in a 32-bit ACPI table.



BTW, this bug already fixed in 20020517 version.

> > > acpi0: <ASUS   CUSL2   > on motherboard
> > > 
> > > 
> > > Fatal trap 12: page fault while in kernel mode
> > > fault virtual address   = 0x16
> > > fault code              = supervisor read, page not present
> > > instruction pointer     = 0x8:0xc04f9aca
> > > stack pointer           = 0x10:0xc054ea14
> > > frame pointer           = 0x10:0xc054ea34
> > > code segment            = base 0x0, limit 0xfffff, type 0x1b
> > >                         = DPL 0, pres 1, def32 1, gran 1
> > > processor eflags        = interrupt enabled, resume, IOPL = 0
> > > current process         = 0 (swapper)
> > > kernel: type 12 trap, code=0
> > > Stopped at      AcpiExReadDataFromField+0x5a:   movzbl  0x16(%eax),%eax
> > > db> trace
> > > AcpiExReadDataFromField(c0f00400,c25da200,c054ea50,c25e50c0,0) at AcpiExReadDataFromField+0x5a
> 
> # if my understanding on i386 asm is correct,
> I think this is at (exfield.c):
> 203:    if (WalkState->MethodNode->Flags & ANOBJ_DATA_WIDTH_32)
> where WalkState->MethodNode is NULL, this caused page fault.
> 
> I'm waiting for further debug info. but I'll try to find where
> WalkState->MethodNode suppose to be set...

WalkState->MethodNode was initialized to NULL in AcpiDsInitAmlWalk()
which called by AcpiDsExecuteArguments().  AcpiExReadDataFromField()
assumes that WalkState->MethodNode always has a correct pointer.
That's the problem, I think.

ACPI_STATUS
AcpiDsExecuteArguments (
    ACPI_NAMESPACE_NODE     *Node,
    ACPI_NAMESPACE_NODE     *ScopeNode,
    UINT32                  AmlLength,
    UINT8                   *AmlStart)

    ...

    Status = AcpiDsInitAmlWalk (WalkState, Op, NULL, AmlStart,
                    AmlLength, NULL, NULL, 3);
    ...

AcpiDsInitAmlWalk (
    ACPI_WALK_STATE         *WalkState,
    ACPI_PARSE_OBJECT       *Op,
    ACPI_NAMESPACE_NODE     *MethodNode,
    UINT8                   *AmlStart,
    UINT32                  AmlLength,
    ACPI_OPERAND_OBJECT     **Params,
    ACPI_OPERAND_OBJECT     **ReturnObjDesc,
    UINT32                  PassNumber)

Thanks
