From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matt Evans Subject: Re: [PATCH] kvm tools: Clean up LINT assignment code Date: Wed, 14 Dec 2011 13:06:44 +1100 Message-ID: <4EE804B4.5020904@ozlabs.org> References: <1323633019-8424-1-git-send-email-levinsasha928@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: QUOTED-PRINTABLE Cc: penberg@kernel.org, mingo@elte.hu, gorcunov@gmail.com, asias.hejun@gmail.com, kvm@vger.kernel.org To: Sasha Levin Return-path: Received: from ozlabs.org ([203.10.76.45]:46272 "EHLO ozlabs.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753655Ab1LNCFs (ORCPT ); Tue, 13 Dec 2011 21:05:48 -0500 In-Reply-To: <1323633019-8424-1-git-send-email-levinsasha928@gmail.com> Sender: kvm-owner@vger.kernel.org List-ID: Hi Sasha, On 12/12/11 06:50, Sasha Levin wrote: > Just set delivery mode directly without going through ugly casting. >=20 > This cleans up and simplifies the code. >=20 > Signed-off-by: Sasha Levin > --- > tools/kvm/x86/kvm-cpu.c | 10 ++-------- > 1 files changed, 2 insertions(+), 8 deletions(-) >=20 > diff --git a/tools/kvm/x86/kvm-cpu.c b/tools/kvm/x86/kvm-cpu.c > index 27b7a8f..cc1f560 100644 > --- a/tools/kvm/x86/kvm-cpu.c > +++ b/tools/kvm/x86/kvm-cpu.c > @@ -81,18 +81,12 @@ static int kvm_cpu__set_lint(struct kvm_cpu *vcpu= ) > { > struct kvm_lapic_state klapic; > struct local_apic *lapic =3D (void *)&klapic; > - u32 lvt; > =20 > if (ioctl(vcpu->vcpu_fd, KVM_GET_LAPIC, &klapic)) > return -1; > =20 > - lvt =3D *(u32 *)&lapic->lvt_lint0; > - lvt =3D SET_APIC_DELIVERY_MODE(lvt, APIC_MODE_EXTINT); > - *(u32 *)&lapic->lvt_lint0 =3D lvt; > - > - lvt =3D *(u32 *)&lapic->lvt_lint1; > - lvt =3D SET_APIC_DELIVERY_MODE(lvt, APIC_MODE_NMI); > - *(u32 *)&lapic->lvt_lint1 =3D lvt; > + lapic->lvt_lint0.delivery_mode =3D APIC_MODE_EXTINT; > + lapic->lvt_lint1.delivery_mode =3D APIC_MODE_NMI; > =20 > return ioctl(vcpu->vcpu_fd, KVM_SET_LAPIC, &klapic); > } I'm getting this on x86-32, gcc 4.4.3: CC x86/kvm-cpu.o cc1: warnings being treated as errors x86/kvm-cpu.c: In function =91kvm_cpu__set_lint=92: x86/kvm-cpu.c:89: error: dereferencing pointer =91lapic=92 does break s= trict-aliasing rules x86/kvm-cpu.c:88: error: dereferencing pointer =91lapic=92 does break s= trict-aliasing rules x86/kvm-cpu.c:83: note: initialized from here make: *** [x86/kvm-cpu.o] Error 1 Removing the nasty aliasing (patch below) seems to be a good way to go.= What do you think? Cheers, Matt --- diff --git a/tools/kvm/x86/kvm-cpu.c b/tools/kvm/x86/kvm-cpu.c index cc1f560..30f1ad6 100644 --- a/tools/kvm/x86/kvm-cpu.c +++ b/tools/kvm/x86/kvm-cpu.c @@ -79,16 +79,15 @@ void kvm_cpu__delete(struct kvm_cpu *vcpu) =20 static int kvm_cpu__set_lint(struct kvm_cpu *vcpu) { - struct kvm_lapic_state klapic; - struct local_apic *lapic =3D (void *)&klapic; + struct local_apic lapic; =20 - if (ioctl(vcpu->vcpu_fd, KVM_GET_LAPIC, &klapic)) + if (ioctl(vcpu->vcpu_fd, KVM_GET_LAPIC, &lapic)) return -1; =20 - lapic->lvt_lint0.delivery_mode =3D APIC_MODE_EXTINT; - lapic->lvt_lint1.delivery_mode =3D APIC_MODE_NMI; + lapic.lvt_lint0.delivery_mode =3D APIC_MODE_EXTINT; + lapic.lvt_lint1.delivery_mode =3D APIC_MODE_NMI; =20 - return ioctl(vcpu->vcpu_fd, KVM_SET_LAPIC, &klapic); + return ioctl(vcpu->vcpu_fd, KVM_SET_LAPIC, &lapic); } =20 struct kvm_cpu *kvm_cpu__init(struct kvm *kvm, unsigned long cpu_id)