From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:59547) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RsKyf-0005IL-3h for qemu-devel@nongnu.org; Tue, 31 Jan 2012 16:11:02 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RsKyd-0007RA-RN for qemu-devel@nongnu.org; Tue, 31 Jan 2012 16:10:57 -0500 Received: from e8.ny.us.ibm.com ([32.97.182.138]:58525) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RsKyd-0007Pp-MY for qemu-devel@nongnu.org; Tue, 31 Jan 2012 16:10:55 -0500 Received: from /spool/local by e8.ny.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 31 Jan 2012 16:10:48 -0500 Received: from d01relay06.pok.ibm.com (d01relay06.pok.ibm.com [9.56.227.116]) by d01dlp01.pok.ibm.com (Postfix) with ESMTP id 131E238C80BF for ; Tue, 31 Jan 2012 16:08:37 -0500 (EST) Received: from d03av05.boulder.ibm.com (d03av05.boulder.ibm.com [9.17.195.85]) by d01relay06.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id q0VL8OYk2973742 for ; Tue, 31 Jan 2012 16:08:24 -0500 Received: from d03av05.boulder.ibm.com (loopback [127.0.0.1]) by d03av05.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id q0VL7Afc031761 for ; Tue, 31 Jan 2012 14:07:59 -0700 Message-ID: <4F2856EB.1030004@us.ibm.com> Date: Tue, 31 Jan 2012 15:02:35 -0600 From: Anthony Liguori MIME-Version: 1.0 References: <1e517ab259c42885b0dbb49ea13db92f2df45815.1328031687.git.jan.kiszka@siemens.com> In-Reply-To: <1e517ab259c42885b0dbb49ea13db92f2df45815.1328031687.git.jan.kiszka@siemens.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v3 2/7] hpet: Save/restore cached RTC IRQ level List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Jan Kiszka Cc: Blue Swirl , Marcelo Tosatti , qemu-devel , kvm , Avi Kivity On 01/31/2012 11:41 AM, Jan Kiszka wrote: > In legacy mode, the HPET suppresses the RTC interrupt delivery via IRQ > 8 but keeps track of the RTC output level and applies it when legacy > mode is turned off again. This value has to be preserved across save/ > restore as it cannot be reconstructed otherwise. > > Signed-off-by: Jan Kiszka > --- > hw/hpet.c | 26 ++++++++++++++++++++++++++ > 1 files changed, 26 insertions(+), 0 deletions(-) > > diff --git a/hw/hpet.c b/hw/hpet.c > index aba9ea9..39b291f 100644 > --- a/hw/hpet.c > +++ b/hw/hpet.c > @@ -240,6 +240,24 @@ static int hpet_post_load(void *opaque, int version_id) > return 0; > } > > +static bool hpet_rtc_irq_level_needed(void *opaque) > +{ > + HPETState *s = opaque; > + > + return s->rtc_irq_level != 0; > +} > + > +static const VMStateDescription vmstate_hpet_rtc_irq_level = { > + .name = "hpet/rtc_irq_level", > + .version_id = 1, > + .minimum_version_id = 1, > + .minimum_version_id_old = 1, > + .fields = (VMStateField[]) { > + VMSTATE_UINT8(rtc_irq_level, HPETState), > + VMSTATE_END_OF_LIST() > + } > +}; > + This won't work. We don't clear rtc_irq_level on reset so rtc_irq_level may be high or low after reset. As such, we can't use a subsection here. We need to bump the savevm state. Regards, Anthony Liguori > static const VMStateDescription vmstate_hpet_timer = { > .name = "hpet_timer", > .version_id = 1, > @@ -273,6 +291,14 @@ static const VMStateDescription vmstate_hpet = { > VMSTATE_STRUCT_VARRAY_UINT8(timer, HPETState, num_timers, 0, > vmstate_hpet_timer, HPETTimer), > VMSTATE_END_OF_LIST() > + }, > + .subsections = (VMStateSubsection[]) { > + { > + .vmsd =&vmstate_hpet_rtc_irq_level, > + .needed = hpet_rtc_irq_level_needed, > + }, { > + /* empty */ > + } > } > }; >