linux/drivers/pcmcia
Rafael J. Wysocki a548ba4de3 PCMCIA / PM: Avoid noirq suspend aborts during suspend-to-idle
[ Upstream commit dbdd0f58fd ]

There is a problem with PCMCIA system resume callbacks with respect
to suspend-to-idle in which the ->suspend_noirq() callback may be
invoked after the ->resume_noirq() one without resuming the system
entirely in some cases.  This doesn't work for PCMCIA because of
the lack of symmetry between its system suspend and system resume
"noirq" callbacks.

The system resume handling in PCMCIA is split between
socket_early_resume() and socket_late_resume() which are called in
different phases of system resume and both need to run for
socket_suspend() (invoked by the system suspend "noirq" callback)
to work.  Specifically, socket_suspend() returns an error when
called after socket_early_resume() without socket_late_resume(),
so if the suspend-to-idle core detects a spurious wakeup event and
attempts to put the system back to sleep, that is aborted by the
error coming from socket_suspend().

Avoid that by using a new socket state flag, SOCKET_IN_RESUME,
to indicate that socket_early_resume() has already run for the
socket in which case socket_suspend() will do minimum handling
and return 0.

This change has been tested on my venerable Toshiba Portege R500
(which is where the problem has been discovered in the first place),
but admittedly I have no PCMCIA cards to test along with the socket
itself.

Fixes: 33e4f80ee6 (ACPI / PM: Ignore spurious SCI wakeups from suspend-to-idle)
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
[linux@dominikbrodowski.net: follow same codepaths for both suspend variants; call ->suspend()]
Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2018-05-30 07:52:39 +02:00
..
at91_cf.c pcmcia: at91_cf: Use syscon to configure the MC/smc 2015-05-20 16:37:38 +02:00
bcm63xx_pcmcia.c pcmcia: remove DEFINE_PCI_DEVICE_TABLE usage 2014-07-18 16:58:07 -07:00
bcm63xx_pcmcia.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
bfin_cf_pcmcia.c gpio: Include linux/gpio.h instead of asm/gpio.h 2016-02-16 00:20:03 +01:00
cardbus.c pcmcia: Use pci_is_bridge() to simplify code 2014-05-27 14:58:24 -06:00
cirrus.h
cistpl.c pcmcia: do not break rsrc_nonstatic when handling anonymous cards 2015-06-16 07:29:39 +02:00
cs_internal.h PCMCIA / PM: Avoid noirq suspend aborts during suspend-to-idle 2018-05-30 07:52:39 +02:00
cs.c PCMCIA / PM: Avoid noirq suspend aborts during suspend-to-idle 2018-05-30 07:52:39 +02:00
db1xxx_ss.c MIPS: Alchemy: Threaded carddetect irqs for devboards 2017-08-29 15:21:53 +02:00
ds.c pcmcia: ds: convert to use DRIVER_ATTR_RO 2017-06-12 16:14:30 +02:00
electra_cf.c drivers/pcmcia: NO_IRQ removal for electra_cf.c 2017-03-21 22:09:28 +11:00
i82092.c pcmcia: remove DEFINE_PCI_DEVICE_TABLE usage 2014-07-18 16:58:07 -07:00
i82092aa.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
i82365.c Annotate hardware config module parameters in drivers/pcmcia/ 2017-04-20 12:02:32 +01:00
i82365.h
Kconfig pcmcia: at91_cf: Use syscon to configure the MC/smc 2015-05-20 16:37:38 +02:00
m32r_cfc.c PCMCIA: Remove commented references to dead class_device_create_file() 2015-05-30 15:29:42 +02:00
m32r_cfc.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
m32r_pcc.c drivers/pcmcia/m32r_pcc.c: check return from add_pcc_socket 2016-12-12 18:55:06 -08:00
m32r_pcc.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
Makefile License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
o2micro.h
omap_cf.c pcmcia: Use setup_timer 2015-03-16 21:31:43 +01:00
pcmcia_cis.c pcmcia: Convert dev_printk to dev_<level> 2015-05-30 16:09:04 +02:00
pcmcia_resource.c pcmcia: Convert dev_printk to dev_<level> 2015-05-30 16:09:04 +02:00
pd6729.c pcmcia: Use setup_timer and mod_timer 2015-03-16 21:31:43 +01:00
pd6729.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
pxa2xx_balloon3.c
pxa2xx_base.c pcmcia: lubbock: fix sockets configuration 2016-09-12 10:57:01 +01:00
pxa2xx_base.h pcmcia: lubbock: fix sockets configuration 2016-09-12 10:57:01 +01:00
pxa2xx_cm_x2xx.c
pxa2xx_cm_x255.c
pxa2xx_cm_x270.c
pxa2xx_colibri.c
pxa2xx_e740.c
pxa2xx_hx4700.c
pxa2xx_mainstone.c
pxa2xx_palmld.c
pxa2xx_palmtc.c
pxa2xx_palmtx.c
pxa2xx_sharpsl.c
pxa2xx_stargate2.c
pxa2xx_trizeps4.c
pxa2xx_viper.c pcmcia: drop owner assignment from platform_drivers 2014-10-20 16:21:21 +02:00
pxa2xx_vpac270.c gpio: Include linux/gpio.h instead of asm/gpio.h 2016-02-16 00:20:03 +01:00
ricoh.h
rsrc_iodyn.c
rsrc_mgr.c pcmcia: correct types 2015-01-12 05:04:12 -08:00
rsrc_nonstatic.c pcmcia: Convert dev_printk to dev_<level> 2015-05-30 16:09:04 +02:00
sa11xx_base.c pcmcia: sa11xx_base: add units to the timing information 2016-09-12 10:57:01 +01:00
sa11xx_base.h
sa1100_assabet.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
sa1100_cerf.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
sa1100_generic.c pcmcia: sa11x0: convert memory allocation to devm_* API 2015-07-08 11:29:56 +01:00
sa1100_generic.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
sa1100_h3600.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
sa1100_nanoengine.c
sa1100_shannon.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
sa1100_simpad.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
sa1111_badge4.c pcmcia: sa1111: fix propagation of lowlevel board init return code 2016-09-12 10:57:01 +01:00
sa1111_generic.c pcmcia: sa1111: fix propagation of lowlevel board init return code 2016-09-12 10:57:01 +01:00
sa1111_generic.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
sa1111_jornada720.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
sa1111_lubbock.c pcmcia: lubbock: fix sockets configuration 2016-09-12 10:57:01 +01:00
sa1111_neponset.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
soc_common.c pcmcia: fix return value of soc_pcmcia_regulator_set 2016-11-11 08:45:08 -08:00
soc_common.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
socket_sysfs.c
tcic.c Annotate hardware config module parameters in drivers/pcmcia/ 2017-04-20 12:02:32 +01:00
tcic.h
ti113x.h pcmcia: Convert dev_printk to dev_<level> 2015-05-30 16:09:04 +02:00
topic.h Disable write buffering on Toshiba ToPIC95 2015-06-13 23:40:21 +02:00
vg468.h
vrc4171_card.c pcmcia/vrc4171: Remove typedefs for enums and struct 2015-05-30 15:55:36 +02:00
vrc4173_cardu.c pcmcia: remove DEFINE_PCI_DEVICE_TABLE usage 2014-07-18 16:58:07 -07:00
vrc4173_cardu.h
xxs1500_ss.c drivers/pcmcia: include <module.h> for modular xxs1500_ss code 2015-06-16 14:12:25 -04:00
yenta_socket.c pcmcia: Fix resource leaks in yenta_probe() and _close() 2015-06-14 21:35:45 +02:00
yenta_socket.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00