From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:38534) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SAQmp-0006Fa-Hp for qemu-devel@nongnu.org; Wed, 21 Mar 2012 15:01:33 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1SAQmj-0002dF-0J for qemu-devel@nongnu.org; Wed, 21 Mar 2012 15:01:31 -0400 Received: from mail-gx0-f173.google.com ([209.85.161.173]:62227) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SAQmi-0002cu-Rk for qemu-devel@nongnu.org; Wed, 21 Mar 2012 15:01:24 -0400 Received: by ggnj2 with SMTP id j2so1470426ggn.4 for ; Wed, 21 Mar 2012 12:01:22 -0700 (PDT) Message-ID: <4F6A257E.20600@redhat.com> Date: Wed, 21 Mar 2012 14:01:18 -0500 From: Anthony Liguori MIME-Version: 1.0 References: <4F58664D.1070800@cn.fujitsu.com> <4F5868C4.2090509@cn.fujitsu.com> <4F5886C4.7040100@cn.fujitsu.com> <4F5897F8.6090503@redhat.com> <20120308113607.GC25529@redhat.com> <4F589D8D.4030105@redhat.com> <20120308115656.GD25529@redhat.com> <20120309222256.GA24975@amt.cnet> In-Reply-To: <20120309222256.GA24975@amt.cnet> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [RESEND][PATCH 2/2 v3] deal with guest panicked event List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Marcelo Tosatti Cc: kvm list , Gleb Natapov , Jan Kiszka , qemu-devel , "linux-kernel@vger.kernel.org" , Avi Kivity , KAMEZAWA Hiroyuki On 03/09/2012 04:22 PM, Marcelo Tosatti wrote: > On Thu, Mar 08, 2012 at 11:56:56AM +0000, Daniel P. Berrange wrote: >> On Thu, Mar 08, 2012 at 01:52:45PM +0200, Avi Kivity wrote: >>> On 03/08/2012 01:36 PM, Daniel P. Berrange wrote: >>>> On Thu, Mar 08, 2012 at 01:28:56PM +0200, Avi Kivity wrote: >>>>> On 03/08/2012 12:15 PM, Wen Congyang wrote: >>>>>> When the host knows the guest is panicked, it will set >>>>>> exit_reason to KVM_EXIT_GUEST_PANICKED. So if qemu receive >>>>>> this exit_reason, we can send a event to tell management >>>>>> application that the guest is panicked and set the guest >>>>>> status to RUN_STATE_PANICKED. >>>>>> >>>>>> Signed-off-by: Wen Congyang >>>>>> --- >>>>>> kvm-all.c | 5 +++++ >>>>>> monitor.c | 3 +++ >>>>>> monitor.h | 1 + >>>>>> qapi-schema.json | 2 +- >>>>>> qmp.c | 3 ++- >>>>>> vl.c | 1 + >>>>>> 6 files changed, 13 insertions(+), 2 deletions(-) >>>>>> >>>>>> diff --git a/kvm-all.c b/kvm-all.c >>>>>> index 77eadf6..b3c9a83 100644 >>>>>> --- a/kvm-all.c >>>>>> +++ b/kvm-all.c >>>>>> @@ -1290,6 +1290,11 @@ int kvm_cpu_exec(CPUState *env) >>>>>> (uint64_t)run->hw.hardware_exit_reason); >>>>>> ret = -1; >>>>>> break; >>>>>> + case KVM_EXIT_GUEST_PANICKED: >>>>>> + monitor_protocol_event(QEVENT_GUEST_PANICKED, NULL); >>>>>> + vm_stop(RUN_STATE_PANICKED); >>>>>> + ret = -1; >>>>>> + break; >>>>>> >>>>> >>>>> If the management application is not aware of this event, then it will >>>>> never resume the guest, so it will appear hung. >>>> >>>> Even if the mgmt app doesn't know about the QEVENT_GUEST_PANICKED, it should >>>> still see a QEVENT_STOP event emitted by vm_stop() surely ? So it will >>>> know the guest CPUs have been stopped, even if it isn't aware of the >>>> reason why, which seems fine to me. >>> >>> No. The guest is stopped, and there's no reason to suppose that the >>> management app will restart it. Behaviour has changed. >>> >>> Suppose the guest has reboot_on_panic set; now the behaviour change is >>> even more visible - service will stop completely instead of being >>> interrupted for a bit while the guest reboots. >> >> Hmm, so this calls for a new command line argument to control behaviour, >> similar to what we do for disk werror, eg something like >> >> --onpanic "report|pause|stop|..." >> >> where >> >> report - emit QEVENT_GUEST_PANICKED only > > Should be the default. Should we just have a mechanism to stop the guest on certain types of QMP events? For instance: -stop-on guest-panicked,block-ioerror Likewise, we could have a: -quit-on guest-panicked. In the very least, we should make what we use for rerror,werror an enumeration that's shared here. Regards, Anthony Liguori > >> pause - emit QEVENT_GUEST_PANICKED and pause VM >> stop - emit QEVENT_GUEST_PANICKED and quit VM > > "quit" is a better name than "stop". > >> This would map fairly well into libvirt, where we already have config >> parameters for controlling what todo with a guest when it panics. >> >> Regards, >> Daniel > >