From mboxrd@z Thu Jan 1 00:00:00 1970 From: Avi Kivity Subject: Re: qemu-kvm: do not allow vcpu stop with in progress PIO Date: Wed, 10 Feb 2010 09:02:00 +0200 Message-ID: <4B7259E8.70904@redhat.com> References: <20100128190300.414710338@redhat.com> <20100128190411.495771070@redhat.com> <4B6B1D1F.1080701@redhat.com> <20100204213643.GC2766@amt.cnet> <4B6B4031.80008@redhat.com> <20100208224119.GA6516@amt.cnet> <4B710300.7090903@redhat.com> <20100209205805.GA25144@amt.cnet> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Cc: kvm@vger.kernel.org, quintela@redhat.com, Gleb Natapov To: Marcelo Tosatti Return-path: Received: from mx1.redhat.com ([209.132.183.28]:8892 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755371Ab0BJHCD (ORCPT ); Wed, 10 Feb 2010 02:02:03 -0500 Received: from int-mx05.intmail.prod.int.phx2.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.18]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id o1A722MF017287 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Wed, 10 Feb 2010 02:02:03 -0500 In-Reply-To: <20100209205805.GA25144@amt.cnet> Sender: kvm-owner@vger.kernel.org List-ID: On 02/09/2010 10:58 PM, Marcelo Tosatti wrote: > You're right... this should be enough to avoid a stop with uncomplete > PIO (and this is what happens for MMIO already). The signal will not > be dequeued, so KVM will complete_pio and exit before entering with > -EAGAIN. Please review and queue for stable. > > Not right enough. This is very fragile, we depend on the kernel noticing the signal after completing pio but before starting execution. I don't think we guarantee that. Maybe we should turn complete_pio/complete_mmio to an ioctl, so that we can control what happens exactly. Or maybe it's simplest to document it as a feature and guarantee it. There's some merit in it - only guest execution is the nonatomic part, so we only interrupt that. > qemu upstream needs a bit more work. > Could be as simple as raising a blocked exception that is unmasked by kvm, then entering the guest. > ------- > > Re-enter the kernel to complete in progress PIO. Otherwise the > operation can be lost during migration. > > Signed-off-by: Marcelo Tosatti > > Index: qemu-kvm/qemu-kvm.c > =================================================================== > --- qemu-kvm.orig/qemu-kvm.c > +++ qemu-kvm/qemu-kvm.c > @@ -967,6 +967,7 @@ int kvm_run(CPUState *env) > run->io.direction, > run->io.size, > run->io.count); > + r = 0; > break; > case KVM_EXIT_DEBUG: > r = handle_debug(env); > -- Do not meddle in the internals of kernels, for they are subtle and quick to panic.