1
linux/drivers/char
NeilBrown f283d22713 APM: fix deadlock in APM_IOC_SUSPEND ioctl
I found the Xorg server on my ARM device stuck in the 'msleep()' loop
in apm_ioctl.

I suspect it had attempted suspend immediately after resuming and lost
a race.
During that msleep(10);, a new suspend cycle must have started and
changed ->suspend_state to SUSPEND_PENDING, so it was never seen to
be SUSPEND_DONE and the loop could never exited.  It would have moved on
to SUSPEND_ACKTO but never been able to reach SUSPEND_DONE.

So change the loop to only run while SUSPEND_ACKED rather than until
SUSPEND_DONE.  This is much safer.

Signed-off-by: NeilBrown <neilb@suse.de>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2012-04-03 03:42:36 +02:00
..
agp agp: iommu_gfx_mapped only available if CONFIG_INTEL_IOMMU is set 2011-11-08 10:50:27 +00:00
hw_random hwrng: nomadik: Enable module alias autogeneration for AMBA drivers 2011-11-22 10:58:30 +00:00
ipmi ipmi_watchdog: restore settings when BMC reset 2011-12-20 10:25:04 -08:00
mwave
pcmcia
tpm Merge branch 'next' of git://selinuxproject.org/~jmorris/linux-security 2011-10-25 09:45:31 +02:00
xilinx_hwicap
apm-emulation.c APM: fix deadlock in APM_IOC_SUSPEND ioctl 2012-04-03 03:42:36 +02:00
applicom.c
applicom.h
bfin-otp.c
briq_panel.c
bsr.c
ds1302.c
ds1620.c
dsp56k.c
dtlk.c
efirtc.c
generic_nvram.c drivers: fix up various ->llseek() implementations 2011-07-20 20:47:58 -04:00
genrtc.c
hangcheck-timer.c
hpet.c Merge branch 'x86-vdso-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2011-07-22 17:05:15 -07:00
i8k.c
Kconfig um: switch to use of drivers/Kconfig 2011-11-02 14:15:41 +01:00
lp.c
Makefile
mbcs.c
mbcs.h
mem.c switch device_get_devnode() and ->devnode() to umode_t * 2012-01-03 22:54:55 -05:00
misc.c switch device_get_devnode() and ->devnode() to umode_t * 2012-01-03 22:54:55 -05:00
mmtimer.c
msm_smd_pkt.c drivers/char/msm_smd_pkt.c: don't use IS_ERR() 2011-08-25 16:25:33 -07:00
mspec.c atomic: use <linux/atomic.h> 2011-07-26 16:49:47 -07:00
nsc_gpio.c
nvram.c drivers: fix up various ->llseek() implementations 2011-07-20 20:47:58 -04:00
nwbutton.c
nwbutton.h
nwflash.c
pc8736x_gpio.c
ppdev.c
ps3flash.c drivers/char: Add module.h to those who were using it implicitly 2011-10-31 19:31:40 -04:00
ramoops.c drivers/char: Fix implicit use of err.h in ramoops.c 2011-10-31 19:31:42 -04:00
random.c random: Use arch_get_random_int instead of cycle counter if avail 2011-12-29 16:49:45 -08:00
raw.c switch device_get_devnode() and ->devnode() to umode_t * 2012-01-03 22:54:55 -05:00
rtc.c drivers/char/rtc: use printk_ratelimited instead of printk_ratelimit 2011-09-15 14:05:25 +02:00
scx200_gpio.c
snsc_event.c
snsc.c
snsc.h
sonypi.c
tb0219.c
tile-srom.c switch device_get_devnode() and ->devnode() to umode_t * 2012-01-03 22:54:55 -05:00
tlclk.c
toshiba.c
ttyprintk.c Merge branch 'modsplit-Oct31_2011' of git://git.kernel.org/pub/scm/linux/kernel/git/paulg/linux 2011-11-06 19:44:47 -08:00
uv_mmtimer.c
viotape.c
virtio_console.c Merge branch 'modsplit-Oct31_2011' of git://git.kernel.org/pub/scm/linux/kernel/git/paulg/linux 2011-11-06 19:44:47 -08:00