Date: Fri, 29 Oct 2010 08:19:08 +0300 From: Andriy Gapon <avg@icyb.net.ua> To: Lin Ming <ming.m.lin@intel.com> Cc: freebsd-acpi@FreeBSD.org, "Moore, Robert" <robert.moore@intel.com>, Jung-uk Kim <jkim@FreeBSD.org> Subject: Re: MacBookPro 5,1 Message-ID: <4CCA594C.7050806@icyb.net.ua> In-Reply-To: <1288312476.13315.15.camel@minggr.sh.intel.com> References: <201010121209.06397.hselasky@c2i.net> <1288278300.2459.19.camel@localhost> <1288279472.2459.22.camel@localhost> <201010281810.23668.hselasky@c2i.net> <1288312476.13315.15.camel@minggr.sh.intel.com>
index | next in thread | previous in thread | raw e-mail
on 29/10/2010 03:34 Lin Ming said the following:
> Hi, guys
>
> Hans and I have found the root cause of this bug.
I believe that there could be a root for a root :-)
> The ResourceSource->StringLength set by up layer driver is wrong, see the patch below.
>
> Below patch fixes the bug and on Hans' machine it prints,
>
> Bug: the passed in resource buffer is wrong, Resource->StringLength=1, but the real string length is 10
> Bug: the passed in resource buffer is wrong, Resource->StringLength=1, but the real string length is 10
> Bug: the passed in resource buffer is wrong, Resource->StringLength=1, but the real string length is 10
> Bug: the passed in resource buffer is wrong, Resource->StringLength=1, but the real string length is 8
> Bug: the passed in resource buffer is wrong, Resource->StringLength=1, but the real string length is 10
> Bug: the passed in resource buffer is wrong, Resource->StringLength=1, but the real string length is 10
> Bug: the passed in resource buffer is wrong, Resource->StringLength=1, but the real string length is 10
> Bug: the passed in resource buffer is wrong, Resource->StringLength=1, but the real string length is 10
> Bug: the passed in resource buffer is wrong, Resource->StringLength=1, but the real string length is 10
>
> The full dmesg also attached.
>
> Kim,
>
> Could you write a fix in up layer code(seems in acpi_pci_link_route_irqs)?
>
> Thanks.
>
> diff --git a/source/components/resources/rscalc.c b/source/components/resources/rscalc.c
> index 3215c9e..e68b5af 100644
> --- a/source/components/resources/rscalc.c
> +++ b/source/components/resources/rscalc.c
> @@ -203,7 +203,13 @@ AcpiRsStructOptionLength (
> */
> if (ResourceSource->StringPtr)
> {
> - return ((ACPI_RS_LENGTH) (ResourceSource->StringLength + 1));
> + if (ACPI_STRLEN (ResourceSource->StringPtr) + 1 != ResourceSource->StringLength)
> + {
> + AcpiOsPrintf("Bug: the passed in resource buffer is wrong, ResourceSource->StringLength=%d, "
> + "but the real string length is %d\n",
> + ResourceSource->StringLength, ACPI_STRLEN (ResourceSource->StringPtr) + 1);
> + }
> + return ((ACPI_RS_LENGTH) ((ACPI_STRLEN (ResourceSource->StringPtr) + 1) + 1));
> }
>
> return (0);
>
As Hans has reported previously, it seems that resources for _SRS are prepared
by acpi_pci_link_srs_from_crs() in his case.
acpi_pci_link_srs_from_crs is a sufficiently small function that doesn't seem to
manipulate strings in any resources:
http://fxr.watson.org/fxr/source/dev/acpica/acpi_pci_link.c#L689
At this line
http://fxr.watson.org/fxr/source/dev/acpica/acpi_pci_link.c#L746
you can see that a resource is assigned from l_prs_template.
l_prs_template is populated in link_add_prs() function, which called to walk
over resources returned by _PRS:
http://fxr.watson.org/fxr/source/dev/acpica/acpi_pci_link.c#L499
http://fxr.watson.org/fxr/source/dev/acpica/acpi_pci_link.c#L269
http://fxr.watson.org/fxr/source/dev/acpica/acpi_pci_link.c#L324
So, it would seem that those incorrect lengths would come from evaluation of
_PRS by ACPICA code. But that's probably a naive conclusion, it could be that
we incorrectly manipulate a received resource.
It seems that the source of the trouble is resource template in BUFF, judging
from e.g. _PRS for LNK1 (in DSDT dump that Hans has provided).
I guess that we probably need more help with tracking this down further.
Could it be that we get or somehow insert/copy garbage as a content of a string
that should be empty?
--
Andriy Gapon
help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4CCA594C.7050806>
