Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 20 Apr 2013 04:13:06 +0000
From:      "Moore, Robert" <robert.moore@intel.com>
To:        Benjamin Lee <ben@b1c1l1.com>
Cc:        "freebsd-acpi@freebsd.org" <freebsd-acpi@freebsd.org>, "Guan, Chao" <chao.guan@intel.com>, "Zheng, Lv" <lv.zheng@intel.com>
Subject:   RE: panic: acpi_pci_link_srs_from_crs: can't put non-ISA IRQ 20 in legacy IRQ resource type)
Message-ID:  <94F2FBAB4432B54E8AACC7DFDE6C92E36FE42F37@FMSMSX153.amr.corp.intel.com>
In-Reply-To: <20130419202509.6a56d1d4@b1c1l1.com>
References:  <20130418124940.47e3618a@b1c1l1.com> <201304191131.49433.jhb@freebsd.org>	<20130419131849.7357c8f6@b1c1l1.com> <201304191726.31089.jhb@freebsd.org>	<20130419152110.213c7fbb@b1c1l1.com> <20130419155118.7bafe9fc@b1c1l1.com> <94F2FBAB4432B54E8AACC7DFDE6C92E36FE42E28@FMSMSX153.amr.corp.intel.com> <20130419163528.204bf3ff@b1c1l1.com> <94F2FBAB4432B54E8AACC7DFDE6C92E36FE42EA2@FMSMSX153.amr.corp.intel.com> <20130419172200.45d8601b@b1c1l1.com> <94F2FBAB4432B54E8AACC7DFDE6C92E36FE42EFF@FMSMSX153.amr.corp.intel.com> <20130419202509.6a56d1d4@b1c1l1.com>

next in thread | previous in thread | raw e-mail | index | archive | help
That's about as far as I can help.
Bob


> -----Original Message-----
> From: Benjamin Lee [mailto:ben@b1c1l1.com]
> Sent: Friday, April 19, 2013 8:25 PM
> To: Moore, Robert
> Cc: John Baldwin; freebsd-acpi@freebsd.org; Zheng, Lv; Guan, Chao
> Subject: Re: panic: acpi_pci_link_srs_from_crs: can't put non-ISA IRQ 20
> in legacy IRQ resource type)
>=20
> On Sat, 20 Apr 2013 01:44:42 +0000, "Moore, Robert"
> <robert.moore@intel.com> wrote:
> > Disassembling the DSDT, we have this code in the _SRS execution path:
> >
> >
> >             Method (SRSA, 1, Serialized)
> >             {
> >                 CreateWordField (Arg0, 0x05, INZ6)
> >
> >
> > This code causes the main exception that was first reported:
> >
> > ACPI Error: Field [INZ6] at 56 exceeds Buffer [NULL] size 48 (bits)
> > (20130418/dsopcode-326) [AcpiExec] Exception AE_AML_BUFFER_LIMIT
> > during execution of method [SRSA] Opcode [CreateWordField] @4
> >
> >
> > This code should not be a WORD field, it needs to be a BYTE field. This
> is because the incoming buffer (Arg0) is exactly 6 bytes long -- so a WOR=
D
> field at offset 5 will overrun the buffer.
> >
> > It looks like the code is attempting to access the last byte of the
> resource descriptor, which is the second byte of the EndTag.
> >
> >
> >
> >
> > Here is the fixed code:
> >
> >             Method (SRSA, 1, Serialized)
> >             {
> >                 CreateByteField (Arg0, 0x05, INZ6)
> >
> >
> >
> >
> > Recompiling the DSDT and executing resource command, there are no
> errors:
> [...]
> > So, this is obviously a rather serious bug in the DSDT that will need t=
o
> be addressed by the vendor. Chances are, there are a few more issues like
> this in the code.
> >
> > As far as workarounds -- I'm sorry, but we can't allow a buffer overrun=
,
> and we can't "guess" what the code is really attempting to do. The correc=
t
> execution is an abort with the exception AE_AML_BUFFER_LIMIT.
> >
> > I don't see any issues with the resource lengths, but I will double-
> check.
>=20
> Thank you!  I have modified my ASL to use CreateByteField in the SRSA
> method.
>=20
> Unfortunately, I'm now seeing the following:
>=20
> With 9.1-RELEASE, all ACPI errors are gone but devices still do not work
> (even though they appear to be getting the proper PCI IRQs now instead of
> ISA IRQs).  Nothing is complaining about AE_AML_BAD_RESOURCE_LENGTH, whic=
h
> confirms your observation that resource lengths in the ASL seem to be OK.
>=20
> 10-CURRENT is still triggering my ACPI_RESOURCE_TYPE_END_TAG hack (and
> devices are functioning), which might indicate a regression related to
> resource lengths.
>=20
> 9.1-RELEASE (fixed ASL) boot -v:
> http://www.b1c1l1.com/media/debug/20130419-fixedasl-9-boot.txt.gz
> 10-CURRENT (fixed ASL) boot -v:
> http://www.b1c1l1.com/media/debug/20130419-fixedasl-10-patched-boot.txt.g=
z
>=20
> In comparing the outputs, I see that 9.1-RELEASE prints 3 INTR messages:
>=20
> INTR: Adding local APIC 0 as a target
> INTR: Adding local APIC 0 as a target
> INTR: Adding local APIC 1 as a target
>=20
> while in 10-CURRENT I only see 1 INTR message:
>=20
> INTR: Adding local APIC 1 as a target
>=20
> which might be related to devices not working since they are being routed
> to lapic 0.
>=20
> > Bob
> >
> >
> >
> >
> >
> > > -----Original Message-----
> > > From: Moore, Robert
> > > Sent: Friday, April 19, 2013 5:52 PM
> > > To: 'Benjamin Lee'
> > > Cc: John Baldwin; freebsd-acpi@freebsd.org; Zheng, Lv; Guan, Chao
> > > Subject: RE: panic: acpi_pci_link_srs_from_crs: can't put non-ISA
> > > IRQ 20 in legacy IRQ resource type)
> > >
> > > I was able to quickly reproduce the _CRS/_SRS problem with the AUBA
> > > device. I would imagine that this would fail on Windows also, as the
> > > basic model of read(_CRS)/modify/write(_SRS) is fairly standard.
> > > Unless something else is going on, of course.
> > >
> > > Our debugger has a command to do this:
> > >
> > >
> > > - resource \_SB_.PCI0.AUBA
> > >
> > > Device: \_SB_.PCI0.AUBA
> > > Evaluating _CRS
> > >   rscalc-0663 [04] RsGetListLength       : Type 20, AmlLength 04
> > > InternalLength 10
> > >   rslist-0217 [05] RsConvertAmlToResource: Type 20, AmlLength 04
> > > InternalLength 10
> > >   rslist-0217 [05] RsConvertAmlToResource: Type 78, AmlLength 02
> > > InternalLength 0C
> > >   rscalc-0663 [04] RsGetListLength       : Type 20, AmlLength 04
> > > InternalLength 10
> > >   rslist-0217 [05] RsConvertAmlToResource: Type 20, AmlLength 04
> > > InternalLength 10
> > >   rslist-0217 [05] RsConvertAmlToResource: Type 78, AmlLength 02
> > > InternalLength 0C
> > >
> > > [00] IRQ Resource
> > >           Descriptor Length : 03
> > >                  Triggering : Level
> > >                    Polarity : ActiveLow
> > >                     Sharing : Shared
> > >             Interrupt Count : 00
> > >              Interrupt List :
> > >
> > > [01] EndTag Resource
> > > Resource Conversion Comparison:
> > >   rscalc-0663 [04] RsGetListLength       : Type 20, AmlLength 04
> > > InternalLength 10
> > >   rslist-0217 [05] RsConvertAmlToResource: Type 20, AmlLength 04
> > > InternalLength 10
> > >   rslist-0217 [05] RsConvertAmlToResource: Type 78, AmlLength 02
> > > InternalLength 0C Evaluating _SRS ACPI Error: Field [INZ6] at 56
> > > exceeds Buffer [NULL] size 48 (bits) (20130418/dsopcode-326)
> > > [AcpiExec] Exception AE_AML_BUFFER_LIMIT during execution of method
> > > [SRSA] Opcode [CreateWordField] @4
> > >
> > > **** Exception AE_AML_BUFFER_LIMIT during execution of method
> > > [\_SB_.PCI0.SRSA] (Node 004B7B50)
> > >
> > > Method Execution Stack:
> > >     Method [SRSA] executing: [SRSA] @00000 #008B:  CreateWordField
> > > (Arg0, 0x05, INZ6)
> > >     Method [_SRS] executing: Call to method [\_SB_.PCI0.SRSA] (Node
> > > 004B7B50)
> > >
> > > Local Variables for method [SRSA]:
> > >     Local0: 00000000 <Null Object>
> > >     Local1: 00000000 <Null Object>
> > >     Local2: 00000000 <Null Object>
> > >     Local3: 00000000 <Null Object>
> > >     Local4: 00000000 <Null Object>
> > >     Local5: 00000000 <Null Object>
> > >     Local6: 00000000 <Null Object>
> > >     Local7: 00000000 <Null Object>
> > >
> > > Arguments for Method [SRSA]:  (1 arguments defined, max concurrency =
=3D
> 0)
> > >     Arg0:   004F4840 <Obj>             Buffer(6) 23 00 00 18 79 00
> > >     Arg1:   00000000 <Null Object>
> > >     Arg2:   00000000 <Null Object>
> > >     Arg3:   00000000 <Null Object>
> > >     Arg4:   00000000 <Null Object>
> > >     Arg5:   00000000 <Null Object>
> > >     Arg6:   00000000 <Null Object>
> > >
> > > ACPI Error: Method parse/execution failed [\_SB_.PCI0.SRSA] (Node
> > > 004B7B50), AE_AML_BUFFER_LIMIT (20130418/psparse-632) ACPI Error:
> > > Method parse/execution failed [\_SB_.PCI0.AUBA._SRS] (Node
> > > 004BEB50), AE_AML_BUFFER_LIMIT (20130418/psparse-632)
> AcpiSetCurrentResources failed:
> > > AE_AML_BUFFER_LIMIT Evaluating _PRS
> > >   rscalc-0663 [04] RsGetListLength       : Type 89, AmlLength 15
> > > InternalLength 28
> > >   rslist-0217 [05] RsConvertAmlToResource: Type 89, AmlLength 15
> > > InternalLength 28
> > >   rslist-0217 [05] RsConvertAmlToResource: Type 78, AmlLength 02
> > > InternalLength 0C
> > >
> > > [00] Extended IRQ Resource
> > >                        Type : ResourceConsumer
> > >                  Triggering : Level
> > >                    Polarity : ActiveLow
> > >                     Sharing : Shared
> > >       Resource Source Index : 00
> > >             Resource Source : [Not Specified]
> > >             Interrupt Count : 04
> > >                     Dword00 : 00000014
> > >                     Dword01 : 00000015
> > >                     Dword02 : 00000016
> > >                     Dword03 : 00000017
> > >
> > > [01] EndTag Resource
> > > -
> > >
> > >
> > >
> > > > -----Original Message-----
> > > > From: Benjamin Lee [mailto:ben@b1c1l1.com]
> > > > Sent: Friday, April 19, 2013 5:22 PM
> > > > To: Moore, Robert
> > > > Cc: John Baldwin; freebsd-acpi@freebsd.org
> > > > Subject: Re: panic: acpi_pci_link_srs_from_crs: can't put non-ISA
> > > > IRQ
> > > > 20 in legacy IRQ resource type)
> > > >
> > > > On Sat, 20 Apr 2013 00:09:55 +0000, "Moore, Robert"
> > > > <robert.moore@intel.com> wrote:
> > > > > Can you send the actual binary DSDT or the ASCII acpidump (not
> > > > > disassembled)
> > > >
> > > > I missed this earlier, but I just noticed _OS and _OSI checks for
> > > Windows.
> > > > I'll need to do some testing with hw.acpi.osname.
> > > >
> > > > Here is the binary DSDT:
> > > >
> > > > http://www.b1c1l1.com/media/debug/20130419-nvidia.dsdt
> > > >
> > > > >
> > > > >
> > > > > > -----Original Message-----
> > > > > > From: Benjamin Lee [mailto:ben@b1c1l1.com]
> > > > > > Sent: Friday, April 19, 2013 4:35 PM
> > > > > > To: Moore, Robert
> > > > > > Cc: John Baldwin; freebsd-acpi@freebsd.org
> > > > > > Subject: Re: panic: acpi_pci_link_srs_from_crs: can't put
> > > > > > non-ISA IRQ 20 in legacy IRQ resource type)
> > > > > >
> > > > > > On Fri, 19 Apr 2013 23:00:07 +0000, "Moore, Robert"
> > > > > > <robert.moore@intel.com> wrote:
> > > > > > > No, the length must be set in all descriptors, end tag
> included.
> > > > > >
> > > > > > Do you have any pointers on how I can fix my ASL?  Where do I
> > > > > > find the end tags and what should I set the lengths to?
> > > > > >
> > > > > > Here is the output from acpidump -dt:
> > > > > > http://www.b1c1l1.com/media/debug/20130418-nvidia.asl.gz
> > > > > >
> > > > > > >
> > > > > > > > -----Original Message-----
> > > > > > > > From: owner-freebsd-acpi@freebsd.org
> > > > > > > > [mailto:owner-freebsd- acpi@freebsd.org] On Behalf Of
> > > > > > > > Benjamin Lee
> > > > > > > > Sent: Friday, April 19, 2013 3:51 PM
> > > > > > > > To: John Baldwin
> > > > > > > > Cc: freebsd-acpi@freebsd.org
> > > > > > > > Subject: Re: panic: acpi_pci_link_srs_from_crs: can't put
> > > > > > > > non-ISA IRQ 20 in legacy IRQ resource type)
> > > > > > > >
> > > > > > > > On Fri, 19 Apr 2013 15:21:10 -0700, Benjamin Lee
> > > > > > > > <ben@b1c1l1.com>
> > > > > > wrote:
> > > > > > > > > On Fri, 19 Apr 2013 17:26:31 -0400, John Baldwin
> > > > > > > > > <jhb@freebsd.org>
> > > > > > > > wrote:
> > > > > > > > > > On Friday, April 19, 2013 4:18:49 pm Benjamin Lee wrote=
:
> > > > > > > > > > > On Fri, 19 Apr 2013 11:31:49 -0400, John Baldwin
> > > > > > > > > > > <jhb@freebsd.org>
> > > > > > > > wrote:
> > > > > > > > > > > > On Thursday, April 18, 2013 3:49:40 pm Benjamin
> > > > > > > > > > > > Lee
> > > wrote:
> > > > > > > > > > > > > I have a system that panics on boot with
> > > > > > > > > > > > > 10-CURRENT and boots with many ACPI error
> > > > > > > > > > > > > messages and non-functional devices with
> > > > > > > > 9.1-RELEASE.
> > > > > > > > > > > > >
> > > > > > > > > > > > > Motherboard is Foxconn C51XEM2AA (NVIDIA nForce
> > > > > > > > > > > > > 590) desktop
> > > > > > > > board.
> > > > > > > > > > > [...]
> > > > > > > > > > > > > Even though 9.1-RELEASE boots successfully,
> > > > > > > > > > > > > devices such as the ehci USB controller and SATA
> > > > > > > > > > > > > controller do
> > > > not work.
> > > > > > > > > > > >
> > > > > > > > > > > > Ugh, your BIOS does unexpected things.  It uses a
> > > > > > > > > > > > _CRS for these pci link devices that uses a
> > > > > > > > > > > > "short" IRQ resource, but uses an extended IRQ
> > > > > > > > > > resource in
> > > > > > > > > > > > _PRS (and expects an extended one in _SRS).  We
> > > > > > > > > > > > use _CRS as a template for
> > > > > > > > > > the
> > > > > > > > > > > > resource to build.
> > > > > > > > > > > >
> > > > > > > > > > > > Try this patch.  It's a bit hackish, but it forces
> > > > > > > > > > > > us to not use _CRS as a template if _CRS uses a
> "short"
> > > > > > > > > > > > IRQ resource, but the link supports non-
> > > > > > > > > > ISA
> > > > > > > > > > > > IRQs.
> > > > > > > > > > > [...]
> > > > > > > > > > >
> > > > > > > > > > > Thanks, that fixed the panic and the system boots.
> > > > > > > > > > > Now it is complaining about
> > > > > > > > > > > AE_AML_BAD_RESOURCE_LENGTH and still unable to route
> > > > > > > > > > > IRQs, but it definitely looks better than the ACPI
> > > > > > > > > > > parsing
> > > > > > > > errors in 9:
> > > > > > > > > > >
> > > > > > > > > > > pcib0: allocated type 3 (0xdffff000-0xdfffffff) for
> > > > > > > > > > > rid
> > > > > > > > > > > 10 of
> > > > > > > > > > > pci0:0:10:0
> > > > > > > > > > > pcib0: matched entry for 0.10.INTA (src
> > > > > > > > > > > \_SB_.PCI0.AUBA:0)
> > > > > > > > > > > pci_link26: Picked IRQ 20 with weight 0
> > > > > > > > > > > pci_link26: Unable to route IRQs:
> > > > > > > > > > > AE_AML_BAD_RESOURCE_LENGTH
> > > > > > > > > > >
> > > > > > > > > > > Full boot -v output:
> > > > > > > > > > > http://www.b1c1l1.com/media/debug/20130419-10-patche
> > > > > > > > > > > d-
> > > > > > > > > > boot.txt.gz
> > > > > > > > > >
> > > > > > > > > > Can you add some printfs to the places that return the
> > > > > > > > > > AE_AML_BAD_RESOURCE_LENGTH to see which one is being
> > > > triggered?
> > > > > > > > > > (Just look for that constant in sys/contrib/dev/acpica
> > > > > > > > > > to find the possible places.)
> > > > > > > > >
> > > > > > > > > Is there a macro for dumping information about Resource
> > > > > > > > > or
> > > > > > > > > Resource->Data?  Here's what I have for now at
> > > > > > > > > sys/contrib/dev/acpica/resources/rscalc.c line 237:
> > > > > > > > >
> > > > > > > > > pcib0: matched entry for 0.10.INTA (src
> > > > > > > > > \_SB_.PCI0.AUBA:0)
> > > > > > > > > pci_link26: Picked IRQ 20 with weight 0
> > > > > > > > > rscalc.c:237
> > > > > > > > > Resource->Type: 7
> > > > > > > > > Resource->Length: 0
> > > > > > > > > pci_link26: Unable to route IRQs:
> > > > > > > > > AE_AML_BAD_RESOURCE_LENGTH
> > > > > > > > >
> > > > > > > > > All of the errors are from there and look identical
> > > > > > > > > (Type 7, Length
> > > > > > 0).
> > > > > > > > > Type 7 appears to be ACPI_RESOURCE_TYPE_END_TAG.
> > > > > > > >
> > > > > > > > This hack fixes everything (now the SATA controller works).
> > > > > > > > It seems that the Resource->Length check might not be
> > > > > > > > necessary for ACPI_RESOURCE_TYPE_END_TAG.
> > > > > > > >
> > > > > > > > blee@genesis /usr/src/sys/contrib/dev/acpica $ svn diff
> > > > > > > > Index: components/resources/rscalc.c
> > > > > > > >
> > > > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
> > > > =3D
> > > > > > > > --- components/resources/rscalc.c       (revision 249624)
> > > > > > > > +++ components/resources/rscalc.c       (working copy)
> > > > > > > > @@ -234,6 +234,15 @@
> > > > > > > >
> > > > > > > >          if (!Resource->Length)
> > > > > > > >          {
> > > > > > > > +            if (Resource->Type =3D=3D
> ACPI_RESOURCE_TYPE_END_TAG) {
> > > > > > > > +                TotalSize =3D AcpiGbl_AmlResourceSizes
> > > > > > > > + [Resource-
> > > > > > >Type];
> > > > > > > > +                printf("TotalSize: %u\n", TotalSize);
> > > > > > > > +                if (TotalSize !=3D 0) {
> > > > > > > > +                    printf("ACPI_RESOURCE_TYPE_END_TAG
> > > hack\n");
> > > > > > > > +                    *SizeNeeded =3D AmlSizeNeeded +
> TotalSize;
> > > > > > > > +                    return_ACPI_STATUS (AE_OK);
> > > > > > > > +                }
> > > > > > > > +            }
> > > > > > > >              return_ACPI_STATUS
> (AE_AML_BAD_RESOURCE_LENGTH);
> > > > > > > >          }
> > > > > > > >
> > > > > > > > Index: components/resources/rslist.c
> > > > > > > >
> > > > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
> > > > =3D
> > > > > > > > --- components/resources/rslist.c       (revision 249624)
> > > > > > > > +++ components/resources/rslist.c       (working copy)
> > > > > > > > @@ -203,6 +203,11 @@
> > > > > > > >
> > > > > > > >          if (!Resource->Length)
> > > > > > > >          {
> > > > > > > > +            if (Resource->Type =3D=3D
> ACPI_RESOURCE_TYPE_END_TAG) {
> > > > > > > > +                printf("ACPI_RESOURCE_TYPE_END_TAG hack
> 2\n");
> > > > > > > > +                return_ACPI_STATUS (AE_OK);
> > > > > > > > +            }
> > > > > > > > +
> > > > > > > >              ACPI_ERROR ((AE_INFO,
> > > > > > > >                  "Invalid zero length descriptor in
> > > > > > > > resource
> > > > > > list\n"));
> > > > > > > >              return_ACPI_STATUS
> > > > > > > > (AE_AML_BAD_RESOURCE_LENGTH);
>=20
>=20
> --
> Benjamin Lee
> http://www.b1c1l1.com/



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