From mboxrd@z Thu Jan 1 00:00:00 1970 From: Marcelo Tosatti Subject: Re: qemu-kvm requires apic initialized before vcpu main loop Date: Wed, 9 Dec 2009 18:13:48 -0200 Message-ID: <20091209201348.GC28264@amt.cnet> References: <20091209174654.GA28056@amt.cnet> <4B1FEB2A.3090906@siemens.com> <20091209192333.GC8739@redhat.com> <4B200412.5090005@web.de> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: Gleb Natapov , Avi Kivity , Glauber de Oliveira Costa , kvm To: Jan Kiszka Return-path: Received: from mx1.redhat.com ([209.132.183.28]:49557 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757630AbZLIUOL (ORCPT ); Wed, 9 Dec 2009 15:14:11 -0500 Content-Disposition: inline In-Reply-To: <4B200412.5090005@web.de> Sender: kvm-owner@vger.kernel.org List-ID: On Wed, Dec 09, 2009 at 09:09:54PM +0100, Jan Kiszka wrote: > Gleb Natapov wrote: > > On Wed, Dec 09, 2009 at 07:23:38PM +0100, Jan Kiszka wrote: > >> Marcelo Tosatti wrote: > >>> Otherwise a zero apic base is loaded into KVM, which results > >>> in interrupts being lost until a proper apic base with enabled > >>> bit set is loaded. > >>> > >>> Fixes WinXP migration in qemu-kvm origin/next. > >>> > >>> Signed-off-by: Marcelo Tosatti > >>> > >>> diff --git a/hw/apic.c b/hw/apic.c > >>> index 627ff98..45a4d2b 100644 > >>> --- a/hw/apic.c > >>> +++ b/hw/apic.c > >>> @@ -1131,6 +1131,11 @@ int apic_init(CPUState *env) > >>> vmstate_register(s->idx, &vmstate_apic, s); > >>> qemu_register_reset(apic_reset, s); > >>> > >>> + /* apic_reset must be called before the vcpu threads are initialized and load > >>> + * registers, in qemu-kvm. > >>> + */ > >>> + apic_reset(s); > >>> + > >>> local_apics[s->idx] = s; > >>> return 0; > >>> } > >> Heals the issue I saw with Win2003 Server as well. > >> > >> Looks all a bit messy though. Hope we can establish a more regular and > >> less fragile model on the midterm. I wonder if it wouldn't be better to > >> do write-back of the local APIC state along with the register state on > >> vmrun (and only there!). The same would apply to things like mpstate, > > Write back of mp state there is a bug and introduce races. Do write back > > of the whole APIC state there looks like a recipe for disaster. > > Please read the full suggestion: We will only write-back if we were > going through a reset or vmload before. That removes the ugly kvm hooks > from generic code and ensures proper ordering /wrt other write-backs. > IMHO, anything else will continue to cause headache like the above to us. You still need to state explicitly that mpstate should be written back, in the reset / vmloads paths. The advantage i think is that you unify the save/restore code in vcpu entry/exit paths. > > Jan > > > > >> TSC MSR, or the guest debugging state. The reset/vmloading/hw-emulation > >> code would only declare what kind of write-back it wishes: register > >> state only, partial (excluding everything that touches continuously > >> running timers), full. Well, basically the model I suggested for proper > >> mpstate write-back, just even more generalized. > >> > >> Jan > >> > >> -- > >> Siemens AG, Corporate Technology, CT T DE IT 1 > >> Corporate Competence Center Embedded Linux >