From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jan Kiszka Subject: Re: [PATCH 1/3] kvm: move KVM_GET_LAPIC/KVM_SET_LAPIC to hw/kvm/apic.c Date: Tue, 30 Oct 2012 19:13:56 +0100 Message-ID: <509018E4.9020001@web.de> References: <1351599394-24876-1-git-send-email-pbonzini@redhat.com> <1351599394-24876-2-git-send-email-pbonzini@redhat.com> Mime-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="------------enig28B42B36C25B8C61192A3475" Cc: qemu-devel@nongnu.org, avi@redhat.com, mtosatti@redhat.com, kvm@vger.kernel.org To: Paolo Bonzini Return-path: Received: from mout.web.de ([212.227.17.12]:65149 "EHLO mout.web.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S965010Ab2J3SOK (ORCPT ); Tue, 30 Oct 2012 14:14:10 -0400 In-Reply-To: <1351599394-24876-2-git-send-email-pbonzini@redhat.com> Sender: kvm-owner@vger.kernel.org List-ID: This is an OpenPGP/MIME signed message (RFC 2440 and 3156) --------------enig28B42B36C25B8C61192A3475 Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: quoted-printable On 2012-10-30 13:16, Paolo Bonzini wrote: > Leave knowledge of the KVM in-kernel LAPIC ioctls to hw/kvm/apic.c. > The CPU doesn't need to know anything about kvm_lapic_state. >=20 > Signed-off-by: Paolo Bonzini > --- > hw/kvm/apic.c | 76 ++++++++++++++++++++++++++++++---------------= -------- > kvm.h | 4 +- > target-i386/kvm.c | 14 +-------- > 3 files changed, 47 insertions(+), 47 deletions(-) >=20 > diff --git a/hw/kvm/apic.c b/hw/kvm/apic.c > index dbac7ff..ddf6b7d 100644 > --- a/hw/kvm/apic.c > +++ b/hw/kvm/apic.c > @@ -25,62 +25,72 @@ static inline uint32_t kvm_apic_get_reg(struct kvm_= lapic_state *kapic, > return *((uint32_t *)(kapic->regs + (reg_id << 4))); > } > =20 > -void kvm_put_apic_state(DeviceState *d, struct kvm_lapic_state *kapic)= > +int kvm_put_apic_state(DeviceState *d) > { > APICCommonState *s =3D DO_UPCAST(APICCommonState, busdev.qdev, d);= > + struct kvm_lapic_state kapic; > int i; > =20 > - memset(kapic, 0, sizeof(*kapic)); > - kvm_apic_set_reg(kapic, 0x2, s->id << 24); > - kvm_apic_set_reg(kapic, 0x8, s->tpr); > - kvm_apic_set_reg(kapic, 0xd, s->log_dest << 24); > - kvm_apic_set_reg(kapic, 0xe, s->dest_mode << 28 | 0x0fffffff); > - kvm_apic_set_reg(kapic, 0xf, s->spurious_vec); > + memset(&kapic, 0, sizeof(kapic)); > + kvm_apic_set_reg(&kapic, 0x2, s->id << 24); > + kvm_apic_set_reg(&kapic, 0x8, s->tpr); > + kvm_apic_set_reg(&kapic, 0xd, s->log_dest << 24); > + kvm_apic_set_reg(&kapic, 0xe, s->dest_mode << 28 | 0x0fffffff); > + kvm_apic_set_reg(&kapic, 0xf, s->spurious_vec); > for (i =3D 0; i < 8; i++) { > - kvm_apic_set_reg(kapic, 0x10 + i, s->isr[i]); > - kvm_apic_set_reg(kapic, 0x18 + i, s->tmr[i]); > - kvm_apic_set_reg(kapic, 0x20 + i, s->irr[i]); > + kvm_apic_set_reg(&kapic, 0x10 + i, s->isr[i]); > + kvm_apic_set_reg(&kapic, 0x18 + i, s->tmr[i]); > + kvm_apic_set_reg(&kapic, 0x20 + i, s->irr[i]); > } > - kvm_apic_set_reg(kapic, 0x28, s->esr); > - kvm_apic_set_reg(kapic, 0x30, s->icr[0]); > - kvm_apic_set_reg(kapic, 0x31, s->icr[1]); > + kvm_apic_set_reg(&kapic, 0x28, s->esr); > + kvm_apic_set_reg(&kapic, 0x30, s->icr[0]); > + kvm_apic_set_reg(&kapic, 0x31, s->icr[1]); > for (i =3D 0; i < APIC_LVT_NB; i++) { > - kvm_apic_set_reg(kapic, 0x32 + i, s->lvt[i]); > + kvm_apic_set_reg(&kapic, 0x32 + i, s->lvt[i]); > } > - kvm_apic_set_reg(kapic, 0x38, s->initial_count); > - kvm_apic_set_reg(kapic, 0x3e, s->divide_conf); > + kvm_apic_set_reg(&kapic, 0x38, s->initial_count); > + kvm_apic_set_reg(&kapic, 0x3e, s->divide_conf); > + > + return kvm_vcpu_ioctl(s->cpu_env, KVM_SET_LAPIC, &kapic); > } > =20 > -void kvm_get_apic_state(DeviceState *d, struct kvm_lapic_state *kapic)= > +int kvm_get_apic_state(DeviceState *d) > { > APICCommonState *s =3D DO_UPCAST(APICCommonState, busdev.qdev, d);= > - int i, v; > - > - s->id =3D kvm_apic_get_reg(kapic, 0x2) >> 24; > - s->tpr =3D kvm_apic_get_reg(kapic, 0x8); > - s->arb_id =3D kvm_apic_get_reg(kapic, 0x9); > - s->log_dest =3D kvm_apic_get_reg(kapic, 0xd) >> 24; > - s->dest_mode =3D kvm_apic_get_reg(kapic, 0xe) >> 28; > - s->spurious_vec =3D kvm_apic_get_reg(kapic, 0xf); > + struct kvm_lapic_state kapic; > + int i, v, ret; > + > + ret =3D kvm_vcpu_ioctl(s->cpu_env, KVM_GET_LAPIC, &kapic); > + if (ret < 0) { > + return ret; > + } > + > + s->id =3D kvm_apic_get_reg(&kapic, 0x2) >> 24; > + s->tpr =3D kvm_apic_get_reg(&kapic, 0x8); > + s->arb_id =3D kvm_apic_get_reg(&kapic, 0x9); > + s->log_dest =3D kvm_apic_get_reg(&kapic, 0xd) >> 24; > + s->dest_mode =3D kvm_apic_get_reg(&kapic, 0xe) >> 28; > + s->spurious_vec =3D kvm_apic_get_reg(&kapic, 0xf); > for (i =3D 0; i < 8; i++) { > - s->isr[i] =3D kvm_apic_get_reg(kapic, 0x10 + i); > - s->tmr[i] =3D kvm_apic_get_reg(kapic, 0x18 + i); > - s->irr[i] =3D kvm_apic_get_reg(kapic, 0x20 + i); > + s->isr[i] =3D kvm_apic_get_reg(&kapic, 0x10 + i); > + s->tmr[i] =3D kvm_apic_get_reg(&kapic, 0x18 + i); > + s->irr[i] =3D kvm_apic_get_reg(&kapic, 0x20 + i); > } > - s->esr =3D kvm_apic_get_reg(kapic, 0x28); > - s->icr[0] =3D kvm_apic_get_reg(kapic, 0x30); > - s->icr[1] =3D kvm_apic_get_reg(kapic, 0x31); > + s->esr =3D kvm_apic_get_reg(&kapic, 0x28); > + s->icr[0] =3D kvm_apic_get_reg(&kapic, 0x30); > + s->icr[1] =3D kvm_apic_get_reg(&kapic, 0x31); > for (i =3D 0; i < APIC_LVT_NB; i++) { > - s->lvt[i] =3D kvm_apic_get_reg(kapic, 0x32 + i); > + s->lvt[i] =3D kvm_apic_get_reg(&kapic, 0x32 + i); > } > - s->initial_count =3D kvm_apic_get_reg(kapic, 0x38); > - s->divide_conf =3D kvm_apic_get_reg(kapic, 0x3e); > + s->initial_count =3D kvm_apic_get_reg(&kapic, 0x38); > + s->divide_conf =3D kvm_apic_get_reg(&kapic, 0x3e); > =20 > v =3D (s->divide_conf & 3) | ((s->divide_conf >> 1) & 4); > s->count_shift =3D (v + 1) & 7; > =20 > s->initial_count_load_time =3D qemu_get_clock_ns(vm_clock); > apic_next_timer(s, s->initial_count_load_time); > + return 0; > } > =20 > static void kvm_apic_set_base(APICCommonState *s, uint64_t val) > diff --git a/kvm.h b/kvm.h > index 2b26dcb..0056f92 100644 > --- a/kvm.h > +++ b/kvm.h > @@ -191,8 +191,8 @@ int kvm_irqchip_send_msi(KVMState *s, MSIMessage ms= g); > =20 > void kvm_irqchip_add_irq_route(KVMState *s, int gsi, int irqchip, int = pin); > =20 > -void kvm_put_apic_state(DeviceState *d, struct kvm_lapic_state *kapic)= ; > -void kvm_get_apic_state(DeviceState *d, struct kvm_lapic_state *kapic)= ; > +int kvm_put_apic_state(DeviceState *d); > +int kvm_get_apic_state(DeviceState *d); > =20 > struct kvm_guest_debug; > struct kvm_debug_exit_arch; > diff --git a/target-i386/kvm.c b/target-i386/kvm.c > index 3aa62b2..092d4f1 100644 > --- a/target-i386/kvm.c > +++ b/target-i386/kvm.c > @@ -1384,16 +1384,9 @@ static int kvm_get_mp_state(CPUX86State *env) > static int kvm_get_apic(CPUX86State *env) > { > DeviceState *apic =3D env->apic_state; > - struct kvm_lapic_state kapic; > - int ret; > =20 > if (apic && kvm_irqchip_in_kernel()) { > - ret =3D kvm_vcpu_ioctl(env, KVM_GET_LAPIC, &kapic); > - if (ret < 0) { > - return ret; > - } > - > - kvm_get_apic_state(apic, &kapic); > + return kvm_get_apic_state(apic); > } > return 0; > } > @@ -1401,12 +1394,9 @@ static int kvm_get_apic(CPUX86State *env) > static int kvm_put_apic(CPUX86State *env) > { > DeviceState *apic =3D env->apic_state; > - struct kvm_lapic_state kapic; > =20 > if (apic && kvm_irqchip_in_kernel()) { > - kvm_put_apic_state(apic, &kapic); > - > - return kvm_vcpu_ioctl(env, KVM_SET_LAPIC, &kapic); > + return kvm_put_apic_state(apic); > } > return 0; > } >=20 This refactoring is fine with me. Acked-by: Jan Kiszka Jan --------------enig28B42B36C25B8C61192A3475 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.16 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://www.enigmail.net/ iEYEARECAAYFAlCQGOYACgkQitSsb3rl5xRgFgCfVmJflCskrY1Ebvh3hzPso2vQ D2UAmgOhh2GPQPQqmLZ/a/nMNiB5tTtB =izwp -----END PGP SIGNATURE----- --------------enig28B42B36C25B8C61192A3475--