diff options
Diffstat (limited to 'drivers/char/apm-emulation.c')
| -rw-r--r-- | drivers/char/apm-emulation.c | 21 | 
1 files changed, 7 insertions, 14 deletions
diff --git a/drivers/char/apm-emulation.c b/drivers/char/apm-emulation.c index a7346ab97a3..f4837a893df 100644 --- a/drivers/char/apm-emulation.c +++ b/drivers/char/apm-emulation.c @@ -40,10 +40,7 @@  #define APM_MINOR_DEV	134  /* - * See Documentation/Config.help for the configuration options. - * - * Various options can be changed at boot time as follows: - * (We allow underscores for compatibility with the modules code) + * One option can be changed at boot time as follows:   *	apm=on/off			enable/disable APM   */ @@ -300,17 +297,13 @@ apm_ioctl(struct file *filp, u_int cmd, u_long arg)  			/*  			 * Wait for the suspend/resume to complete.  If there  			 * are pending acknowledges, we wait here for them. +			 * wait_event_freezable() is interruptible and pending +			 * signal can cause busy looping.  We aren't doing +			 * anything critical, chill a bit on each iteration.  			 */ -			freezer_do_not_count(); - -			wait_event(apm_suspend_waitqueue, -				   as->suspend_state == SUSPEND_DONE); - -			/* -			 * Since we are waiting until the suspend is done, the -			 * try_to_freeze() in freezer_count() will not trigger -			 */ -			freezer_count(); +			while (wait_event_freezable(apm_suspend_waitqueue, +					as->suspend_state == SUSPEND_DONE)) +				msleep(10);  			break;  		case SUSPEND_ACKTO:  			as->suspend_result = -ETIMEDOUT;  |