From owner-freebsd-acpi@FreeBSD.ORG Fri Oct 22 02:42:39 2010 Return-Path: Delivered-To: freebsd-acpi@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 0CEE71065672 for ; Fri, 22 Oct 2010 02:42:39 +0000 (UTC) (envelope-from ming.m.lin@intel.com) Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by mx1.freebsd.org (Postfix) with ESMTP id DE0528FC19 for ; Fri, 22 Oct 2010 02:42:38 +0000 (UTC) Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga101.fm.intel.com with ESMTP; 21 Oct 2010 19:42:38 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="4.58,221,1286175600"; d="scan'208";a="619173493" Received: from minggr.sh.intel.com (HELO [10.239.13.26]) ([10.239.13.26]) by fmsmga002.fm.intel.com with ESMTP; 21 Oct 2010 19:42:37 -0700 From: Lin Ming To: Hans Petter Selasky In-Reply-To: <201010212257.58588.hselasky@c2i.net> References: <201010121209.06397.hselasky@c2i.net> <1287632360.6530.3103.camel@minggr.sh.intel.com> <1287645147.6530.3107.camel@minggr.sh.intel.com> <201010212257.58588.hselasky@c2i.net> Content-Type: text/plain; charset="UTF-8" Date: Fri, 22 Oct 2010 10:39:24 +0800 Message-ID: <1287715164.6530.3112.camel@minggr.sh.intel.com> Mime-Version: 1.0 X-Mailer: Evolution 2.30.2 Content-Transfer-Encoding: 7bit Cc: "freebsd-acpi@freebsd.org" , "Moore, Robert" Subject: Re: MacBookPro 5,1 X-BeenThere: freebsd-acpi@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: ACPI and power management development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 22 Oct 2010 02:42:39 -0000 On Fri, 2010-10-22 at 04:57 +0800, Hans Petter Selasky wrote: > On Thursday 21 October 2010 09:12:27 Lin Ming wrote: > > On Thu, 2010-10-21 at 11:39 +0800, Lin Ming wrote: > > > On Wed, 2010-10-20 at 16:06 +0800, Hans Petter Selasky wrote: > > > > On Wednesday 20 October 2010 08:36:31 Lin Ming wrote: > > > > > On Wed, 2010-10-20 at 14:34 +0800, Hans Petter Selasky wrote: > > > > > > On Tuesday 19 October 2010 07:47:02 Lin Ming wrote: > > > > > > > On Tue, 2010-10-19 at 04:21 +0800, Hans Petter Selasky wrote: > > > > > > > > On Monday 18 October 2010 02:01:09 Moore, Robert wrote: > > > > > > > > > Can you send us the acpidump for the machine? > > > > > > > > > > > > > > > > > > Also, tell us which control method is failing. > > > > > > > > > > > > > > > > > > Thanks > > > > > > > > > > > > > > > > Hi, > > > > > > > > > > > > > > > > Please find attached dump of ACPI tables. > > > > > > > > > > > > > > > > It is the function AcpiRsCreateAmlResources() which writes > > > > > > > > beyond the buffer it allocates. > > > > > > > > > > > > > > Could you enable AML debug output to get more info? > > > > > > > But I don't know how to enable it on FreeBSD. > > > > > > > > > > > > > > In Linux, the AML debug output is enabled with kernel boot > > > > > > > parameters like below. > > > > > > > acpi.debug_layer=0xffffffff acpi.debug_level=0xffffffff > > > > > > > > > > > > > > FreeBSD may have some similar boot parameters. > > > > > > > > > > > > I've enabled the debug prints just around the failing function. > > > > > > Here is the > > > > > > > > > > > result: > > > > > What's the kernel parameters are you using? > > > > > There should be a lot of AML debug output. > > > > > > > > Hi, > > > > > > > > During the function call that overwrites it's buffer, there are no more > > > > debug prints than shown in the code, even with all debug prints on. > > > > Where should I add more debug prints? > > > > > > I'm trying to reproduce this bug in the acpi simulator(acpiexec). > > > Will get back to you. > > > > Hi, > > > > Could you apply below debug patch and attach the output? > > I'll try to reproduce this bug with the output. > > > > It will print something like below, > > > > Passed in resource buffer length=136 > > Buffer start > > f 0 0 0 44 0 0 0 1 0 0 0 1 0 1 0 45 ee 44 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 > > 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 0 > > 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 > > 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 > > Buffer end > > > > Thanks. > > Here is the relevant output. First note, the buffer length is 512 and > (uint8_t)512 = 0, so I modified the code to print out the 512 bytes. > > > Passed in resource buffer length=512 > Buffer start > 0f 00 00 00 40 00 00 00 01 00 01 01 01 17 01 00 38 b0 17 03 00 ff ff ff 11 00 > 00 00 11 00 00 00 12 00 00 00 13 00 00 00 14 00 00 00 15 00 00 00 16 00 00 00 > 17 00 00 0 > 0 00 00 00 00 00 00 00 00 07 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 07 > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 > 00 00 00 00 > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 > 00 00 00 > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 > 00 00 00 0 > 0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 > 00 00 00 00 > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 > 00 00 00 > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 > 00 00 00 0 > 0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 > 00 00 00 00 > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 > 00 00 00 > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 > Buffer end Unfortunately, I can't reproduce it in the simulator(acpiexec). Anyway, here is the debug patch I tried and the output as below. $acpiexec dsdt.mbp51.bin Set resource for \_SB_.PCI0.LNK1: success Set resource for \_SB_.PCI0.LNK2: success Set resource for \_SB_.PCI0.LNK3: success Set resource for \_SB_.PCI0.LNK4: success Set resource for \_SB_.PCI0.Z003: success Set resource for \_SB_.PCI0.Z004: success Set resource for \_SB_.PCI0.Z005: success Set resource for \_SB_.PCI0.Z006: success Set resource for \_SB_.PCI0.Z007: success Set resource for \_SB_.PCI0.Z008: success Set resource for \_SB_.PCI0.Z009: success Set resource for \_SB_.PCI0.Z00A: success Set resource for \_SB_.PCI0.Z00B: success Set resource for \_SB_.PCI0.Z00C: success Set resource for \_SB_.PCI0.Z00D: success Set resource for \_SB_.PCI0.Z00E: success Set resource for \_SB_.PCI0.Z00F: success Set resource for \_SB_.PCI0.Z00G: success Set resource for \_SB_.PCI0.Z00H: success Set resource for \_SB_.PCI0.Z00I: success Set resource for \_SB_.PCI0.Z00J: success Set resource for \_SB_.PCI0.Z00K: success Set resource for \_SB_.PCI0.Z00L: success Set resource for \_SB_.PCI0.Z00M: success Set resource for \_SB_.PCI0.Z00N: success Set resource for \_SB_.PCI0.Z00O: success Set resource for \_SB_.PCI0.Z00P: success Set resource for \_SB_.PCI0.Z00Q: success Set resource for \_SB_.PCI0.Z00R: success Set resource for \_SB_.PCI0.Z00S: success Set resource for \_SB_.PCI0.Z00T: success Set resource for \_SB_.PCI0.Z00U: success Set resource for \_SB_.PCI0.LSMB: success Set resource for \_SB_.PCI0.LUS0: success Set resource for \_SB_.PCI0.LUS2: success Set resource for \_SB_.PCI0.LMAC: success Set resource for \_SB_.PCI0.LAZA: success Set resource for \_SB_.PCI0.LGPU: success Set resource for \_SB_.PCI0.LPID: success Set resource for \_SB_.PCI0.LSI0: success Set resource for \_SB_.PCI0.LSI1: success Set resource for \_SB_.PCI0.Z000: success Set resource for \_SB_.PCI0.Z001: success Set resource for \_SB_.PCI0.LPMU: success diff --git a/source/tools/acpiexec/aeexec.c b/source/tools/acpiexec/aeexec.c index baf1aeb..5f07412 100644 --- a/source/tools/acpiexec/aeexec.c +++ b/source/tools/acpiexec/aeexec.c @@ -517,6 +517,70 @@ AeHardwareInterfaces ( AE_CHECK_OK (AcpiReadBitRegister, Status); } +static UINT8 TestBuffer[] = { +0x0f,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x01,0x00,0x01,0x01,0x01,0x17,0x01,0x00,0x38,0xb0,0x17,0x03,0x00,0xff,0xff,0xff,0x11,0x00, +0x00,0x00,0x11,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x16,0x00,0x00,0x00, +0x17,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}; + +static ACPI_STATUS +SRSTestCallback ( + ACPI_HANDLE ObjHandle, + UINT32 NestingLevel, + void *Context, + void **ReturnValue) +{ + ACPI_STATUS Status; + ACPI_NAMESPACE_NODE *Node = (ACPI_NAMESPACE_NODE *) ObjHandle; + ACPI_BUFFER *Buffer = (ACPI_BUFFER*)Context; + ACPI_BUFFER PathBuffer = { ACPI_ALLOCATE_BUFFER, NULL }; + + if (!Node || strncmp(Node->Name.Ascii, "_SRS", 4) || !Node->Parent) { + return AE_OK; + } + + Status = AcpiGetName(Node->Parent, ACPI_FULL_PATHNAME, &PathBuffer); + if (ACPI_FAILURE (Status)) + return Status; + AcpiOsPrintf("Set resource for %s: ", (char*)PathBuffer.Pointer); + + Status = AcpiSetCurrentResources(Node->Parent, Buffer); + if (ACPI_FAILURE (Status)) { + AcpiOsPrintf("error, status=0x%x\n", Status); + } else { + AcpiOsPrintf("success\n"); + } + + return AE_OK; +} + +static void SRSTest(void) +{ + ACPI_BUFFER Buffer = {sizeof(TestBuffer), TestBuffer}; + ACPI_RESOURCE *Res = (ACPI_RESOURCE*)TestBuffer; + + Res->Data.ExtendedIrq.ResourceSource.StringPtr = ""; + + (void) AcpiWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX, + SRSTestCallback, NULL, (void *) &Buffer, NULL); +} /****************************************************************************** * @@ -540,6 +604,8 @@ AeMiscellaneousTests ( ACPI_STATISTICS Stats; + SRSTest(); + AeHardwareInterfaces (); AeGenericRegisters (); AeSetupConfiguration (Ssdt3Code);