Re: Potential issue with pci_prepare_to_sleep if there's no platform support for D3cold transition

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

 



[cc += Rafael, linux-acpi]

On Mon, Apr 21, 2025 at 10:05:59PM +0200, Heiner Kallweit wrote:
> If there's no platform support for transition to D3cold, then
> pci_set_power_state(dev, D3cold) still returns 0, even though
> power state is transitioned to D3hot only. We called
> pci_enable_wake(dev, D3cold, wakeup) before, therefore PME for
> D3hot may not be enabled. Is this a bug?
> 
> Background:
> In __pci_set_power_state we have the following:
> 
> error = pci_set_low_power_state(dev, PCI_D3hot, locked);
> if (pci_platform_power_transition(dev, PCI_D3cold))
> 	return error;
> 
> The acpi_pci_set_power_state() stub returns -ENODEV.
> Therefore, if error=0,  __pci_set_power_state() will
> return 0 if pci_platform_power_transition() fails.

pci_prepare_to_sleep() calls pci_target_state() right at the top.

If wakeup is supported and enabled, pci_target_state() is supposed
to find the deepest power state supporting wakeup.  If D3cold doesn't
support wakeup, D3hot or a shallower state is returned.

Hence I don't quite understand how the scenario you're describing
could occur in practice.  Are you seeing actual issues and have tracked
them down to incorrect handling in pci_prepare_to_sleep()?

Thanks,

Lukas




[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]
  Powered by Linux