public inbox for linux-s390@vger.kernel.org
 help / color / mirror / Atom feed
From: Alex Williamson <alex.williamson@redhat.com>
To: Yi Liu <yi.l.liu@intel.com>
Cc: jgg@nvidia.com, kevin.tian@intel.com, joro@8bytes.org,
	robin.murphy@arm.com, cohuck@redhat.com, eric.auger@redhat.com,
	nicolinc@nvidia.com, kvm@vger.kernel.org, mjrosato@linux.ibm.com,
	chao.p.peng@linux.intel.com, yi.y.sun@linux.intel.com,
	peterx@redhat.com, jasowang@redhat.com,
	shameerali.kolothum.thodi@huawei.com, lulu@redhat.com,
	suravee.suthikulpanit@amd.com,
	intel-gvt-dev@lists.freedesktop.org,
	intel-gfx@lists.freedesktop.org, linux-s390@vger.kernel.org,
	xudong.hao@intel.com, yan.y.zhao@intel.com,
	terrence.xu@intel.com, yanting.jiang@intel.com,
	zhenzhong.duan@intel.com, clegoate@redhat.com
Subject: Re: [PATCH v12 21/24] vfio: Determine noiommu device in __vfio_register_dev()
Date: Mon, 12 Jun 2023 16:42:28 -0600	[thread overview]
Message-ID: <20230612164228.65b500e0.alex.williamson@redhat.com> (raw)
In-Reply-To: <20230602121653.80017-22-yi.l.liu@intel.com>

On Fri,  2 Jun 2023 05:16:50 -0700
Yi Liu <yi.l.liu@intel.com> wrote:

> This moves the noiommu device determination and noiommu taint out of
> vfio_group_find_or_alloc(). noiommu device is determined in
> __vfio_register_dev() and result is stored in flag vfio_device->noiommu,
> the noiommu taint is added in the end of __vfio_register_dev().
> 
> This is also a preparation for compiling out vfio_group infrastructure
> as it makes the noiommu detection and taint common between the cdev path
> and group path though cdev path does not support noiommu.

Does this really still make sense?  The motivation for the change is
really not clear without cdev support for noiommu.  Thanks,

Alex
 
> Suggested-by: Alex Williamson <alex.williamson@redhat.com>
> Signed-off-by: Yi Liu <yi.l.liu@intel.com>
> ---
>  drivers/vfio/group.c     | 15 ---------------
>  drivers/vfio/vfio_main.c | 31 ++++++++++++++++++++++++++++++-
>  include/linux/vfio.h     |  1 +
>  3 files changed, 31 insertions(+), 16 deletions(-)
> 
> diff --git a/drivers/vfio/group.c b/drivers/vfio/group.c
> index 653b62f93474..64cdd0ea8825 100644
> --- a/drivers/vfio/group.c
> +++ b/drivers/vfio/group.c
> @@ -668,21 +668,6 @@ static struct vfio_group *vfio_group_find_or_alloc(struct device *dev)
>  	struct vfio_group *group;
>  
>  	iommu_group = iommu_group_get(dev);
> -	if (!iommu_group && vfio_noiommu) {
> -		/*
> -		 * With noiommu enabled, create an IOMMU group for devices that
> -		 * don't already have one, implying no IOMMU hardware/driver
> -		 * exists.  Taint the kernel because we're about to give a DMA
> -		 * capable device to a user without IOMMU protection.
> -		 */
> -		group = vfio_noiommu_group_alloc(dev, VFIO_NO_IOMMU);
> -		if (!IS_ERR(group)) {
> -			add_taint(TAINT_USER, LOCKDEP_STILL_OK);
> -			dev_warn(dev, "Adding kernel taint for vfio-noiommu group on device\n");
> -		}
> -		return group;
> -	}
> -
>  	if (!iommu_group)
>  		return ERR_PTR(-EINVAL);
>  
> diff --git a/drivers/vfio/vfio_main.c b/drivers/vfio/vfio_main.c
> index 6d8f9b0f3637..00a699b9f76b 100644
> --- a/drivers/vfio/vfio_main.c
> +++ b/drivers/vfio/vfio_main.c
> @@ -265,6 +265,18 @@ static int vfio_init_device(struct vfio_device *device, struct device *dev,
>  	return ret;
>  }
>  
> +static int vfio_device_set_noiommu(struct vfio_device *device)
> +{
> +	struct iommu_group *iommu_group = iommu_group_get(device->dev);
> +
> +	if (!iommu_group && !vfio_noiommu)
> +		return -EINVAL;
> +
> +	device->noiommu = !iommu_group;
> +	iommu_group_put(iommu_group); /* Accepts NULL */
> +	return 0;
> +}
> +
>  static int __vfio_register_dev(struct vfio_device *device,
>  			       enum vfio_group_type type)
>  {
> @@ -277,6 +289,13 @@ static int __vfio_register_dev(struct vfio_device *device,
>  		     !device->ops->detach_ioas)))
>  		return -EINVAL;
>  
> +	/* Only physical devices can be noiommu device */
> +	if (type == VFIO_IOMMU) {
> +		ret = vfio_device_set_noiommu(device);
> +		if (ret)
> +			return ret;
> +	}
> +
>  	/*
>  	 * If the driver doesn't specify a set then the device is added to a
>  	 * singleton set just for itself.
> @@ -288,7 +307,8 @@ static int __vfio_register_dev(struct vfio_device *device,
>  	if (ret)
>  		return ret;
>  
> -	ret = vfio_device_set_group(device, type);
> +	ret = vfio_device_set_group(device,
> +				    device->noiommu ? VFIO_NO_IOMMU : type);
>  	if (ret)
>  		return ret;
>  
> @@ -301,6 +321,15 @@ static int __vfio_register_dev(struct vfio_device *device,
>  
>  	vfio_device_group_register(device);
>  
> +	if (device->noiommu) {
> +		/*
> +		 * noiommu deivces have no IOMMU hardware/driver.  Taint the
> +		 * kernel because we're about to give a DMA capable device to
> +		 * a user without IOMMU protection.
> +		 */
> +		add_taint(TAINT_USER, LOCKDEP_STILL_OK);
> +		dev_warn(device->dev, "Adding kernel taint for vfio-noiommu on device\n");
> +	}
>  	return 0;
>  err_out:
>  	vfio_device_remove_group(device);
> diff --git a/include/linux/vfio.h b/include/linux/vfio.h
> index e80a8ac86e46..183e620009e7 100644
> --- a/include/linux/vfio.h
> +++ b/include/linux/vfio.h
> @@ -67,6 +67,7 @@ struct vfio_device {
>  	bool iommufd_attached;
>  #endif
>  	bool cdev_opened:1;
> +	bool noiommu:1;
>  };
>  
>  /**


  reply	other threads:[~2023-06-12 22:43 UTC|newest]

Thread overview: 88+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-06-02 12:16 [PATCH v12 00/24] Add vfio_device cdev for iommufd support Yi Liu
2023-06-02 12:16 ` [PATCH v12 01/24] vfio: Allocate per device file structure Yi Liu
2023-06-02 12:16 ` [PATCH v12 02/24] vfio: Refine vfio file kAPIs for KVM Yi Liu
2023-06-02 12:16 ` [PATCH v12 03/24] vfio: Accept vfio device file in the KVM facing kAPI Yi Liu
2023-06-02 12:16 ` [PATCH v12 04/24] kvm/vfio: Prepare for accepting vfio device fd Yi Liu
2023-06-02 12:16 ` [PATCH v12 05/24] kvm/vfio: Accept vfio device file from userspace Yi Liu
2023-06-02 12:16 ` [PATCH v12 06/24] vfio: Pass struct vfio_device_file * to vfio_device_open/close() Yi Liu
2023-06-12 21:52   ` Alex Williamson
2023-06-13  5:24     ` Liu, Yi L
2023-06-02 12:16 ` [PATCH v12 07/24] vfio: Block device access via device fd until device is opened Yi Liu
2023-06-12 21:52   ` Alex Williamson
2023-06-13  5:46     ` Liu, Yi L
2023-06-13 14:16       ` Alex Williamson
2023-06-13 14:36         ` Liu, Yi L
2023-06-13 14:42           ` Alex Williamson
2023-06-13 14:44             ` Liu, Yi L
2023-06-13 17:19         ` Jason Gunthorpe
2023-06-13 17:31           ` Alex Williamson
2023-06-02 12:16 ` [PATCH v12 08/24] vfio: Add cdev_device_open_cnt to vfio_group Yi Liu
2023-06-02 12:16 ` [PATCH v12 09/24] vfio: Make vfio_df_open() single open for device cdev path Yi Liu
2023-06-02 12:16 ` [PATCH v12 10/24] vfio-iommufd: Move noiommu compat validation out of vfio_iommufd_bind() Yi Liu
2023-06-22 17:59   ` Jason Gunthorpe
2023-06-02 12:16 ` [PATCH v12 11/24] vfio-iommufd: Split bind/attach into two steps Yi Liu
2023-06-22 17:59   ` Jason Gunthorpe
2023-06-02 12:16 ` [PATCH v12 12/24] vfio: Record devid in vfio_device_file Yi Liu
2023-06-22 18:00   ` Jason Gunthorpe
2023-06-02 12:16 ` [PATCH v12 13/24] vfio-iommufd: Add detach_ioas support for physical VFIO devices Yi Liu
2023-06-23 14:04   ` Jason Gunthorpe
2023-06-02 12:16 ` [PATCH v12 14/24] iommufd/device: Add iommufd_access_detach() API Yi Liu
2023-06-23 14:15   ` Jason Gunthorpe
2023-06-25 18:26     ` Nicolin Chen
2023-06-02 12:16 ` [PATCH v12 15/24] vfio-iommufd: Add detach_ioas support for emulated VFIO devices Yi Liu
2023-06-23 14:16   ` Jason Gunthorpe
2023-06-02 12:16 ` [PATCH v12 16/24] vfio: Move vfio_device_group_unregister() to be the first operation in unregister Yi Liu
2023-06-23 14:22   ` Jason Gunthorpe
2023-06-02 12:16 ` [PATCH v12 17/24] vfio: Add cdev for vfio_device Yi Liu
2023-06-23 15:58   ` Jason Gunthorpe
2023-06-02 12:16 ` [PATCH v12 18/24] vfio: Add VFIO_DEVICE_BIND_IOMMUFD Yi Liu
2023-06-12 22:27   ` Alex Williamson
2023-06-13  5:48     ` Liu, Yi L
2023-06-13 14:18       ` Alex Williamson
2023-06-13 14:28         ` Liu, Yi L
2023-06-13 14:39           ` Alex Williamson
2023-06-13 14:42             ` Liu, Yi L
2023-06-13 14:59               ` Alex Williamson
2023-06-23 16:15   ` Jason Gunthorpe
2023-06-26  8:34     ` Liu, Yi L
2023-06-26 12:56       ` Jason Gunthorpe
2023-06-26 13:35         ` Liu, Yi L
2023-06-26 14:51           ` Liu, Yi L
2023-06-28 14:34             ` Jason Gunthorpe
2023-06-28 14:41               ` Liu, Yi L
2023-06-02 12:16 ` [PATCH v12 19/24] vfio: Add VFIO_DEVICE_[AT|DE]TACH_IOMMUFD_PT Yi Liu
2023-06-23 16:21   ` Jason Gunthorpe
2023-06-02 12:16 ` [PATCH v12 20/24] vfio: Only check group->type for noiommu test Yi Liu
2023-06-12 22:37   ` Alex Williamson
2023-06-13  9:20     ` Liu, Yi L
2023-06-02 12:16 ` [PATCH v12 21/24] vfio: Determine noiommu device in __vfio_register_dev() Yi Liu
2023-06-12 22:42   ` Alex Williamson [this message]
2023-06-13  5:53     ` Liu, Yi L
2023-06-13 14:19       ` Alex Williamson
2023-06-13 14:33         ` Liu, Yi L
2023-06-13 14:48           ` Alex Williamson
2023-06-13 15:01             ` Liu, Yi L
     [not found]               ` <20230613091301.56986440.alex.williamson@redhat.com>
     [not found]                 ` <20230613111511.425bdeae.alex.williamson@redhat.com>
2023-06-13 17:35                   ` Jason Gunthorpe
2023-06-13 20:10                     ` Alex Williamson
2023-06-14  3:24                       ` Liu, Yi L
2023-06-14  5:42                         ` Tian, Kevin
2023-06-14  6:14                           ` Liu, Yi L
2023-06-14  6:20                             ` Tian, Kevin
2023-06-14 12:23                               ` Jason Gunthorpe
2023-06-14 13:12                                 ` Liu, Yi L
2023-06-14 17:30                                   ` Jason Gunthorpe
2023-06-02 12:16 ` [PATCH v12 22/24] vfio: Remove vfio_device_is_noiommu() Yi Liu
2023-06-12 22:46   ` Alex Williamson
2023-06-02 12:16 ` [PATCH v12 23/24] vfio: Compile vfio_group infrastructure optionally Yi Liu
2023-06-23 16:35   ` Jason Gunthorpe
2023-06-02 12:16 ` [PATCH v12 24/24] docs: vfio: Add vfio device cdev description Yi Liu
2023-06-12 23:06   ` Alex Williamson
2023-06-13 12:01     ` Liu, Yi L
2023-06-13 14:24       ` Alex Williamson
2023-06-13 14:48         ` Liu, Yi L
2023-06-13 15:04           ` Alex Williamson
2023-06-13 15:11             ` Liu, Yi L
2023-06-13 17:30               ` Alex Williamson
2023-06-07  8:27 ` [PATCH v12 00/24] Add vfio_device cdev for iommufd support Nicolin Chen
2023-06-08  6:58 ` Jiang, Yanting
2023-06-09 16:47 ` Matthew Rosato

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=20230612164228.65b500e0.alex.williamson@redhat.com \
    --to=alex.williamson@redhat.com \
    --cc=chao.p.peng@linux.intel.com \
    --cc=clegoate@redhat.com \
    --cc=cohuck@redhat.com \
    --cc=eric.auger@redhat.com \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=intel-gvt-dev@lists.freedesktop.org \
    --cc=jasowang@redhat.com \
    --cc=jgg@nvidia.com \
    --cc=joro@8bytes.org \
    --cc=kevin.tian@intel.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-s390@vger.kernel.org \
    --cc=lulu@redhat.com \
    --cc=mjrosato@linux.ibm.com \
    --cc=nicolinc@nvidia.com \
    --cc=peterx@redhat.com \
    --cc=robin.murphy@arm.com \
    --cc=shameerali.kolothum.thodi@huawei.com \
    --cc=suravee.suthikulpanit@amd.com \
    --cc=terrence.xu@intel.com \
    --cc=xudong.hao@intel.com \
    --cc=yan.y.zhao@intel.com \
    --cc=yanting.jiang@intel.com \
    --cc=yi.l.liu@intel.com \
    --cc=yi.y.sun@linux.intel.com \
    --cc=zhenzhong.duan@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