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:21:58 +0100 Message-ID: <4B2006E6.6000701@web.de> References: <20091209174654.GA28056@amt.cnet> <4B1FEB2A.3090906@siemens.com> <20091209192333.GC8739@redhat.com> <4B200412.5090005@web.de> <20091209201348.GC28264@amt.cnet> Mime-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="------------enig53AAD84B038A3EABB37C4639" Cc: Jan Kiszka , Gleb Natapov , Avi Kivity , Glauber de Oliveira Costa , kvm To: Marcelo Tosatti Return-path: Received: from fmmailgate03.web.de ([217.72.192.234]:42200 "EHLO fmmailgate03.web.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753679AbZLIUXY (ORCPT ); Wed, 9 Dec 2009 15:23:24 -0500 In-Reply-To: <20091209201348.GC28264@amt.cnet> Sender: kvm-owner@vger.kernel.org List-ID: This is an OpenPGP/MIME signed message (RFC 2440 and 3156) --------------enig53AAD84B038A3EABB37C4639 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Marcelo Tosatti wrote: > 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=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 initi= alized 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 a= nd >>>> 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 b= ack >>> 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 hook= s >> from generic code and ensures proper ordering /wrt other write-backs. >> IMHO, anything else will continue to cause headache like the above to = us. >=20 > You still need to state explicitly that mpstate should be written back,= > in the reset / vmloads paths.=20 Implicitly by declaring what I called "write-back scope" on cpu_synchronize_state. As the write-back handling is arch-specific, it can also decide what has to be written based on the passed scope, including "mpstate or not". >=20 > The advantage i think is that you unify the save/restore code in vcpu > entry/exit paths. Yep, and that you don't have to teach functions like mon_get_cpu() about kvm's mpstate. Jan --------------enig53AAD84B038A3EABB37C4639 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 iEYEARECAAYFAksgBukACgkQitSsb3rl5xRBtACfZtrcc5UO/gX7dAIu9HavF4IE dQwAn198e+Pi8kK1riDQYdXSpHOrRZfO =U7YG -----END PGP SIGNATURE----- --------------enig53AAD84B038A3EABB37C4639--