Explorar el Código

[ARM] Fix "apm -s" command hang

Fix an apparant hang with the "apm -s" command.  We omitted to wake up
this process once resume had completed.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Russell King hace 18 años
padre
commit
df58d03595
Se han modificado 1 ficheros con 8 adiciones y 1 borrados
  1. 8 1
      arch/arm/kernel/apm.c

+ 8 - 1
arch/arm/kernel/apm.c

@@ -340,6 +340,7 @@ apm_ioctl(struct inode * inode, struct file *filp, u_int cmd, u_long arg)
 			wait_event(apm_suspend_waitqueue,
 				   as->suspend_state == SUSPEND_DONE);
 		} else {
+			as->suspend_state = SUSPEND_WAIT;
 			up(&state_lock);
 
 			/*
@@ -349,8 +350,14 @@ apm_ioctl(struct inode * inode, struct file *filp, u_int cmd, u_long arg)
 			 * acknowledged.
 			 */
 			err = queue_suspend_event(APM_USER_SUSPEND, as);
-			if (err < 0)
+			if (err < 0) {
+				/*
+				 * Avoid taking the lock here - this
+				 * should be fine.
+				 */
+				as->suspend_state = SUSPEND_NONE;
 				break;
+			}
 
 			if (err > 0)
 				apm_suspend();