From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jan Kiszka Subject: Re: [PATCH v2 2/2] qemu-kvm: x86: Add support for event states Date: Fri, 06 Nov 2009 09:44:04 +0100 Message-ID: <4AF3E1D4.80600@web.de> References: <4AF06A10.6000208@siemens.com> <4AF06B7A.8000901@siemens.com> <4AF28C0A.8050209@siemens.com> Mime-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="------------enig3755D1D12C3D336D666ED6A9" Cc: kvm To: Marcelo Tosatti , Avi Kivity Return-path: Received: from fmmailgate02.web.de ([217.72.192.227]:48623 "EHLO fmmailgate02.web.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753517AbZKFIqU (ORCPT ); Fri, 6 Nov 2009 03:46:20 -0500 In-Reply-To: <4AF28C0A.8050209@siemens.com> Sender: kvm-owner@vger.kernel.org List-ID: This is an OpenPGP/MIME signed message (RFC 2440 and 3156) --------------enig3755D1D12C3D336D666ED6A9 Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: quoted-printable Jan Kiszka wrote: > This patch extends the qemu-kvm state sync logic with the event substat= e > from the new VCPU state interface, giving access to yet missing > exception, interrupt and NMI states. >=20 > The patch does not switch the rest of qemu-kvm's code to the new > interface as it is expected to be morphed into upstream's version > anyway. Instead, a full conversion will be submitted for upstream. >=20 > Signed-off-by: Jan Kiszka > --- >=20 > Changes from v1: > - added support for has_error_code > - properly clear exception_index and interrupt_injected in case the > kernel does not support KVM_GET_VCPU_STATE >=20 > qemu-kvm-x86.c | 86 +++++++++++++++++++++++++++++++++++++++++= ++++++++ > target-i386/cpu.h | 5 +++ > target-i386/machine.c | 5 +++ > 3 files changed, 96 insertions(+), 0 deletions(-) >=20 > diff --git a/qemu-kvm-x86.c b/qemu-kvm-x86.c > index e03a4ba..dc3e6cb 100644 > --- a/qemu-kvm-x86.c > +++ b/qemu-kvm-x86.c > @@ -903,6 +903,82 @@ static void get_seg(SegmentCache *lhs, const struc= t kvm_segment *rhs) > | (rhs->avl * DESC_AVL_MASK); > } > =20 > +static void kvm_get_events(CPUState *env) > +{ > +#ifdef KVM_CAP_VCPU_STATE > + struct { > + struct kvm_vcpu_state header; > + struct kvm_vcpu_substate substates[1]; > + } request; > + struct kvm_x86_event_state events; > + int r; > + > + request.header.nsubstates =3D 1; > + request.header.substates[0].type =3D KVM_X86_VCPU_STATE_EVENTS; > + request.header.substates[0].offset =3D (size_t)&events - (size_t)&= request; > + r =3D kvm_vcpu_ioctl(env, KVM_GET_VCPU_STATE, &request); > + if (r =3D=3D 0) { > + env->exception_index =3D > + events.exception.injected ? events.exception.nr : -1; > + env->has_error_code =3D events.exception.has_error_code; > + env->error_code =3D events.exception.error_code; > + > + env->interrupt_injected =3D > + events.interrupt.injected ? events.interrupt.nr : -1; > + env->soft_interrupt =3D events.interrupt.soft; > + > + env->nmi_injected =3D events.nmi.injected; > + env->nmi_pending =3D events.nmi.pending; > + if (events.nmi.masked) { > + env->hflags2 |=3D HF2_NMI_MASK; > + } else { > + env->hflags2 &=3D ~HF2_NMI_MASK; > + } > + > + env->sipi_vector =3D events.sipi_vector; > + > + return; > + } > +#endif > + env->exception_index =3D -1; > + env->interrupt_injected =3D -1; > + env->nmi_injected =3D 0; > + env->nmi_pending =3D 0; > + env->hflags2 &=3D ~HF2_NMI_MASK; Frankly, I don't recall anymore why I added these 5 lines. This state is reached on every guest reset and won't change afterwards unless the kernel actually supports KVM_X86_VCPU_STATE_EVENTS. This is temporary code, the upstream version will not contain it, but if you want me to clean this up, just drop me a note. Jan --------------enig3755D1D12C3D336D666ED6A9 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 iEYEARECAAYFAkrz4dkACgkQitSsb3rl5xRxUgCg3/MZM2W3N5yXI/17meCs5jyZ llIAn2zbppdUPpxR4ZeT9OnUWz6jWixJ =KHJ3 -----END PGP SIGNATURE----- --------------enig3755D1D12C3D336D666ED6A9--