Skip to content

Commit

Permalink
lguest: fix lguest wake on guest clock tick, or fd activity
Browse files Browse the repository at this point in the history
The Launcher could be inside the Guest on another CPU; wake_up_process
will do nothing because it is "running".  kick_process will knock it
back into our kernel in this case, otherwise we'll miss it until the
next guest exit.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
  • Loading branch information
Rusty Russell committed Jun 12, 2009
1 parent b43e352 commit a6c372d
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 5 deletions.
6 changes: 3 additions & 3 deletions drivers/lguest/interrupts_and_traps.c
Original file line number Diff line number Diff line change
Expand Up @@ -511,9 +511,9 @@ static enum hrtimer_restart clockdev_fn(struct hrtimer *timer)

/* Remember the first interrupt is the timer interrupt. */
set_bit(0, cpu->irqs_pending);
/* If the Guest is actually stopped, we need to wake it up. */
if (cpu->halted)
wake_up_process(cpu->tsk);
/* Guest may be stopped or running on another CPU. */
if (!wake_up_process(cpu->tsk))
kick_process(cpu->tsk);
return HRTIMER_NORESTART;
}

Expand Down
4 changes: 2 additions & 2 deletions drivers/lguest/lguest_user.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@ static int break_guest_out(struct lg_cpu *cpu, const unsigned long __user*input)

if (on) {
cpu->break_out = 1;
/* Pop it out of the Guest (may be running on different CPU) */
wake_up_process(cpu->tsk);
if (!wake_up_process(cpu->tsk))
kick_process(cpu->tsk);
/* Wait for them to reset it */
return wait_event_interruptible(cpu->break_wq, !cpu->break_out);
} else {
Expand Down

0 comments on commit a6c372d

Please sign in to comment.