qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Thanos Makatos <thanos.makatos@nutanix.com>
To: Alex Williamson <alex.williamson@redhat.com>
Cc: "qemu-devel@nongnu.org" <qemu-devel@nongnu.org>,
	Felipe Franciosi <felipe@nutanix.com>
Subject: RE: question about handling MSI-X by VFIO
Date: Thu, 23 Jan 2020 15:01:28 +0000	[thread overview]
Message-ID: <MN2PR02MB62056D2CC033EA7E9F37AC448B0F0@MN2PR02MB6205.namprd02.prod.outlook.com> (raw)
In-Reply-To: <20200121101911.64701afd@w520.home>

> > I'm passing through a virtual PCI device to a QEMU guest via VFIO/mdev
> and I
> > notice that MSI-X interrupts are disabled in the device (MSIXCAP.MXC.MXE
> is
> > zero) and the BARs containing the table and PBA (4 and 5 in my case) are
> never
> > accessed.  However, whenever I fire an MSI-X interrupt from the virtual
> device
> > (although I'm not supposed to do so as they're disabled), the guest seems
> to
> > correctly receive it. I've started looking at hw/vfio/pci.c and it seems that
> > VFIO handles MSI-X interrupts there, including masking etc?
> 
> Yes, the vector table and PBA are emulated in QEMU, the latter lazily
> only when vectors are masked, iirc.  The backing device vector table
> should never be directly accessed by the user (it can be, but you can
> just discard those accesses), MSI-X is configured via the
> VFIO_DEVICE_SET_IRQS ioctl, which configures the eventfd through which
> an mdev driver would trigger an MSI.  When you say that you "fire and
> MSI-X interrupt from the virtual device" does this mean that you're
> signaling via one of these eventfds?  It looks to me like emulating the
> MSI-X enable bit in the MSI-X capability is probably the responsibility
> of the mdev vendor driver.  With vfio-pci the VFIO_DEVICE_SET_IRQS ioctl
> would enable MSI-X on the physical device and the MSI-X capability seen
> by the user would reflect that.  Are you missing a bit of code that
> updates the mdev config space as part of the SET_IRQS ioctl?  Thanks,

Indeed I fire interrupts via the eventfd and it works correctly. I just
couldn't understand how it could possibly work since the table and PBA BARs 
were never accessed and the MSI-X enable bit was not set.  It makes perfect
sense now why it works since QEMU does it all.


      reply	other threads:[~2020-01-23 16:43 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-01-21 13:36 question about handling MSI-X by VFIO Thanos Makatos
2020-01-21 17:19 ` Alex Williamson
2020-01-23 15:01   ` Thanos Makatos [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=MN2PR02MB62056D2CC033EA7E9F37AC448B0F0@MN2PR02MB6205.namprd02.prod.outlook.com \
    --to=thanos.makatos@nutanix.com \
    --cc=alex.williamson@redhat.com \
    --cc=felipe@nutanix.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).