From: Alex Williamson <alex.williamson@redhat.com>
To: Alexey Kardashevskiy <aik@ozlabs.ru>
Cc: kvm@vger.kernel.org, gleb@redhat.com, benh@kernel.crashing.org,
bsd@redhat.com, linux-kernel@vger.kernel.org, mst@redhat.com
Subject: Re: [RFC PATCH 3/3] kvm: Add VFIO device for handling IOMMU cache coherency
Date: Fri, 13 Sep 2013 10:25:44 -0600 [thread overview]
Message-ID: <1379089544.19727.46.camel@ul30vt.home> (raw)
In-Reply-To: <5232D186.6090701@ozlabs.ru>
On Fri, 2013-09-13 at 18:49 +1000, Alexey Kardashevskiy wrote:
> On 09/13/2013 07:23 AM, Alex Williamson wrote:
> > So far we've succeeded at making KVM and VFIO mostly unaware of each
> > other, but there's any important point where that breaks down. Intel
> > VT-d hardware may or may not support snoop control. When snoop
> > control is available, intel-iommu promotes No-Snoop transactions on
> > PCIe to be cache coherent. That allows KVM to handle things like the
> > x86 WBINVD opcode as a nop. When the hardware does not support this,
> > KVM must implement a hardware visible WBINVD for the guest.
> >
> > We could simply let userspace tell KVM how to handle WBINVD, but it's
> > privileged for a reason. Allowing an arbitrary user to enable
> > physical WBINVD gives them a more access to the hardware. Previously,
> > this has only been enabled for guests supporting legacy PCI device
> > assignment. In such cases it's necessary for proper guest execution.
> > We therefore create a new KVM-VFIO virtual device. The user can add
> > and remove VFIO groups to this device via file descriptors. KVM
> > makes use of the VFIO external user interface to validate that the
> > user has access to physical hardware and gets the coherency state of
> > the IOMMU from VFIO. This provides equivalent functionality to
> > legacy KVM assignment, while keeping (nearly) all the bits isolated.
> >
> > The one intrusion is the resulting flag indicating the coherency
> > state. For this RFC it's placed on the x86 kvm_arch struct, however
> > I know POWER has interest in using the VFIO external user interface,
> > and I'm hoping we can share a common KVM-VFIO device. Perhaps they
> > care about No-Snoop handling as well or the code can be #ifdef'd.
>
>
> POWER does not support (at least boos3s - "server", not sure about others)
> this cache-non-coherent stuff at all.
Then it's easy for your IOMMU API interface to return always cache
coherent or never cache coherent or whatever ;)
> Regarding reusing this device with external API for POWER - I posted a
> patch which introduces KVM device to link KVM with IOMMU but besides the
> list of groups registered in KVM, it also provides the way to find a group
> by LIOBN (logical bus number) which is used in DMA map/unmap hypercalls. So
> in my case kvm_vfio_group struct needs LIOBN and it would be nice to have
> there window_size too (for a quick boundary check). I am not sure we want
> to mix everything here.
>
> It is in "[PATCH v10 12/13] KVM: PPC: Add support for IOMMU in-kernel
> handling" if you are interested (kvmppc_spapr_tce_iommu_device).
Yes, I stole the code to get the vfio symbols from your code. The
convergence I was hoping to achieve is that KVM doesn't really want to
know about VFIO and vica versa. We can therefore at least limit the
intrusion by sharing a common device. Obviously for you it will need
some extra interfaces to associate an LIOBN to a group, but we keep both
the kernel an userspace cleaner by avoiding duplication where we can.
Is this really not extensible to your usage? Thanks,
Alex
next prev parent reply other threads:[~2013-09-13 16:25 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-09-12 21:22 [RFC PATCH 0/3] kvm/vfio: Manage KVM IOMMU coherency with virtual VFIO device Alex Williamson
2013-09-12 21:23 ` [RFC PATCH 1/3] kvm: Destroy & free KVM devices on release Alex Williamson
2013-09-12 21:23 ` [RFC PATCH 2/3] vfio: Add check extension interface to external user support Alex Williamson
2013-09-12 21:23 ` [RFC PATCH 3/3] kvm: Add VFIO device for handling IOMMU cache coherency Alex Williamson
2013-09-13 8:49 ` Alexey Kardashevskiy
2013-09-13 16:25 ` Alex Williamson [this message]
2013-09-15 12:40 ` Alexey Kardashevskiy
2013-09-25 20:19 ` Alex Williamson
2013-09-26 4:31 ` Alexey Kardashevskiy
2013-09-13 12:39 ` Michael S. Tsirkin
2013-09-13 14:13 ` Alex Williamson
2013-09-13 14:52 ` Michael S. Tsirkin
2013-09-13 15:29 ` Alex Williamson
2013-09-29 13:16 ` Gleb Natapov
2013-09-29 13:52 ` Alex Williamson
2013-09-29 14:44 ` Gleb Natapov
2013-09-29 15:55 ` Alex Williamson
2013-09-30 13:23 ` Gleb Natapov
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=1379089544.19727.46.camel@ul30vt.home \
--to=alex.williamson@redhat.com \
--cc=aik@ozlabs.ru \
--cc=benh@kernel.crashing.org \
--cc=bsd@redhat.com \
--cc=gleb@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mst@redhat.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).