qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Alex Williamson <alex.williamson@redhat.com>
To: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Anthony Liguori <aliguori@us.ibm.com>,
	Alexey Kardashevskiy <aik@ozlabs.ru>,
	Alexander Graf <agraf@suse.de>,
	qemu-devel@nongnu.org, qemu-ppc@nongnu.org,
	David Gibson <david@gibson.dropbear.id.au>
Subject: Re: [Qemu-devel] [PATCH 2/3] KVM: add kvm_arch_irqchip_add_msi_route
Date: Fri, 21 Jun 2013 17:10:34 -0600	[thread overview]
Message-ID: <1371856234.30572.140.camel@ul30vt.home> (raw)
In-Reply-To: <1371853305.3944.83.camel@pasglop>

On Sat, 2013-06-22 at 08:21 +1000, Benjamin Herrenschmidt wrote:
> On Sat, 2013-06-22 at 00:12 +0200, Alexander Graf wrote:
> > On 21.06.2013, at 23:54, Benjamin Herrenschmidt wrote:
> > 
> > > On Fri, 2013-06-21 at 15:46 +0200, Alexander Graf wrote:
> > >> Not sure. We could just declare a "direct virq==irq" mode in which
> > >> msi.data == virq == irq. No need for any translation then.
> > > 
> > > Maybe. Beware that MSI data is only 16-bit on the wire but we may
> > not
> > > care here.
> > > 
> > > One thing I'm not 100% certain of is how Alexey makes all that work
> > with
> > > VFIO since the MSI address/data in the device shall not be the qemu
> > > "cooked up" ones, but the real HW ones (corresponding to a different
> > > host interrupt).
> > > 
> > > How do that work ?
> > 
> > The real device address/data go to a normal host interrupt vector.
> 
> Right, I know that :-)
> 
> >  Once we hit such a vector, we need to find out that it's destined for
> > the guest in real mode - no idea how you planned to do that - and then
> > reinject it back into the guest with the virtual irq vector that you
> > can find out by asking the irqfd hopefully.
> > 
> > It might make sense to implement it the easy way without real mode
> > first, and then take it from there ;).
> 
> We have that already. That isn't my question.
> 
> How is the "configuration" done ?
> 
> On x86, I assume, the guest kernel directly whacks the MSI config space
> and MSI-X BAR space using some address/data it cooks up which are *not*
> the real ones needed in the HW right ?
> 
> So qemu seems to play tricks to intercept the MSI-X BAR, I swa that, but
> how does it know what real value to put in the HW instead ?
> 
> In our case, the guest calls RTAS, which needs to configure "something"
> in the device. What does it do ?
> 
> Does it call into VFIO which then does a pci_enable_msi[x] ? In that
> case how do you deal with a guest for example prodding a single MSI-X
> in the middle of the array ? This is not an interface supported by
> pci_enable_msix ....

MSI-X is rather ugly.  As you suggest, we trap accesses to the MSI-X
table.  We don't know how many vectors the guest is going to use, so we
incrementally add them by disabling and re-enabling with a new vector
count.  The host decides what to put in the table, we don't care.  All
interrupts bounce through the host and get to the guest via eventfd,
either through qemu or directly through KVM irqfd.

If an in-use vector is modified, we write the new "MSI route" to KVM,
the host doesn't need to care.  If a vector is masked, we free the host
irq handler w/o modifying the vector configuration.  There's a comment
in hw/misc/vfio.c that we could also just bounce masked vectors through
qemu and let it drop it if we wanted to completely avoid toggling the
host.  Linux currently does not have a usable interface for masking
vectors at the device.  Thanks,

Alex

  reply	other threads:[~2013-06-21 23:10 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-06-21  9:22 [Qemu-devel] [PATCH 0/3] RFCv2 kvm irqfd: add directly mapped MSI IRQ support Alexey Kardashevskiy
2013-06-21  9:22 ` [Qemu-devel] [PATCH 1/3] spapr pci msi: rework Alexey Kardashevskiy
2013-06-21 10:31   ` Alexander Graf
2013-06-21 10:52     ` Alexey Kardashevskiy
2013-06-21 11:58       ` Anthony Liguori
2013-06-21 11:59         ` Alexander Graf
2013-06-21 12:09         ` Benjamin Herrenschmidt
2013-06-21 12:02     ` Benjamin Herrenschmidt
2013-06-21  9:22 ` [Qemu-devel] [PATCH 2/3] KVM: add kvm_arch_irqchip_add_msi_route Alexey Kardashevskiy
2013-06-21 10:33   ` Alexander Graf
2013-06-21 12:03     ` Benjamin Herrenschmidt
2013-06-21 12:05       ` Alexander Graf
2013-06-21 12:10         ` Benjamin Herrenschmidt
2013-06-21 13:46           ` Alexander Graf
2013-06-21 21:54             ` Benjamin Herrenschmidt
2013-06-21 22:12               ` Alexander Graf
2013-06-21 22:21                 ` Benjamin Herrenschmidt
2013-06-21 23:10                   ` Alex Williamson [this message]
2013-06-21 23:19                     ` Benjamin Herrenschmidt
2013-06-21  9:22 ` [Qemu-devel] [PATCH 3/3] KVM: PPC: enable irqfd Alexey Kardashevskiy
2013-06-21 17:52   ` Scott Wood
2013-06-22  1:12     ` Alexey Kardashevskiy

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=1371856234.30572.140.camel@ul30vt.home \
    --to=alex.williamson@redhat.com \
    --cc=agraf@suse.de \
    --cc=aik@ozlabs.ru \
    --cc=aliguori@us.ibm.com \
    --cc=benh@kernel.crashing.org \
    --cc=david@gibson.dropbear.id.au \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-ppc@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).