From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1LwBBL-0003jf-K6 for qemu-devel@nongnu.org; Tue, 21 Apr 2009 04:18:19 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1LwBBH-0003jE-T9 for qemu-devel@nongnu.org; Tue, 21 Apr 2009 04:18:19 -0400 Received: from [199.232.76.173] (port=40096 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LwBBH-0003jB-QK for qemu-devel@nongnu.org; Tue, 21 Apr 2009 04:18:15 -0400 Received: from mx20.gnu.org ([199.232.41.8]:55685) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1LwBBH-0000v1-9L for qemu-devel@nongnu.org; Tue, 21 Apr 2009 04:18:15 -0400 Received: from mx2.redhat.com ([66.187.237.31]) by mx20.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1LwBBG-00064O-GC for qemu-devel@nongnu.org; Tue, 21 Apr 2009 04:18:14 -0400 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n3L8IDNU018042 for ; Tue, 21 Apr 2009 04:18:13 -0400 Date: Tue, 21 Apr 2009 11:18:11 +0300 From: Gleb Natapov Subject: Re: [Qemu-devel] [PATCH] Change RTC time drift IRQ re-injection Message-ID: <20090421081811.GA10126@redhat.com> References: <20090406132526.GA9153@redhat.com> <49E9E9D2.509@us.ibm.com> <49EB2FF2.70806@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <49EB2FF2.70806@redhat.com> List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: dlaor@redhat.com, qemu-devel@nongnu.org On Sun, Apr 19, 2009 at 05:06:42PM +0300, Dor Laor wrote: > Anthony Liguori wrote: >> Gleb Natapov wrote: >>> Currently IRQ are reinjected as soon as they are acknowledged to >>> the RTC, but Windows sometimes do acknowledgement in a loop with >>> global interrupt disabled waiting for interrupt to be cleared and >>> it does not mask RTC vector in PIC/APIC while doing this. In such >>> situation interrupt injection always fails and RTC interrupt is never >>> cleared. >>> >>> Instead of reinjecting coalesced IRQs on acknowledgement the patch below >>> reinjects them by accelerating RTC clock a bit. This way RTC interrupt >>> is not constantly raced after coalesced interrupt. >>> >>> Signed-off-by: Gleb Natapov >>> s->cmos_data[RTC_REG_C] = 0x00; >>> break; >>> default: >>> @@ -512,6 +539,7 @@ static void rtc_save_td(QEMUFile *f, void *opaque) >>> qemu_put_be32(f, s->irq_coalesced); >>> qemu_put_be32(f, s->period); >>> + qemu_put_timer(f, s->coalesced_timer); >>> } >>> static int rtc_load_td(QEMUFile *f, void *opaque, int version_id) >>> @@ -523,6 +551,7 @@ static int rtc_load_td(QEMUFile *f, void *opaque, >>> int version_id) >>> s->irq_coalesced = qemu_get_be32(f); >>> s->period = qemu_get_be32(f); >>> + qemu_get_timer(f, s->coalesced_timer); >>> return 0; >>> >> >> If you're adding something to the savevm format, you have to increment >> the version_id and handle older versions correctly. >> >> > Actually, it is not a must to save this boolean, you can assume it is > set and schedule it for the current time on the load. > This is not boolean. This is timer. But you are right, there is no point is saving it. It can be restarted after migration. -- Gleb.