public inbox for kvm@vger.kernel.org
 help / color / mirror / Atom feed
From: Sasha Levin <levinsasha928@gmail.com>
To: Matt Evans <matt@ozlabs.org>
Cc: penberg@kernel.org, mingo@elte.hu, gorcunov@gmail.com,
	asias.hejun@gmail.com, kvm@vger.kernel.org
Subject: Re: [PATCH] kvm tools: Clean up LINT assignment code
Date: Wed, 14 Dec 2011 08:13:07 +0200	[thread overview]
Message-ID: <1323843187.3992.11.camel@lappy> (raw)
In-Reply-To: <4EE804B4.5020904@ozlabs.org>

On Wed, 2011-12-14 at 13:06 +1100, Matt Evans wrote:
> Hi Sasha,
> 
> On 12/12/11 06:50, Sasha Levin wrote:
> > Just set delivery mode directly without going through ugly casting.
> > 
> > This cleans up and simplifies the code.
> > 
> > Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
> > ---
> >  tools/kvm/x86/kvm-cpu.c |   10 ++--------
> >  1 files changed, 2 insertions(+), 8 deletions(-)
> > 
> > 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 = (void *)&klapic;
> > -	u32 lvt;
> >  
> >  	if (ioctl(vcpu->vcpu_fd, KVM_GET_LAPIC, &klapic))
> >  		return -1;
> >  
> > -	lvt = *(u32 *)&lapic->lvt_lint0;
> > -	lvt = SET_APIC_DELIVERY_MODE(lvt, APIC_MODE_EXTINT);
> > -	*(u32 *)&lapic->lvt_lint0 = lvt;
> > -
> > -	lvt = *(u32 *)&lapic->lvt_lint1;
> > -	lvt = SET_APIC_DELIVERY_MODE(lvt, APIC_MODE_NMI);
> > -	*(u32 *)&lapic->lvt_lint1 = lvt;
> > +	lapic->lvt_lint0.delivery_mode = APIC_MODE_EXTINT;
> > +	lapic->lvt_lint1.delivery_mode = APIC_MODE_NMI;
> >  
> >  	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 ‘kvm_cpu__set_lint’:
> x86/kvm-cpu.c:89: error: dereferencing pointer ‘lapic’ does break strict-aliasing rules
> x86/kvm-cpu.c:88: error: dereferencing pointer ‘lapic’ does break strict-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)
>  
>  static int kvm_cpu__set_lint(struct kvm_cpu *vcpu)
>  {
> -	struct kvm_lapic_state klapic;
> -	struct local_apic *lapic = (void *)&klapic;
> +	struct local_apic lapic;
>  
> -	if (ioctl(vcpu->vcpu_fd, KVM_GET_LAPIC, &klapic))
> +	if (ioctl(vcpu->vcpu_fd, KVM_GET_LAPIC, &lapic))
>  		return -1;

It felt a bit wrong to me getting the ioctl to assign it directly to
local_apic since api.txt says it should be returning a kvm_lapic_state.
But on the other hand, api.txt also says "The data format and layout are
the same as documented in the architecture manual." so I guess we can go
with that.

	Acked-by: Sasha Levin <levinsasha928@gmail.com>

-- 

Sasha.


  reply	other threads:[~2011-12-14  6:13 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-12-11 19:50 [PATCH] kvm tools: Clean up LINT assignment code Sasha Levin
2011-12-14  2:06 ` Matt Evans
2011-12-14  6:13   ` Sasha Levin [this message]
2011-12-14 23:25     ` Matt Evans

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1323843187.3992.11.camel@lappy \
    --to=levinsasha928@gmail.com \
    --cc=asias.hejun@gmail.com \
    --cc=gorcunov@gmail.com \
    --cc=kvm@vger.kernel.org \
    --cc=matt@ozlabs.org \
    --cc=mingo@elte.hu \
    --cc=penberg@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox