All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Michael S. Tsirkin" <mst-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
To: Alex Williamson
	<alex.williamson-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
Cc: avi-VrcmuVmyx1hWk0Htik3J/w@public.gmane.org,
	avi-RmZWMc9puTNJc61us3aD9laTQe2KTcn/@public.gmane.org,
	gleb-VrcmuVmyx1hWk0Htik3J/w@public.gmane.org,
	corbet-T1hC0tSOHrs@public.gmane.org,
	bruce.richardson-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	alexander.duyck-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org,
	gleb-RmZWMc9puTNJc61us3aD9laTQe2KTcn/@public.gmane.org,
	stephen-OTpzqLSitTUnbdJkjeBofR2eb7JE58TQ@public.gmane.org,
	vladz-RmZWMc9puTNJc61us3aD9laTQe2KTcn/@public.gmane.org,
	iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org,
	hjk-vqZO0P4V72/QD6PfKP4TzA@public.gmane.org,
	gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org
Subject: Re: [RFC PATCH 0/2] VFIO no-iommu
Date: Sun, 11 Oct 2015 21:28:09 +0300	[thread overview]
Message-ID: <20151011182809.GA8154@redhat.com> (raw)
In-Reply-To: <20151009182228.14752.99700.stgit-GCcqpEzw8uZBDLzU/O5InQ@public.gmane.org>

On Fri, Oct 09, 2015 at 12:40:56PM -0600, Alex Williamson wrote:
> Recent patches for UIO have been attempting to add MSI/X support,
> which unfortunately implies DMA support, which users have been
> enabling anyway, but was never intended for UIO.  VFIO on the other
> hand expects an IOMMU to provide isolation of devices, but provides
> a much more complete device interface, which already supports full
> MSI/X support.  There's really no way to support userspace drivers
> with DMA capable devices without an IOMMU to protect the host, but
> we can at least think about doing it in a way that properly taints
> the kernel and avoids creating new code duplicating existing code,
> that does have a supportable use case.
> 
> The diffstat is only so large because I moved vfio.c to vfio_core.c
> so I could more easily keep the module named vfio.ko while keeping
> the bulk of the no-iommu support in a separate file that can be
> optionally compiled.  We're really looking at a couple hundred lines
> of mostly stub code.  The VFIO_NOIOMMU_IOMMU could certainly be
> expanded to do page pinning and virt_to_bus() translation, but I
> didn't want to complicate anything yet.

I think it's already useful like this, since all current users
seem happy enough to just use hugetlbfs to do pinning, and
ignore translation.

> I've only compiled this and tested loading the module with the new
> no-iommu mode enabled, I haven't actually tried to port a DPDK
> driver to it, though it ought to be a pretty obvious mix of the
> existing UIO and VFIO versions (set the IOMMU, but avoid using it
> for mapping, use however bus translations are done w/ UIO).  The core
> vfio device file is still /dev/vfio/vfio, but all the groups become
> /dev/vfio-noiommu/$GROUP.
> 
> It should be obvious, but I always feel obligated to state that this
> does not and will not ever enable device assignment to virtual
> machines on non-IOMMU capable platforms.

In theory, it's kind of possible using paravirtualization.

Within guest, you'd make map_page retrieve the io address from the host
and return that as dma_addr_t.  The only question would be APIs that
require more than one contigious page in IO space (e.g. I think alloc
coherent is like this?).
Not a problem if host is using hugetlbfs, but if not, I guess we could
add a hypercall and some Linux API on the host to trigger compaction
on the host aggressively. MADV_CONTIGIOUS?


> I'm curious what IOMMU folks think of this.  This hack is really
> only possible because we don't use iommu_ops for regular DMA, so we
> can hijack it fairly safely.  I believe that's intended to change
> though, so this may not be practical long term.  Thanks,
> 
> Alex
> 
> ---
> 
> Alex Williamson (2):
>       vfio: Move vfio.c vfio_core.c
>       vfio: Include no-iommu mode
> 
> 
>  drivers/vfio/Kconfig        |   15 
>  drivers/vfio/Makefile       |    4 
>  drivers/vfio/vfio.c         | 1640 ------------------------------------------
>  drivers/vfio/vfio_core.c    | 1680 +++++++++++++++++++++++++++++++++++++++++++
>  drivers/vfio/vfio_noiommu.c |  185 +++++
>  drivers/vfio/vfio_private.h |   31 +
>  include/uapi/linux/vfio.h   |    2 
>  7 files changed, 1917 insertions(+), 1640 deletions(-)
>  delete mode 100644 drivers/vfio/vfio.c
>  create mode 100644 drivers/vfio/vfio_core.c
>  create mode 100644 drivers/vfio/vfio_noiommu.c
>  create mode 100644 drivers/vfio/vfio_private.h

WARNING: multiple messages have this Message-ID (diff)
From: "Michael S. Tsirkin" <mst@redhat.com>
To: Alex Williamson <alex.williamson@redhat.com>
Cc: avi@scylladb.com, avi@cloudius-systems.com, gleb@scylladb.com,
	corbet@lwn.net, bruce.richardson@intel.com,
	linux-kernel@vger.kernel.org, alexander.duyck@gmail.com,
	gleb@cloudius-systems.com, stephen@networkplumber.org,
	vladz@cloudius-systems.com, iommu@lists.linux-foundation.org,
	hjk@hansjkoch.de, gregkh@linuxfoundation.org
Subject: Re: [RFC PATCH 0/2] VFIO no-iommu
Date: Sun, 11 Oct 2015 21:28:09 +0300	[thread overview]
Message-ID: <20151011182809.GA8154@redhat.com> (raw)
In-Reply-To: <20151009182228.14752.99700.stgit@gimli.home>

On Fri, Oct 09, 2015 at 12:40:56PM -0600, Alex Williamson wrote:
> Recent patches for UIO have been attempting to add MSI/X support,
> which unfortunately implies DMA support, which users have been
> enabling anyway, but was never intended for UIO.  VFIO on the other
> hand expects an IOMMU to provide isolation of devices, but provides
> a much more complete device interface, which already supports full
> MSI/X support.  There's really no way to support userspace drivers
> with DMA capable devices without an IOMMU to protect the host, but
> we can at least think about doing it in a way that properly taints
> the kernel and avoids creating new code duplicating existing code,
> that does have a supportable use case.
> 
> The diffstat is only so large because I moved vfio.c to vfio_core.c
> so I could more easily keep the module named vfio.ko while keeping
> the bulk of the no-iommu support in a separate file that can be
> optionally compiled.  We're really looking at a couple hundred lines
> of mostly stub code.  The VFIO_NOIOMMU_IOMMU could certainly be
> expanded to do page pinning and virt_to_bus() translation, but I
> didn't want to complicate anything yet.

I think it's already useful like this, since all current users
seem happy enough to just use hugetlbfs to do pinning, and
ignore translation.

> I've only compiled this and tested loading the module with the new
> no-iommu mode enabled, I haven't actually tried to port a DPDK
> driver to it, though it ought to be a pretty obvious mix of the
> existing UIO and VFIO versions (set the IOMMU, but avoid using it
> for mapping, use however bus translations are done w/ UIO).  The core
> vfio device file is still /dev/vfio/vfio, but all the groups become
> /dev/vfio-noiommu/$GROUP.
> 
> It should be obvious, but I always feel obligated to state that this
> does not and will not ever enable device assignment to virtual
> machines on non-IOMMU capable platforms.

In theory, it's kind of possible using paravirtualization.

Within guest, you'd make map_page retrieve the io address from the host
and return that as dma_addr_t.  The only question would be APIs that
require more than one contigious page in IO space (e.g. I think alloc
coherent is like this?).
Not a problem if host is using hugetlbfs, but if not, I guess we could
add a hypercall and some Linux API on the host to trigger compaction
on the host aggressively. MADV_CONTIGIOUS?


> I'm curious what IOMMU folks think of this.  This hack is really
> only possible because we don't use iommu_ops for regular DMA, so we
> can hijack it fairly safely.  I believe that's intended to change
> though, so this may not be practical long term.  Thanks,
> 
> Alex
> 
> ---
> 
> Alex Williamson (2):
>       vfio: Move vfio.c vfio_core.c
>       vfio: Include no-iommu mode
> 
> 
>  drivers/vfio/Kconfig        |   15 
>  drivers/vfio/Makefile       |    4 
>  drivers/vfio/vfio.c         | 1640 ------------------------------------------
>  drivers/vfio/vfio_core.c    | 1680 +++++++++++++++++++++++++++++++++++++++++++
>  drivers/vfio/vfio_noiommu.c |  185 +++++
>  drivers/vfio/vfio_private.h |   31 +
>  include/uapi/linux/vfio.h   |    2 
>  7 files changed, 1917 insertions(+), 1640 deletions(-)
>  delete mode 100644 drivers/vfio/vfio.c
>  create mode 100644 drivers/vfio/vfio_core.c
>  create mode 100644 drivers/vfio/vfio_noiommu.c
>  create mode 100644 drivers/vfio/vfio_private.h

  parent reply	other threads:[~2015-10-11 18:28 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-10-09 18:40 [RFC PATCH 0/2] VFIO no-iommu Alex Williamson
2015-10-09 18:40 ` Alex Williamson
     [not found] ` <20151009182228.14752.99700.stgit-GCcqpEzw8uZBDLzU/O5InQ@public.gmane.org>
2015-10-09 18:41   ` [RFC PATCH 1/2] vfio: Move vfio.c vfio_core.c Alex Williamson
2015-10-09 18:41     ` Alex Williamson
     [not found]     ` <20151009184103.14752.5250.stgit-GCcqpEzw8uZBDLzU/O5InQ@public.gmane.org>
2015-10-09 19:21       ` Greg KH
2015-10-09 19:21         ` Greg KH
2015-10-09 18:41   ` [RFC PATCH 2/2] vfio: Include no-iommu mode Alex Williamson
2015-10-09 18:41     ` Alex Williamson
2015-10-11  8:12     ` Avi Kivity
     [not found]       ` <561A19DE.8040302-VrcmuVmyx1hWk0Htik3J/w@public.gmane.org>
2015-10-11  8:57         ` Michael S. Tsirkin
2015-10-11  8:57           ` Michael S. Tsirkin
2015-10-11  9:03           ` Avi Kivity
     [not found]             ` <561A25D5.6020906-VrcmuVmyx1hWk0Htik3J/w@public.gmane.org>
2015-10-11  9:19               ` Michael S. Tsirkin
2015-10-11  9:19                 ` Michael S. Tsirkin
2015-10-11  9:23                 ` Gleb Natapov
2015-10-11 21:16         ` Alex Williamson
2015-10-11 21:16           ` Alex Williamson
2015-10-12 15:56     ` Stephen Hemminger
2015-10-12 16:23       ` Alex Williamson
     [not found]         ` <1444666999.4059.362.camel-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2015-10-12 16:31           ` Avi Kivity
2015-10-12 16:31             ` Avi Kivity
2015-10-12 16:27       ` Michael S. Tsirkin
2015-10-12 16:27         ` Michael S. Tsirkin
     [not found]         ` <20151012191150-mutt-send-email-mst-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2015-10-12 17:46           ` Alex Williamson
2015-10-12 17:46             ` Alex Williamson
     [not found]             ` <1444672015.4059.380.camel-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2015-10-12 18:08               ` Alex Williamson
2015-10-12 18:08                 ` Alex Williamson
2015-10-11 17:29   ` [RFC PATCH 0/2] VFIO no-iommu Varun Sethi
2015-10-11 17:29     ` Varun Sethi
     [not found]     ` <BN1PR0301MB0627AEEF3B5B7E5FB87ECB29EA320-RQSpjbwlmjSD1ymB6+i1+JwN6zqB+hSMnBOFsp37pqbUKgpGm//BTAC/G2K4zDHf@public.gmane.org>
2015-10-11 18:23       ` Alex Williamson
2015-10-11 18:23         ` Alex Williamson
2015-10-11 18:28   ` Michael S. Tsirkin [this message]
2015-10-11 18:28     ` Michael S. Tsirkin
     [not found]     ` <20151011182809.GA8154-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2015-10-11 18:29       ` Michael S. Tsirkin
2015-10-11 18:29         ` Michael S. Tsirkin
     [not found]         ` <20151011212852-mutt-send-email-mst-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2015-10-11 19:25           ` Alex Williamson
2015-10-11 19:25             ` Alex Williamson

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=20151011182809.GA8154@redhat.com \
    --to=mst-h+wxahxf7alqt0dzr+alfa@public.gmane.org \
    --cc=alex.williamson-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
    --cc=alexander.duyck-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
    --cc=avi-RmZWMc9puTNJc61us3aD9laTQe2KTcn/@public.gmane.org \
    --cc=avi-VrcmuVmyx1hWk0Htik3J/w@public.gmane.org \
    --cc=bruce.richardson-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
    --cc=corbet-T1hC0tSOHrs@public.gmane.org \
    --cc=gleb-RmZWMc9puTNJc61us3aD9laTQe2KTcn/@public.gmane.org \
    --cc=gleb-VrcmuVmyx1hWk0Htik3J/w@public.gmane.org \
    --cc=gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org \
    --cc=hjk-vqZO0P4V72/QD6PfKP4TzA@public.gmane.org \
    --cc=iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org \
    --cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=stephen-OTpzqLSitTUnbdJkjeBofR2eb7JE58TQ@public.gmane.org \
    --cc=vladz-RmZWMc9puTNJc61us3aD9laTQe2KTcn/@public.gmane.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.