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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

Peter Wu (peter@xxxxxxxxxxxxx) changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |peter@xxxxxxxxxxxxx

--- Comment #10 from Peter Wu (peter@xxxxxxxxxxxxx) ---
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.
_______________________________________________
dri-devel mailing list
dri-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/dri-devel




[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux