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

           Summary: [Regression][Bisected]Updating from kernel 3.5 to 3.6
                    doubles idle power consumption
           Product: ACPI
           Version: 2.5
    Kernel Version: 3.6
          Platform: All
        OS/Version: Linux
              Tree: Mainline
            Status: NEW
          Severity: normal
          Priority: P1
         Component: ACPICA-Core
        AssignedTo: acpi_acpica-c...@kernel-bugs.osdl.org
        ReportedBy: da_...@mad.scientist.com
        Regression: Yes


Some time ago I noticed that my laptop's battery life had significantly
decreased. Some investigation revealed that the idle power consumption had
doubled, because the built-in nvidia graphics card would not turn off any more
(I have an optimus-enabled laptop, which has both an intel and an nvidia
graphics card).

I do not use the nvidia card at all (I don't even have any drivers for it
installed). I rely on the acpi_call module to make an acpi call to disable the
nvidia card at boot. I.e. something like the following snippet from my on/off
script, which is based on a script from the bumblebee project:
---8<---------
            try_call "\_SB.PCI0.PEG0.PEGP._DSM"
"{0xF8,0xD8,0x86,0xA4,0xDA,0x0B,0x1B,0x47,0xA7,0x2B,0x60,0x42,0xA6,0xB5,0xBE,0xE0}"
"0x100 0x1A {0x1,0x0,0x0,0x3}" 
            # ok to turn off: Buffer {0x59 0x0 0x0 0x11}
            # is already off: Buffer {0x41 0x0 0x0 0x11}
            try_call "\_SB.PCI0.PEG0.PEGP._PS3"
--->8---------



--- Steps to reproduce---
1) Fully charge laptop, then disconnect from charger (so that you are running
on battery power).
2) Boot into kernel 3.5
3) Make sure system is idle
4) cat /sys/class/power_supply/BAT0/current_now # outputs a value around 10000
(10mW)
5) (Re)boot into kernel 3.6 (or later)
6) Make sure system is idle
7) cat /sys/class/power_supply/BAT0/current_now # outputs a value around 20000
(20mW)



--- Expected result ---
The reported values for 'current_now' should be the same for kernel 3.5 and 3.6



--- Actual result ---
'current_now' is doubled for kernel 3.6, compared to kernel 3.5.



--- Hardware ---
I have a 'Dell XPS 15 (L502x)' laptop. lspci reports the following for the
nvidia card:
lspci -v -s 01:00.0
01:00.0 VGA compatible controller: NVIDIA Corporation GF108 [GeForce GT 540M]
(rev ff) (prog-if ff)
    !!! Unknown header type 7f



--- Bisection results ---
The following commit was identified as the first bad commit:
---8<---------
commit 71a83bd727cc31c5fe960c3758cb396267ff710e
Author: Zheng Yan <zheng.z....@intel.com>
Date:   Sat Jun 23 10:23:49 2012 +0800

    PCI/PM: add runtime PM support to PCIe port

    This patch adds runtime PM support to PCIe port.  This is needed by
    PCIe D3cold support, where PCIe device without ACPI node may be
    powered on/off by PCIe port.

    Because runtime suspend is broken for some chipsets, a black list is
    used to disable runtime PM support for these chipsets.

    Reviewed-by: Rafael J. Wysocki <r...@sisk.pl>
    Signed-off-by: Zheng Yan <zheng.z....@intel.com>
    Signed-off-by: Huang Ying <ying.hu...@intel.com>
    Signed-off-by: Bjorn Helgaas <bhelg...@google.com>
--->8---------



I have verified that the following patch fixes the issue for me on kernel 3.7:
--->8---------
diff --git a/drivers/pci/pcie/portdrv_pci.c b/drivers/pci/pcie/portdrv_pci.c
index 0761d90..0a11bc5 100644
--- a/drivers/pci/pcie/portdrv_pci.c
+++ b/drivers/pci/pcie/portdrv_pci.c
@@ -207,8 +207,8 @@ static int __devinit pcie_portdrv_probe(struct pci_dev
*dev,
         * it by default.
         */
        dev->d3cold_allowed = false;
-       if (!pci_match_id(port_runtime_pm_black_list, dev))
-               pm_runtime_put_noidle(&dev->dev);
+       //if (!pci_match_id(port_runtime_pm_black_list, dev))
+               //pm_runtime_put_noidle(&dev->dev);

        return 0;
 }
--->8---------

I think the problem is that the return value from pci_match_id() is not being
interpreted correctly: the exclamation mark should not be present. At present
the blacklist is empty, and hence, presumably, pm_runtime_put_noidle() should
not get called at all. However right now pm_runtime_put_noidle() is always
called.

I will attach dmesgs shortly.
Please let me know if any additional information is required.

-- 
Configure bugmail: https://bugzilla.kernel.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are watching the assignee of the bug.

------------------------------------------------------------------------------
Master Visual Studio, SharePoint, SQL, ASP.NET, C# 2012, HTML5, CSS,
MVC, Windows 8 Apps, JavaScript and much more. Keep your skills current
with LearnDevNow - 3,200 step-by-step video tutorials by Microsoft
MVPs and experts. ON SALE this month only -- learn more at:
http://p.sf.net/sfu/learnmore_123012
_______________________________________________
acpi-bugzilla mailing list
acpi-bugzilla@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/acpi-bugzilla

Reply via email to