From: Alex Williamson <alex.williamson@redhat.com>
To: Jason Gunthorpe <jgg@nvidia.com>
Cc: kvm@vger.kernel.org, Kevin Tian <kevin.tian@intel.com>,
dri-devel@lists.freedesktop.org,
Vineeth Vijayan <vneethv@linux.ibm.com>,
Diana Craciun <diana.craciun@oss.nxp.com>,
Alexander Gordeev <agordeev@linux.ibm.com>,
Longfang Liu <liulongfang@huawei.com>,
linux-s390@vger.kernel.org, Yi Liu <yi.l.liu@intel.com>,
Matthew Rosato <mjrosato@linux.ibm.com>,
Will Deacon <will@kernel.org>, Joerg Roedel <joro@8bytes.org>,
Halil Pasic <pasic@linux.ibm.com>,
iommu@lists.linux.dev, Nicolin Chen <nicolinc@nvidia.com>,
Christian Borntraeger <borntraeger@linux.ibm.com>,
intel-gfx@lists.freedesktop.org, Zhi Wang <zhi.a.wang@intel.com>,
Jason Herne <jjherne@linux.ibm.com>,
Eric Farman <farman@linux.ibm.com>,
Vasily Gorbik <gor@linux.ibm.com>,
Heiko Carstens <hca@linux.ibm.com>,
Eric Auger <eric.auger@redhat.com>,
Harald Freudenberger <freude@linux.ibm.com>,
Rodrigo Vivi <rodrigo.vivi@intel.com>,
intel-gvt-dev@lists.freedesktop.org,
Tony Krowiak <akrowiak@linux.ibm.com>,
Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>,
Yishai Hadas <yishaih@nvidia.com>,
Cornelia Huck <cohuck@redhat.com>,
Peter Oberparleiter <oberpar@linux.ibm.com>,
Shameer Kolothum <shameerali.kolothum.thodi@huawei.com>,
Sven Schnelle <svens@linux.ibm.com>,
Robin Murphy <robin.murphy@arm.com>,
Lu Baolu <baolu.lu@linux.intel.com>
Subject: Re: [PATCH 10/10] iommufd: Allow iommufd to supply /dev/vfio/vfio
Date: Wed, 26 Oct 2022 15:31:33 -0600 [thread overview]
Message-ID: <20221026153133.44dc05c8.alex.williamson@redhat.com> (raw)
In-Reply-To: <10-v1-4991695894d8+211-vfio_iommufd_jgg@nvidia.com>
On Tue, 25 Oct 2022 15:50:45 -0300
Jason Gunthorpe <jgg@nvidia.com> wrote:
> If the VFIO container is compiled out, give a kconfig option for iommufd
> to provide the miscdev node with the same name and permissions as vfio
> uses.
>
> The compatibility node supports the same ioctls as VFIO and automatically
> enables the VFIO compatible pinned page accounting mode.
I think I'd like to see some sort of breadcrumb when /dev/vfio/vfio is
provided by something other than the vfio container code. If we intend
to include this before P2P is resolved, that breadcrumb (dmesg I'm
guessing) might also list any known limitations of the compatibility to
save time with debugging. Thanks,
Alex
> Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
> ---
> drivers/iommu/iommufd/Kconfig | 12 ++++++++++++
> drivers/iommu/iommufd/main.c | 35 ++++++++++++++++++++++++++++++++---
> 2 files changed, 44 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/iommu/iommufd/Kconfig b/drivers/iommu/iommufd/Kconfig
> index f0a2012234fa09..afc83b7575cce6 100644
> --- a/drivers/iommu/iommufd/Kconfig
> +++ b/drivers/iommu/iommufd/Kconfig
> @@ -14,6 +14,18 @@ config IOMMUFD
> If you don't know what to do here, say N.
>
> if IOMMUFD
> +config IOMMUFD_VFIO_CONTAINER
> + bool "IOMMUFD provides the VFIO container /dev/vfio/vfio"
> + depends on VFIO && !VFIO_CONTAINER
> + default VFIO && !VFIO_CONTAINER
> + help
> + IOMMUFD will provide /dev/vfio/vfio instead of VFIO. This relies on
> + IOMMUFD providing compatibility emulation to give the same ioctls.
> + It provides an option to build a kernel with legacy VFIO components
> + removed.
> +
> + Unless testing IOMMUFD say N here.
> +
> config IOMMUFD_TEST
> bool "IOMMU Userspace API Test support"
> depends on RUNTIME_TESTING_MENU
> diff --git a/drivers/iommu/iommufd/main.c b/drivers/iommu/iommufd/main.c
> index 8a31c1a14cdd53..19db81fbf7f08f 100644
> --- a/drivers/iommu/iommufd/main.c
> +++ b/drivers/iommu/iommufd/main.c
> @@ -24,6 +24,7 @@
> #include <uapi/linux/iommufd.h>
> #include <linux/iommufd.h>
>
> +#include "io_pagetable.h"
> #include "iommufd_private.h"
> #include "iommufd_test.h"
>
> @@ -31,6 +32,7 @@ struct iommufd_object_ops {
> void (*destroy)(struct iommufd_object *obj);
> };
> static struct iommufd_object_ops iommufd_object_ops[];
> +static struct miscdevice vfio_misc_dev;
>
> struct iommufd_object *_iommufd_object_alloc(struct iommufd_ctx *ictx,
> size_t size,
> @@ -167,6 +169,13 @@ static int iommufd_fops_open(struct inode *inode, struct file *filp)
> if (!ictx)
> return -ENOMEM;
>
> + /*
> + * For compatibility with VFIO when /dev/vfio/vfio is opened we default
> + * to the same rlimit accounting as vfio uses.
> + */
> + if (filp->private_data == &vfio_misc_dev)
> + ictx->account_mode = IOPT_PAGES_ACCOUNT_MM;
> +
> xa_init_flags(&ictx->objects, XA_FLAGS_ALLOC1 | XA_FLAGS_ACCOUNT);
> ictx->file = filp;
> filp->private_data = ictx;
> @@ -392,26 +401,46 @@ static struct miscdevice iommu_misc_dev = {
> .mode = 0660,
> };
>
> +
> +static struct miscdevice vfio_misc_dev = {
> + .minor = VFIO_MINOR,
> + .name = "vfio",
> + .fops = &iommufd_fops,
> + .nodename = "vfio/vfio",
> + .mode = 0666,
> +};
> +
> static int __init iommufd_init(void)
> {
> int ret;
>
> ret = misc_register(&iommu_misc_dev);
> - if (ret) {
> - pr_err("Failed to register misc device\n");
> + if (ret)
> return ret;
> - }
>
> + if (IS_ENABLED(CONFIG_IOMMUFD_VFIO_CONTAINER)) {
> + ret = misc_register(&vfio_misc_dev);
> + if (ret)
> + goto err_misc;
> + }
> return 0;
> +err_misc:
> + misc_deregister(&iommu_misc_dev);
> + return ret;
> }
>
> static void __exit iommufd_exit(void)
> {
> + if (IS_ENABLED(CONFIG_IOMMUFD_VFIO_CONTAINER))
> + misc_deregister(&vfio_misc_dev);
> misc_deregister(&iommu_misc_dev);
> }
>
> module_init(iommufd_init);
> module_exit(iommufd_exit);
>
> +#if IS_ENABLED(CONFIG_IOMMUFD_VFIO_CONTAINER)
> +MODULE_ALIAS_MISCDEV(VFIO_MINOR);
> +#endif
> MODULE_DESCRIPTION("I/O Address Space Management for passthrough devices");
> MODULE_LICENSE("GPL");
next prev parent reply other threads:[~2022-10-26 21:31 UTC|newest]
Thread overview: 68+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-10-25 18:17 [PATCH 00/10] Connect VFIO to IOMMUFD Jason Gunthorpe
2022-10-25 18:17 ` [PATCH 01/10] vfio: Move vfio_device driver open/close code to a function Jason Gunthorpe
2022-11-01 7:33 ` Tian, Kevin
2022-11-01 12:12 ` Jason Gunthorpe
2022-11-01 14:36 ` Yi Liu
2022-10-25 18:17 ` [PATCH 02/10] vfio: Move vfio_device_assign_container() into vfio_device_first_open() Jason Gunthorpe
2022-11-01 7:38 ` Tian, Kevin
2022-11-01 12:14 ` Jason Gunthorpe
2022-11-01 14:37 ` Yi Liu
2022-11-01 17:37 ` Jason Gunthorpe
2022-10-25 18:17 ` [PATCH 03/10] vfio: Rename vfio_device_assign/unassign_container() Jason Gunthorpe
2022-11-01 7:39 ` Tian, Kevin
2022-11-01 14:39 ` Yi Liu
2022-10-25 18:17 ` [PATCH 04/10] vfio: Move storage of allow_unsafe_interrupts to vfio_main.c Jason Gunthorpe
2022-10-26 21:24 ` Alex Williamson
2022-10-28 18:40 ` Jason Gunthorpe
2022-10-31 22:45 ` Alex Williamson
2022-11-07 13:19 ` Jason Gunthorpe
2022-11-07 15:18 ` Alex Williamson
2022-11-07 15:32 ` Jason Gunthorpe
2022-11-07 18:05 ` Alex Williamson
2022-11-07 18:45 ` Jason Gunthorpe
2022-11-08 22:55 ` Alex Williamson
2022-11-09 1:05 ` Jason Gunthorpe
2022-11-09 3:21 ` Tian, Kevin
2022-11-09 13:11 ` Jason Gunthorpe
2022-11-10 2:44 ` Tian, Kevin
2022-11-09 18:28 ` Alex Williamson
2022-11-10 19:19 ` Jason Gunthorpe
2022-10-25 18:17 ` [PATCH 05/10] vfio: Use IOMMU_CAP_ENFORCE_CACHE_COHERENCY for vfio_file_enforced_coherent() Jason Gunthorpe
2022-11-01 7:52 ` Tian, Kevin
2022-11-01 12:26 ` Jason Gunthorpe
2022-11-03 4:38 ` Tian, Kevin
2022-11-04 19:45 ` Jason Gunthorpe
2022-10-25 18:50 ` [PATCH 06/10] vfio-iommufd: Allow iommufd to be used in place of a container fd Jason Gunthorpe
2022-11-01 8:09 ` Tian, Kevin
2022-11-01 9:19 ` Nicolin Chen
2022-11-01 11:51 ` Jason Gunthorpe
2022-11-03 4:39 ` Tian, Kevin
2022-11-01 12:40 ` Jason Gunthorpe
2022-11-02 7:28 ` Yi Liu
2022-11-07 23:45 ` Jason Gunthorpe
2022-10-25 18:50 ` [PATCH 07/10] vfio-iommufd: Support iommufd for physical VFIO devices Jason Gunthorpe
2022-11-01 8:21 ` Tian, Kevin
2022-11-04 19:51 ` Jason Gunthorpe
2022-10-25 18:50 ` [PATCH 08/10] vfio-iommufd: Support iommufd for emulated " Jason Gunthorpe
2022-11-01 8:37 ` Tian, Kevin
2022-11-01 12:49 ` Jason Gunthorpe
2022-11-03 4:52 ` Tian, Kevin
2022-10-25 18:50 ` [PATCH 09/10] vfio: Make vfio_container optionally compiled Jason Gunthorpe
2022-11-01 8:41 ` Tian, Kevin
2022-11-01 12:56 ` Jason Gunthorpe
2022-10-25 18:50 ` [PATCH 10/10] iommufd: Allow iommufd to supply /dev/vfio/vfio Jason Gunthorpe
2022-10-26 21:31 ` Alex Williamson [this message]
2022-10-28 18:44 ` Jason Gunthorpe
2022-10-31 22:53 ` Alex Williamson
2022-11-07 13:57 ` Jason Gunthorpe
2022-10-28 23:53 ` [PATCH 00/10] Connect VFIO to IOMMUFD Nicolin Chen
2022-10-28 23:54 ` Nicolin Chen
2022-10-31 10:38 ` Yi Liu
2022-10-31 12:18 ` Jason Gunthorpe
2022-10-31 12:25 ` Yi Liu
2022-10-31 23:24 ` Jason Gunthorpe
2022-11-01 3:04 ` Yi Liu
2022-11-01 4:21 ` Nicolin Chen
2022-11-01 12:54 ` Yi Liu
2022-11-01 11:41 ` Jason Gunthorpe
2022-11-01 12:55 ` Yi Liu
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=20221026153133.44dc05c8.alex.williamson@redhat.com \
--to=alex.williamson@redhat.com \
--cc=agordeev@linux.ibm.com \
--cc=akrowiak@linux.ibm.com \
--cc=baolu.lu@linux.intel.com \
--cc=borntraeger@linux.ibm.com \
--cc=cohuck@redhat.com \
--cc=diana.craciun@oss.nxp.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=eric.auger@redhat.com \
--cc=farman@linux.ibm.com \
--cc=freude@linux.ibm.com \
--cc=gor@linux.ibm.com \
--cc=hca@linux.ibm.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=intel-gvt-dev@lists.freedesktop.org \
--cc=iommu@lists.linux.dev \
--cc=jgg@nvidia.com \
--cc=jjherne@linux.ibm.com \
--cc=joro@8bytes.org \
--cc=kevin.tian@intel.com \
--cc=kvm@vger.kernel.org \
--cc=linux-s390@vger.kernel.org \
--cc=liulongfang@huawei.com \
--cc=mjrosato@linux.ibm.com \
--cc=nicolinc@nvidia.com \
--cc=oberpar@linux.ibm.com \
--cc=pasic@linux.ibm.com \
--cc=robin.murphy@arm.com \
--cc=rodrigo.vivi@intel.com \
--cc=shameerali.kolothum.thodi@huawei.com \
--cc=svens@linux.ibm.com \
--cc=tvrtko.ursulin@linux.intel.com \
--cc=vneethv@linux.ibm.com \
--cc=will@kernel.org \
--cc=yi.l.liu@intel.com \
--cc=yishaih@nvidia.com \
--cc=zhi.a.wang@intel.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).