From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jan Kiszka Subject: [PATCH] qemu-kvm: Fix savevm under -no-kvm Date: Thu, 12 Nov 2009 00:12:00 +0100 Message-ID: <4AFB44C0.3080603@web.de> Mime-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="------------enig383CD17C499FAD1F5E0840AF" Cc: kvm , Glauber Costa To: Avi Kivity , Marcelo Tosatti Return-path: Received: from fmmailgate01.web.de ([217.72.192.221]:48890 "EHLO fmmailgate01.web.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1759531AbZKKXLz (ORCPT ); Wed, 11 Nov 2009 18:11:55 -0500 Sender: kvm-owner@vger.kernel.org List-ID: This is an OpenPGP/MIME signed message (RFC 2440 and 3156) --------------enig383CD17C499FAD1F5E0840AF Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: quoted-printable Although this code is currently under rework for upstream merge, let's make savevm work again when kvm is disabled until we switch over. The change basically aligns us with the logic used for the ioapic. Signed-off-by: Jan Kiszka --- hw/i8259.c | 43 ++++++++++++++++++++++++++++--------------- 1 files changed, 28 insertions(+), 15 deletions(-) diff --git a/hw/i8259.c b/hw/i8259.c index 6f44ceb..7a484c0 100644 --- a/hw/i8259.c +++ b/hw/i8259.c @@ -464,18 +464,33 @@ static uint32_t elcr_ioport_read(void *opaque, uint= 32_t addr1) return s->elcr; } =20 -#ifdef KVM_CAP_IRQCHIP -static void kvm_kernel_pic_save_to_user(void *opaque); -static int kvm_kernel_pic_load_from_user(void *opaque, int version_id); -#endif +static void kvm_kernel_pic_save_to_user(PicState *s); +static int kvm_kernel_pic_load_from_user(PicState *s); + +static void pic_pre_save(void *opaque) +{ + PicState *s =3D opaque; + + if (kvm_enabled() && kvm_irqchip_in_kernel()) { + kvm_kernel_pic_save_to_user(s); + } +} + +static int pic_post_load(void *opaque, int version_id) +{ + PicState *s =3D opaque; + + if (kvm_enabled() && kvm_irqchip_in_kernel()) { + kvm_kernel_pic_load_from_user(s); + } + return 0; +} =20 static const VMStateDescription vmstate_pic =3D { .name =3D "i8259", .version_id =3D 1, -#ifdef KVM_CAP_IRQCHIP - .pre_save =3D kvm_kernel_pic_save_to_user, - .post_load =3D kvm_kernel_pic_load_from_user, -#endif + .pre_save =3D pic_pre_save, + .post_load =3D pic_post_load, .minimum_version_id =3D 1, .minimum_version_id_old =3D 1, .fields =3D (VMStateField []) { @@ -563,11 +578,9 @@ qemu_irq *i8259_init(qemu_irq parent_irq) return qemu_allocate_irqs(i8259_set_irq, s, 16); } =20 -#ifdef KVM_CAP_IRQCHIP -static void kvm_kernel_pic_save_to_user(void *opaque) +static void kvm_kernel_pic_save_to_user(PicState *s) { -#if defined(TARGET_I386) - PicState *s =3D (void *)opaque; +#ifdef KVM_CAP_IRQCHIP struct kvm_irqchip chip; struct kvm_pic_state *kpic; =20 @@ -596,10 +609,9 @@ static void kvm_kernel_pic_save_to_user(void *opaque= ) #endif } =20 -static int kvm_kernel_pic_load_from_user(void *opaque, int version) +static int kvm_kernel_pic_load_from_user(PicState *s) { -#if defined(TARGET_I386) - PicState *s =3D (void *)opaque; +#ifdef KVM_CAP_IRQCHIP struct kvm_irqchip chip; struct kvm_pic_state *kpic; =20 @@ -630,6 +642,7 @@ static int kvm_kernel_pic_load_from_user(void *opaque= , int version) return 0; } =20 +#ifdef KVM_CAP_IRQCHIP static void kvm_i8259_set_irq(void *opaque, int irq, int level) { int pic_ret; --------------enig383CD17C499FAD1F5E0840AF 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 iEYEARECAAYFAkr7RMcACgkQitSsb3rl5xQ2BACguIb0lWUcojo6Jncm6ubUxvld tAMAnRoNhcH49AXFMooqTUyzaXJDkNvN =FpEi -----END PGP SIGNATURE----- --------------enig383CD17C499FAD1F5E0840AF--