From mboxrd@z Thu Jan 1 00:00:00 1970 From: Anthony Liguori Subject: Re: [PATCH v3 2/7] hpet: Save/restore cached RTC IRQ level Date: Tue, 31 Jan 2012 15:02:35 -0600 Message-ID: <4F2856EB.1030004@us.ibm.com> References: <1e517ab259c42885b0dbb49ea13db92f2df45815.1328031687.git.jan.kiszka@siemens.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: Blue Swirl , Marcelo Tosatti , qemu-devel , kvm , Avi Kivity To: Jan Kiszka Return-path: In-Reply-To: <1e517ab259c42885b0dbb49ea13db92f2df45815.1328031687.git.jan.kiszka@siemens.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+gceq-qemu-devel=gmane.org@nongnu.org Sender: qemu-devel-bounces+gceq-qemu-devel=gmane.org@nongnu.org List-Id: kvm.vger.kernel.org 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 */ > + } > } > }; >