Re: [PATCH] do not enter vcpu again if it was stopped during IO

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Jun 23, 2010 at 12:16:46PM +0200, Jan Kiszka wrote:
> Gleb Natapov wrote:
> > To prevent reentering vcpu after IO completion it is not enough
> > to set env->stopped since it is checked only in main loop but control
> > will not get there until next non-IO exit since kvm_run() will reenter
> > vcpu to complete IO instruction. Solve this by sending self-signal to
> > request exit after IO instruction completion.
> > 
> > Signed-off-by: Gleb Natapov <gleb@xxxxxxxxxx>
> > diff --git a/qemu-kvm.c b/qemu-kvm.c
> > index be1dac2..4f7cf6d 100644
> > --- a/qemu-kvm.c
> > +++ b/qemu-kvm.c
> > @@ -603,6 +603,10 @@ int kvm_run(CPUState *env)
> >      r = pre_kvm_run(kvm, env);
> >      if (r)
> >          return r;
> > +    if (env->exit_request) {
> > +        env->exit_request = 0;
> > +        pthread_kill(env->kvm_cpu_state.thread, SIG_IPI);
> > +    }
> >      r = ioctl(fd, KVM_RUN, 0);
> >  
> >      if (r == -1 && errno != EINTR && errno != EAGAIN) {
> > diff --git a/vl.c b/vl.c
> > index 9e9c176..dcfab13 100644
> > --- a/vl.c
> > +++ b/vl.c
> > @@ -1817,6 +1817,7 @@ void qemu_system_reset_request(void)
> >      }
> >      if (cpu_single_env) {
> >          cpu_single_env->stopped = 1;
> > +        cpu_exit(cpu_single_env);
> >      }
> >      qemu_notify_event();
> >  }
> 
> What does this second hunk do, specifically in the context of I/O
> processing? The changelog does not mention it explicitly (or I'm missing
> the obvious).
> 
It sets env->exit_request. If qemu_system_reset_request() inside io
handler (happens during S3) we should not return to vcpu till resume,
or terrible things will happen. You are probably right that it should
have been send as different patch.

--
			Gleb.
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux