linux-stable/drivers
Rafael J. Wysocki 37d0897f05 ACPI: PM: Avoid using power resources if there are none for D0
commit 956ad9d98b upstream.

As recently reported, some platforms provide a list of power
resources for device power state D3hot, through the _PR3 object,
but they do not provide a list of power resources for device power
state D0.

Among other things, this causes acpi_device_get_power() to return
D3hot as the current state of the device in question if all of the
D3hot power resources are "on", because it sees the power_resources
flag set and calls acpi_power_get_inferred_state() which finds that
D3hot is the shallowest power state with all of the associated power
resources turned "on", so that's what it returns.  Moreover, that
value takes precedence over the acpi_dev_pm_explicit_get() return
value, because it means a deeper power state.  The device may very
well be in D0 physically at that point, however.

Moreover, the presence of _PR3 without _PR0 for a given device
means that only one D3-level power state can be supported by it.
Namely, because there are no power resources to turn "off" when
transitioning the device from D0 into D3cold (which should be
supported since _PR3 is present), the evaluation of _PS3 should
be sufficient to put it straight into D3cold, but this means that
the effect of turning "on" the _PR3 power resources is unclear,
so it is better to avoid doing that altogether.  Consequently,
there is no practical way do distinguish D3cold from D3hot for
the device in question and the power states of it can be labeled
so that D3hot is the deepest supported one (and Linux assumes
that putting a device into D3hot via ACPI may cause power to be
removed from it anyway, for legacy reasons).

To work around the problem described above modify the ACPI
enumeration of devices so that power resources are only used
for device power management if the list of D0 power resources
is not empty and make it mart D3cold as supported only if that
is the case and the D3hot list of power resources is not empty
too.

Fixes: ef85bdbec4 ("ACPI / scan: Consolidate extraction of power resources lists")
Link: https://bugzilla.kernel.org/show_bug.cgi?id=205057
Link: https://lore.kernel.org/linux-acpi/20200603194659.185757-1-hdegoede@redhat.com/
Reported-by: Hans de Goede <hdegoede@redhat.com>
Tested-by: Hans de Goede <hdegoede@redhat.com>
Tested-by: youling257@gmail.com
Cc: 3.10+ <stable@vger.kernel.org> # 3.10+
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-06-22 09:05:02 +02:00
..
accessibility
acpi ACPI: PM: Avoid using power resources if there are none for D0 2020-06-22 09:05:02 +02:00
amba
android binder: take read mode of mmap_sem in binder_alloc_free_page() 2020-05-02 17:25:48 +02:00
ata libata: Return correct status in sata_pmp_eh_recover_pm() when ATA_DFLAG_DETACH is set 2020-04-17 10:48:52 +02:00
atm fore200e: Fix incorrect checks of NULL pointer dereference 2020-02-24 08:34:42 +01:00
auxdisplay
base x86/speculation: Add Special Register Buffer Data Sampling (SRBDS) mitigation 2020-06-10 21:35:01 +02:00
bcma
block null_blk: return error for invalid zone size 2020-06-07 13:17:56 +02:00
bluetooth
bus bus: sunxi-rsb: Return correct data when mixing 16-bit and 8-bit reads 2020-04-17 10:48:37 +02:00
cdrom
char tpm: ibmvtpm: retry on H_CLOSED in tpm_ibmvtpm_send() 2020-04-29 16:31:29 +02:00
clk clk: Unlink clock if failed to prepare or enable 2020-05-20 08:18:52 +02:00
clocksource clocksource/drivers/bcm2835_timer: Fix memory leak of timer 2020-02-24 08:34:37 +01:00
connector
cpufreq cpufreq: intel_pstate: Only mention the BIOS disabling turbo mode once 2020-05-20 08:18:40 +02:00
cpuidle
crypto crypto: talitos - fix ECB and CBC algs ivsize 2020-06-22 09:04:59 +02:00
dax
dca
devfreq Revert "PM / devfreq: Modify the device name as devfreq(X) for sysfs" 2020-03-05 16:42:18 +01:00
dio
dma dmaengine: owl: Use correct lock in owl_dma_get_pchan() 2020-05-27 17:37:38 +02:00
dma-buf
edac EDAC/amd64: Set grain per DIMM 2020-03-11 14:14:45 +01:00
eisa
extcon extcon: axp288: Add wakeup support 2020-04-13 10:45:03 +02:00
firewire
firmware efi/efivars: Add missing kobject_put() in sysfs entry creation error path 2020-06-22 09:05:01 +02:00
fmc
fpga
fsi
gnss
gpio gpio: exar: Fix bad handling for ida_simple_get error path 2020-06-03 08:19:35 +02:00
gpu make 'user_access_begin()' do 'access_ok()' 2020-06-22 09:04:58 +02:00
hid HID: i2c-hid: add Schneider SCL142ALM to descriptor override 2020-06-07 13:17:53 +02:00
hsi
hv x86/Hyper-V: Report crash data in die() when panic_on_oops is set 2020-04-23 10:30:17 +02:00
hwmon hwmon: (da9052) Synchronize access with mfd 2020-05-20 08:18:44 +02:00
hwspinlock
hwtracing intel_th: pci: Add Elkhart Lake CPU support 2020-03-25 08:06:11 +01:00
i2c i2c: altera: Fix race between xfer_msg and isr thread 2020-06-07 13:17:56 +02:00
ide ide: serverworks: potential overflow in svwks_set_pio_mode() 2020-02-24 08:34:49 +01:00
idle
iio iio: vcnl4000: Fix i2c swapped word reading. 2020-06-10 21:35:00 +02:00
infiniband RDMA/uverbs: Make the event_queue fds return POLLERR when disassociated 2020-06-22 09:05:00 +02:00
input Input: synaptics - add a second working PNP_ID for Lenovo T470s 2020-06-22 09:05:00 +02:00
iommu iommu: Fix reference count leak in iommu_group_alloc. 2020-06-03 08:19:41 +02:00
ipack ipack: tpci200: fix error return code in tpci200_register() 2020-05-27 17:37:43 +02:00
irqchip irqchip/mbigen: Free msi_desc on device teardown 2020-04-23 10:30:13 +02:00
isdn
leds leds: pca963x: Fix open-drain initialization 2020-02-24 08:34:35 +01:00
lightnvm
macintosh macintosh: windfarm: fix MODINFO regression 2020-03-18 07:14:21 +01:00
mailbox
mcb
md dm multipath: use updated MPATHF_QUEUE_IO on mapping for bio-based mpath 2020-05-06 08:13:29 +02:00
media media: fdp1: Fix R-Car M3-N naming in debug message 2020-05-27 17:37:40 +02:00
memory
memstick
message
mfd mfd: intel-lpss: Use devm_ioremap_uc for MMIO 2020-05-10 10:30:11 +02:00
misc mei: release me_cl object reference 2020-05-27 17:37:43 +02:00
mmc mmc: core: Fix recursive locking issue in CQE recovery path 2020-06-03 08:19:42 +02:00
mtd ubi: Fix seq_file usage in detailed_erase_block_info debugfs file 2020-05-27 17:37:30 +02:00
mux
net ath9k_htc: Silence undersized packet warnings 2020-06-22 09:05:00 +02:00
nfc NFC: st21nfca: add missed kfree_skb() in an error path 2020-06-10 21:34:59 +02:00
ntb
nubus
nvdimm libnvdimm: Fix endian conversion issues 2020-06-07 13:17:53 +02:00
nvme nvme: fix deadlock caused by ANA update wrong locking 2020-04-29 16:31:12 +02:00
nvmem nvmem: qfprom: remove incorrect write support 2020-06-10 21:35:00 +02:00
of of: overlay: kmemleak in dup_and_fixup_symbol_prop() 2020-04-23 10:30:14 +02:00
opp
oprofile
parisc
parport
pci PCI: Move Apex Edge TPU class quirk to fix BAR assignment 2020-05-02 17:25:52 +02:00
pcmcia
perf drivers/perf: arm_pmu_acpi: Fix incorrect checking of gicc pointer 2020-03-25 08:06:07 +01:00
phy phy: mapphone-mdm6600: Fix write timeouts with shorter GPIO toggle interval 2020-03-11 14:15:10 +01:00
pinctrl pinctrl: cherryview: Add missing spinlock usage in chv_gpio_irq_handler 2020-05-20 08:18:41 +02:00
platform platform/x86: asus-nb-wmi: Do not load on Asus T100TA and T200TA 2020-05-27 17:37:35 +02:00
pnp
power power: supply: axp288_fuel_gauge: Broaden vendor check for Intel Compute Sticks. 2020-04-23 10:30:22 +02:00
powercap
pps
ps3
ptp
pwm pwm: bcm2835: Dynamically allocate base 2020-04-29 16:31:14 +02:00
rapidio rapidio: fix an error in get_user_pages_fast() error handling 2020-05-27 17:37:43 +02:00
ras
regulator regulator: rk808: Lower log level on optional GPIOs being not available 2020-02-24 08:34:40 +01:00
remoteproc remoteproc: Fix wrong rvring index computation 2020-05-02 17:25:47 +02:00
reset reset: uniphier: Add SCSSI reset control for each channel 2020-02-24 08:34:44 +01:00
rpmsg rpmsg: glink: Remove chunk size word align warning 2020-04-13 10:45:16 +02:00
rtc rtc: 88pm860x: fix possible race condition 2020-04-23 10:30:18 +02:00
s390 s390/cio: avoid duplicated 'ADD' uevents 2020-04-29 16:31:13 +02:00
sbus
scsi scsi: hisi_sas: Check sas_port before using it 2020-06-07 13:17:55 +02:00
sfi
sh
siox
slimbus
sn
soc soc: imx: gpc: fix power up sequencing 2020-04-23 10:30:17 +02:00
soundwire
spi spi: dw: use "smp_mb()" to avoid sending spi data error 2020-06-07 13:17:55 +02:00
spmi
ssb
staging staging: rtl8712: Fix IEEE80211_ADDBA_PARAM_BUF_SIZE_MASK 2020-06-10 21:35:00 +02:00
target scsi: target/iblock: fix WRITE SAME zeroing 2020-05-06 08:13:31 +02:00
tc
tee tee: optee: Fix compilation issue with nommu 2020-02-05 14:43:50 +00:00
thermal thermal: brcmstb_thermal: Do not use DT coefficients 2020-03-05 16:42:22 +01:00
thunderbolt thunderbolt: Drop duplicated get_switch_at_route() 2020-05-27 17:37:40 +02:00
tty tty: hvc_console, fix crashes on parallel open/close 2020-06-10 21:35:00 +02:00
uio uio: fix a sleep-in-atomic-context bug in uio_dmem_genirq_irqcontrol() 2020-02-24 08:34:37 +01:00
usb CDC-ACM: heed quirk also in error handling 2020-06-10 21:35:00 +02:00
uwb
vfio vfio/type1: Fix VA->PA translation for PFNMAP VMAs in vaddr_get_pfn() 2020-05-06 08:13:31 +02:00
vhost vhost/vsock: fix packet delivery order to monitoring devices 2020-05-27 17:37:32 +02:00
video fbdev: potential information leak in do_fb_ioctl() 2020-04-23 10:30:22 +02:00
virt
virtio virtio_balloon: prevent pfn array overflow 2020-02-24 08:34:54 +01:00
visorbus visorbus: fix uninitialized variable access 2020-02-24 08:34:47 +01:00
vlynq
vme vme: bridges: reduce stack usage 2020-02-24 08:34:47 +01:00
w1
watchdog watchdog: reset last_hw_keepalive time at start 2020-04-29 16:31:09 +02:00
xen xen/xenbus: ensure xenbus_map_ring_valloc() returns proper grant status 2020-05-02 17:25:58 +02:00
zorro
Kconfig
Makefile