run_guest tries to freeze the current process after it has handled
pending interrupts and before it calls lguest_arch_run_guest.
This doesn't work nicely if the task has been killed while being frozen
and when we want to handle that signal as soon as possible.
Let's move try_to_freeze before we check for pending signal so that we
can get out of the loop as soon as possible.
Signed-off-by: Michal Hocko <mhocko@suse.cz>
Acked-by: Rusty Russell <rusty@rustcorp.com.au>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
                        }
                }
 
+               /*
+                * All long-lived kernel loops need to check with this horrible
+                * thing called the freezer.  If the Host is trying to suspend,
+                * it stops us.
+                */
+               try_to_freeze();
+
                /* Check for signals */
                if (signal_pending(current))
                        return -ERESTARTSYS;
                if (irq < LGUEST_IRQS)
                        try_deliver_interrupt(cpu, irq, more);
 
-               /*
-                * All long-lived kernel loops need to check with this horrible
-                * thing called the freezer.  If the Host is trying to suspend,
-                * it stops us.
-                */
-               try_to_freeze();
-
                /*
                 * Just make absolutely sure the Guest is still alive.  One of
                 * those hypercalls could have been fatal, for example.