Rabin Vincent a7b12929be vt: fix race in vt_waitactive()
pm_restore_console() is called from the suspend/resume path, and this
calls vt_move_to_console(), which calls vt_waitactive().

There's a race in this path which causes the process which requests the
suspend to sleep indefinitely waiting for an event which already
happened:

P1                                      P2
 vt_move_to_console()
  set_console()
    schedule_console_callback()
  vt_waitactive()
    check n == fg_console +1
                                       console_callback()
                                         switch_screen()
                                         vt_event_post() // no waiters

    vt_event_wait() // forever

Fix the race by ensuring we're registered for the event before we check
if it's already completed.

Signed-off-by: Rabin Vincent <rabin.vincent@stericsson.com>
Acked-by: Alan Cox <alan@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2012-07-26 13:37:02 -07:00
..
2012-05-26 12:22:27 -07:00
2012-06-20 14:39:36 -07:00
2012-05-24 16:22:53 -04:00
2012-07-17 21:30:31 -07:00
2012-05-26 12:42:29 -07:00
2012-05-23 14:07:06 -07:00
2012-07-16 09:20:33 -07:00
2012-05-22 16:02:13 -07:00
2012-07-04 15:55:19 +08:00
2012-07-13 09:56:26 -07:00
2012-07-11 12:44:25 -07:00
2012-05-22 16:02:13 -07:00
2012-07-26 13:37:02 -07:00
2012-07-13 09:54:26 -07:00
2012-07-11 16:17:14 -07:00
2012-05-26 12:42:29 -07:00
2012-06-15 17:17:15 -07:00
2012-05-22 16:34:21 -07:00
2012-05-26 12:22:27 -07:00