From: "Michael S. Tsirkin" <mst@redhat.com>
To: Stefan Fritsch <sf@sfritsch.de>
Cc: kvm@vger.kernel.org, will.deacon@arm.com,
virtualization@lists.linux-foundation.org,
sasha.levin@oracle.com, penberg@iki.fi
Subject: Re: [PATCH RFC] virtio-pci: share config interrupt between virtio devices
Date: Sun, 21 Sep 2014 11:09:14 +0300 [thread overview]
Message-ID: <20140921080914.GA2489@redhat.com> (raw)
In-Reply-To: <11860049.kd4R4PIiz4@k>
On Thu, Sep 18, 2014 at 09:18:37PM +0200, Stefan Fritsch wrote:
> On Monday 01 September 2014 09:37:30, Michael S. Tsirkin wrote:
> > Why do we need INT#x?
> > How about setting IRQF_SHARED for the config interrupt
> > while using MSI-X? You'd have to read ISR to check that the
> > interrupt was intended for your device.
>
> The virtio 0.9.5 spec says that ISR is "unused" when in MSI-X mode. I
> don't think that you can depend on the device to set the configuration
> changed bit.
> The virtio 1.0 spec seems to have fixed that.
Yes, virtio 0.9.5 has this bug. But in practice qemu always set this
bit, so for qemu we could do that unconditionally. Pekka's lkvm tool
doesn't unfortunately. It's easy to fix that, but it would be nicer to
additionally probe for old versions of the tool, and disable IRQF_SHARED
in that case.
To complicate things, lkvm does not use a distinct subsystem vendor ID,
in spite of the fact the virtio spec always required this explicitly.
After poking at things, we could probably try and distinguish old lkmv
based on bar sizes. I think lkvm has:
#define IOPORT_SIZE 0x400
this is the size of the IO bar (bar0) correct?
Qemu's BAR is smaller.
So if
1. new versions of lkvm are fixed to always set ISR on config change
even when msi is enabled
2 lkvm folks can promise not to make bar0 size smaller *before*
fixing (1)
then we could use the heuristic:
bar size == 0x400
to clear IRQF_SHARED.
Cc some lkvm folks for all of the above: would you guys be
happier with some other heuristic?
I'd like to note that lkvm really should get some vendor to request and
then donate a subsystem vendor id (registered with pci sig) for their
use, instead of pretending they are qemu.
AFAIK a subsystem vendor id does not cost money to register, but
only pci sig members can do this, and membership costs $3000.
Maybe we should combine all this with checking subsystem vendor id,
and only implement the optimization if it matches qemu, for now.
This needs some thought.
--
MST
next prev parent reply other threads:[~2014-09-21 8:09 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-09-01 5:41 [PATCH RFC] virtio-pci: share config interrupt between virtio devices Amos Kong
2014-09-01 6:37 ` Michael S. Tsirkin
2014-09-01 7:58 ` Amos Kong
2014-09-01 8:12 ` Michael S. Tsirkin
2014-09-18 19:18 ` Stefan Fritsch
[not found] ` <11860049.kd4R4PIiz4@k>
2014-09-21 8:09 ` Michael S. Tsirkin [this message]
2014-09-21 9:36 ` Stefan Fritsch
2014-09-21 10:21 ` Michael S. Tsirkin
2014-09-23 20:47 ` Stefan Fritsch
2014-09-21 13:47 ` Sasha Levin
2014-09-21 15:02 ` Michael S. Tsirkin
2014-09-21 15:19 ` Sasha Levin
2014-09-21 17:53 ` Michael S. Tsirkin
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=20140921080914.GA2489@redhat.com \
--to=mst@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=penberg@iki.fi \
--cc=sasha.levin@oracle.com \
--cc=sf@sfritsch.de \
--cc=virtualization@lists.linux-foundation.org \
--cc=will.deacon@arm.com \
/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).