On Wed, May 9, 2018 at 12:18 AM, Rafael J. Wysocki <r...@rjwysocki.net> wrote: > From: Rafael J. Wysocki <rafael.j.wyso...@intel.com> > > Commit 0847684cfc5f0 (PCI / PM: Simplify device wakeup settings code) > went too far and dropped the device_may_wakeup() check from > pci_enable_wake() which causes wakeup to be enabled during system > suspend, hibernation or shutdown for some PCI devices that are not > allowed by user space to wake up the system from sleep (or power off). > > As a result of this excessive power is drawn by some of the affected > systems while in sleep states or off. > > Restore the device_may_wakeup() check in pci_enable_wake(), but make > sure that the PCI bus type's runtime suspend callback will not call > device_may_wakeup() which is about system wakeup from sleep and not > about device wakeup from runtime suspend. > > Fixes: 0847684cfc5f0 (PCI / PM: Simplify device wakeup settings code) > Reported-by: Joseph Salisbury <joseph.salisb...@canonical.com> > Signed-off-by: Rafael J. Wysocki <rafael.j.wyso...@intel.com>
Bjorn, any concerns here? > --- > drivers/pci/pci.c | 29 +++++++++++++++++++++++------ > 1 file changed, 23 insertions(+), 6 deletions(-) > > Index: linux-pm/drivers/pci/pci.c > =================================================================== > --- linux-pm.orig/drivers/pci/pci.c > +++ linux-pm/drivers/pci/pci.c > @@ -1910,7 +1910,7 @@ void pci_pme_active(struct pci_dev *dev, > EXPORT_SYMBOL(pci_pme_active); > > /** > - * pci_enable_wake - enable PCI device as wakeup event source > + * __pci_enable_wake - enable PCI device as wakeup event source > * @dev: PCI device affected > * @state: PCI state from which device will issue wakeup events > * @enable: True to enable event generation; false to disable > @@ -1928,7 +1928,7 @@ EXPORT_SYMBOL(pci_pme_active); > * Error code depending on the platform is returned if both the platform and > * the native mechanism fail to enable the generation of wake-up events > */ > -int pci_enable_wake(struct pci_dev *dev, pci_power_t state, bool enable) > +static int __pci_enable_wake(struct pci_dev *dev, pci_power_t state, bool > enable) > { > int ret = 0; > > @@ -1969,6 +1969,23 @@ int pci_enable_wake(struct pci_dev *dev, > > return ret; > } > + > +/** > + * pci_enable_wake - change wakeup settings for a PCI device > + * @pci_dev: Target device > + * @state: PCI state from which device will issue wakeup events > + * @enable: Whether or not to enable event generation > + * > + * If @enable is set, check device_may_wakeup() for the device before calling > + * __pci_enable_wake() for it. > + */ > +int pci_enable_wake(struct pci_dev *pci_dev, pci_power_t state, bool enable) > +{ > + if (enable && !device_may_wakeup(&pci_dev->dev)) > + return -EINVAL; > + > + return __pci_enable_wake(pci_dev, state, enable); > +} > EXPORT_SYMBOL(pci_enable_wake); > > /** > @@ -1981,9 +1998,9 @@ EXPORT_SYMBOL(pci_enable_wake); > * should not be called twice in a row to enable wake-up due to PCI PM vs > ACPI > * ordering constraints. > * > - * This function only returns error code if the device is not capable of > - * generating PME# from both D3_hot and D3_cold, and the platform is unable > to > - * enable wake-up power for it. > + * This function only returns error code if the device is not allowed to wake > + * up the system from sleep or it is not capable of generating PME# from both > + * D3_hot and D3_cold and the platform is unable to enable wake-up power for > it. > */ > int pci_wake_from_d3(struct pci_dev *dev, bool enable) > { > @@ -2114,7 +2131,7 @@ int pci_finish_runtime_suspend(struct pc > > dev->runtime_d3cold = target_state == PCI_D3cold; > > - pci_enable_wake(dev, target_state, pci_dev_run_wake(dev)); > + __pci_enable_wake(dev, target_state, pci_dev_run_wake(dev)); > > error = pci_set_power_state(dev, target_state); > > > -- > To unsubscribe from this list: send the line "unsubscribe linux-acpi" in > the body of a message to majord...@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html -- You received this bug notification because you are a member of Kernel Packages, which is subscribed to linux in Ubuntu. https://bugs.launchpad.net/bugs/1745646 Title: Battery drains when laptop is off (shutdown) Status in Linux: Unknown Status in acpi package in Ubuntu: Confirmed Status in linux package in Ubuntu: In Progress Status in acpi source package in Artful: New Status in linux source package in Artful: In Progress Status in acpi source package in Bionic: Confirmed Status in linux source package in Bionic: In Progress Status in acpi source package in Cosmic: Confirmed Status in linux source package in Cosmic: In Progress Bug description: I am using hp AY008tx laptop , and many other laptop users (HP) are also facing the same issue . The problem don't occur when i install windows 10 . Now, only ubuntu is installed. i am using latest bios insyde20 rev 5.(latest) WOL disabled and no usb device connected checked my battery . it don't happen when i remove battery and plug it again after shutdown. tried laptop_mode_tools and tpl too ProblemType: Bug DistroRelease: Ubuntu 16.04 Package: linux-image-4.13.0-31-generic 4.13.0-31.34~16.04.1 ProcVersionSignature: Ubuntu 4.13.0-31.34~16.04.1-generic 4.13.13 Uname: Linux 4.13.0-31-generic x86_64 NonfreeKernelModules: wl ApportVersion: 2.20.1-0ubuntu2.15 Architecture: amd64 CurrentDesktop: Unity Date: Fri Jan 26 22:50:53 2018 InstallationDate: Installed on 2018-01-25 (1 days ago) InstallationMedia: Ubuntu 16.04.3 LTS "Xenial Xerus" - Release amd64 (20170801) SourcePackage: linux-hwe UpgradeStatus: No upgrade log present (probably fresh install) --- ApportVersion: 2.20.1-0ubuntu2.15 Architecture: amd64 AudioDevicesInUse: USER PID ACCESS COMMAND /dev/snd/controlC0: gopal 2391 F.... pulseaudio DistroRelease: Ubuntu 16.04 HibernationDevice: RESUME=UUID=0bf03973-049c-480e-9e14-7596bf68d994 InstallationDate: Installed on 2018-01-25 (1 days ago) InstallationMedia: Ubuntu 16.04.3 LTS "Xenial Xerus" - Release amd64 (20170801) Lsusb: Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 001 Device 003: ID 04f2:b56c Chicony Electronics Co., Ltd Bus 001 Device 002: ID 0a5c:216d Broadcom Corp. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub MachineType: HP HP Notebook NonfreeKernelModules: wl Package: linux (not installed) ProcEnviron: LANGUAGE=en_IN:en TERM=xterm-256color PATH=(custom, no user) LANG=en_IN SHELL=/bin/bash ProcFB: 0 inteldrmfb ProcKernelCmdLine: BOOT_IMAGE=/boot/vmlinuz-4.13.0-31-generic.efi.signed root=UUID=3a4ef59e-130a-4ce0-92d3-2fc42f5c9f59 ro quiet splash vt.handoff=7 ProcVersionSignature: Ubuntu 4.13.0-31.34~16.04.1-generic 4.13.13 PulseList: Error: command ['pacmd', 'list'] failed with exit code 1: Home directory not accessible: Permission denied No PulseAudio daemon running, or not running as session daemon. RelatedPackageVersions: linux-restricted-modules-4.13.0-31-generic N/A linux-backports-modules-4.13.0-31-generic N/A linux-firmware 1.157.15 Tags: xenial Uname: Linux 4.13.0-31-generic x86_64 UpgradeStatus: No upgrade log present (probably fresh install) UserGroups: _MarkForUpload: True dmi.bios.date: 11/01/2017 dmi.bios.vendor: Insyde dmi.bios.version: F.40 dmi.board.asset.tag: Type2 - Board Asset Tag dmi.board.name: 81EC dmi.board.vendor: HP dmi.board.version: 61.58 dmi.chassis.type: 10 dmi.chassis.vendor: HP dmi.chassis.version: Chassis Version dmi.modalias: dmi:bvnInsyde:bvrF.40:bd11/01/2017:svnHP:pnHPNotebook:pvrType1ProductConfigId:rvnHP:rn81EC:rvr61.58:cvnHP:ct10:cvrChassisVersion: dmi.product.family: 103C_5335KV HP Notebook dmi.product.name: HP Notebook dmi.product.version: Type1ProductConfigId dmi.sys.vendor: HP To manage notifications about this bug go to: https://bugs.launchpad.net/linux/+bug/1745646/+subscriptions -- Mailing list: https://launchpad.net/~kernel-packages Post to : kernel-packages@lists.launchpad.net Unsubscribe : https://launchpad.net/~kernel-packages More help : https://help.launchpad.net/ListHelp