From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jan Kiszka Subject: Re: qemu-kvm requires apic initialized before vcpu main loop Date: Wed, 09 Dec 2009 21:09:54 +0100 Message-ID: <4B200412.5090005@web.de> References: <20091209174654.GA28056@amt.cnet> <4B1FEB2A.3090906@siemens.com> <20091209192333.GC8739@redhat.com> Mime-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="------------enig7B66AEE54DAEF3A9195F84AE" Cc: Marcelo Tosatti , Avi Kivity , Glauber de Oliveira Costa , kvm To: Gleb Natapov Return-path: Received: from fmmailgate02.web.de ([217.72.192.227]:38773 "EHLO fmmailgate02.web.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754864AbZLIUJy (ORCPT ); Wed, 9 Dec 2009 15:09:54 -0500 In-Reply-To: <20091209192333.GC8739@redhat.com> Sender: kvm-owner@vger.kernel.org List-ID: This is an OpenPGP/MIME signed message (RFC 2440 and 3156) --------------enig7B66AEE54DAEF3A9195F84AE Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable 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=20 >>> 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); >>> =20 >>> + /* apic_reset must be called before the vcpu threads are initial= ized and load=20 >>> + * registers, in qemu-kvm. >>> + */ >>> + apic_reset(s); >>> + >>> local_apics[s->idx] =3D 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 t= o >> 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 bac= k > 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.= Jan >=20 >> TSC MSR, or the guest debugging state. The reset/vmloading/hw-emulatio= n >> 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 prope= r >> mpstate write-back, just even more generalized. >> >> Jan >> >> --=20 >> Siemens AG, Corporate Technology, CT T DE IT 1 >> Corporate Competence Center Embedded Linux --------------enig7B66AEE54DAEF3A9195F84AE Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.9 (GNU/Linux) Comment: Using GnuPG with SUSE - http://enigmail.mozdev.org iEYEARECAAYFAksgBBcACgkQitSsb3rl5xRlBwCdEFeYfWmW/UBHeQ/iFUXrTAIP zkAAn2fQYCt0OyC3zQjckGkYQ2Yr1TWe =ht5v -----END PGP SIGNATURE----- --------------enig7B66AEE54DAEF3A9195F84AE--