qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Anthony Liguori <anthony@codemonkey.ws>
To: Avi Kivity <avi@redhat.com>
Cc: Glauber Costa <glommer@redhat.com>, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [RFC] in-kernel irqchip : split devices
Date: Mon, 26 Oct 2009 11:28:10 -0500	[thread overview]
Message-ID: <4AE5CE1A.4040007@codemonkey.ws> (raw)
In-Reply-To: <4AE427EB.7080602@redhat.com>

Avi Kivity wrote:
> On 10/14/2009 04:30 PM, Glauber Costa wrote:
>> Hello people,
>>
>> As I promised, I am sending a very brief PoC wrt split devices and 
>> in-kernel irqchip.
>> In this mail, I am including only the ioapic version for apreciation. 
>> I also have i8259,
>> and apic will take me a little bit more. This is just to try to bind 
>> the discussion to real
>> code.
>>
>>    
>
> I still can't say I like it.  The reset function is duplicated, the 
> state representation (which is an ABI) is gratuitously forked.
>
> You can't save/restore in-kernel irqchip and userspace irqchip, even 
> though where the code is located is an implementation detail.  While 
> we may not care much for the ioapic, it sets a bad precedent for 
> vhost-net, where we'd like to migrate from non-vhost-net hosts to 
> vhost-net hosts without the user noticing anything.
>
>> Note that we end up with a very slim representation of the device, 
>> and the code is much less
>> confusing, IMHO.
>>    
>
> You can always remove if statements by duplicating the code and 
> pushing the if one level upwards.  In total, there is more code, and 
> it is more confusing (since you need to deal with implementation 
> details at a higher level).

I'm surprised you feel this way.  Maybe this is an issue of having the 
model in your head vs. not having it because the current in-kernel code 
is extremely confusing IMHO.

When you look at ioapic.c in qemu-kvm, the first question I ask is, 
"what parts of this code is used when using in-kernel apic?".  The 
answer is not at all obvious.

To understand it, you have to first search for kvm_enabled() and you'll 
see that during save/restore the state is synced with the in-kernel 
state.  However, it's not clear whether pio/mmio operations still get 
processed and certainly not clear whether ioapic_set_irq() is not called 
anymore.

In fact, I think you to start with the assumption that it is which leads 
you to wonder why it doesn't do kvm_set_irq().

The answers are all subtle and have to do with weird things about how 
the isa irqs are allocated.  It's extremely confusing to someone who 
doesn't know exactly what's going on.

OTOH, the split model makes this all very obvious.  Sure there's some 
duplication but at the end of the day, you don't have to understand very 
much to see what's going on.  We just use userspace for device 
save/restore and reset support.  Code readability wins in my mind over 
reducing a couple dozen lines of code.

Regards,

Anthony Liguori

      parent reply	other threads:[~2009-10-26 16:28 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-10-14 14:30 [Qemu-devel] [RFC] in-kernel irqchip : split devices Glauber Costa
2009-10-20 13:08 ` Glauber Costa
2009-10-22 17:07 ` Marcelo Tosatti
2009-10-25 10:26 ` Avi Kivity
2009-10-26 16:27   ` Glauber Costa
2009-10-26 16:28   ` Anthony Liguori [this message]

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=4AE5CE1A.4040007@codemonkey.ws \
    --to=anthony@codemonkey.ws \
    --cc=avi@redhat.com \
    --cc=glommer@redhat.com \
    --cc=qemu-devel@nongnu.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;
as well as URLs for NNTP newsgroup(s).