lguest: per-vcpu lguest task management

lguest uses tasks to control its running behaviour (like sending
breaks, controlling halted state, etc). In a per-vcpu environment,
each vcpu will have its own underlying task. So this patch
makes the infrastructure for that possible

Signed-off-by: Glauber de Oliveira Costa <gcosta@redhat.com>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
Glauber de Oliveira Costa
2008-01-07 11:05:34 -02:00
committed by Rusty Russell
parent fc708b3e40
commit 66686c2ab0
5 changed files with 42 additions and 39 deletions

View File

@@ -161,11 +161,11 @@ void maybe_do_interrupt(struct lg_cpu *cpu)
return;
/* If they're halted, interrupts restart them. */
if (lg->halted) {
if (cpu->halted) {
/* Re-enable interrupts. */
if (put_user(X86_EFLAGS_IF, &lg->lguest_data->irq_enabled))
kill_guest(lg, "Re-enabling interrupts");
lg->halted = 0;
cpu->halted = 0;
} else {
/* Otherwise we check if they have interrupts disabled. */
u32 irq_enabled;
@@ -497,8 +497,8 @@ 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->lg->halted)
wake_up_process(cpu->lg->tsk);
if (cpu->halted)
wake_up_process(cpu->tsk);
return HRTIMER_NORESTART;
}