[Bug 195159] nouveau incorrect ACPI usgage results in ACPI Error : AE_AML_PACKAGE_LIMIT

bugzilla-daemon at bugzilla.kernel.org bugzilla-daemon at bugzilla.kernel.org
Sat Sep 8 11:18:44 UTC 2018


https://bugzilla.kernel.org/show_bug.cgi?id=195159

Peter Wu (peter at lekensteyn.nl) changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |peter at lekensteyn.nl

--- Comment #10 from Peter Wu (peter at lekensteyn.nl) ---
The affected code is likely:

    If ((Arg0 == ToUUID ("a486d8f8-0bda-471b-a72b-6042a6b5bee0")))
    {
        Local0 = Zero
        Local0 = (DerefOf (Arg3 [0x03]) << 0x18)
        Local0 += (DerefOf (Arg3 [0x02]) << 0x10)
        Local0 += (DerefOf (Arg3 [One]) << 0x08)
        Local0 += (DerefOf (Arg3 [Zero]) << Zero)

The reason a Buffer is passed by nouveau instead of a Package is presumably due
to an issue with the Windows driver that did the wrong thing, and firmware
authors adapting that.

I am quite puzzled though with this behavior:

[   13.439026] ACPI Exception: AE_AML_PACKAGE_LIMIT, Index (0x000000003) is
beyond end of object (length 0x0) (20160930/exoparg2-427)
[   13.439088] ACPI Error: Method parse/execution failed [\_SB.PCI0.GFX0._DSM]
(Node ffff8801c84b9780), AE_AML_PACKAGE_LIMIT (20160930/psparse-543)
[   13.439153] ACPI Error: Method parse/execution failed
[\_SB.PCI0.PEG0.GFX0._DSM] (Node ffff8801c84ce7a8), AE_AML_PACKAGE_LIMIT
(20160930/psparse-543)
[   13.439222] ACPI: \_SB_.PCI0.PEG0.GFX0: failed to evaluate _DSM (0x300b)
[   13.439383] pci 0000:01:00.0: optimus capabilities: enabled, status dynamic
power, 
[   13.439388] VGA switcheroo: detected Optimus DSM method \_SB_.PCI0.PEG0.GFX0
handle

In both cases, the method invocation failed, and I would expect
nouveau_optimus_dsm to set 0 as result:

    static int nouveau_optimus_dsm(acpi_handle handle, int func, int arg,
uint32_t *result)
    {
        ...
        *result = 0;
        obj = acpi_evaluate_dsm_typed(handle, &nouveau_op_dsm_muid, 0x00000100,
                func, &argv4, ACPI_TYPE_BUFFER);
        if (!obj) {
            acpi_handle_info(handle, "failed to evaluate _DSM\n");
            return AE_ERROR;
        }

and I would expect "optimus capabilities: disabled, status " since "

    uint32_t result;
    nouveau_optimus_dsm(dhandle, NOUVEAU_DSM_OPTIMUS_CAPS, 0,
            &result);
    dev_info(&pdev->dev, "optimus capabilities: %s, status %s%s\n",
            (result & OPTIMUS_ENABLED) ? "enabled" : "disabled",
            (result & OPTIMUS_DYNAMIC_PWR_CAP) ? "dynamic power, " : "",
            (result & OPTIMUS_HDA_CODEC_MASK) ? "hda bios codec supported" :
"");

However that does not seem to be the case, so either the Linux ACPI module does
some kind of fallback, or there is some other kind of memory issue.

Since you reported an issue "since 4.9.6", there was presumably a working
version. Can you do a git bisect?

-- 
You are receiving this mail because:
You are watching the assignee of the bug.


More information about the dri-devel mailing list