All of lore.kernel.org
 help / color / mirror / Atom feed
From: Lu Baolu <baolu.lu@linux.intel.com>
To: Joerg Roedel <joro@8bytes.org>,
	David Woodhouse <dwmw2@infradead.org>,
	Alex Williamson <alex.williamson@redhat.com>,
	Kirti Wankhede <kwankhede@nvidia.com>
Cc: ashok.raj@intel.com, sanjay.k.kumar@intel.com,
	jacob.jun.pan@intel.com, kevin.tian@intel.com,
	Jean-Philippe Brucker <jean-philippe.brucker@arm.com>,
	yi.l.liu@intel.com, yi.y.sun@intel.com, peterx@redhat.com,
	tiwei.bie@intel.com, iommu@lists.linux-foundation.org,
	kvm@vger.kernel.org, linux-kernel@vger.kernel.org,
	Lu Baolu <baolu.lu@linux.intel.com>,
	Jacob Pan <jacob.jun.pan@linux.intel.com>
Subject: [RFC PATCH v2 09/10] vfio/type1: Determine domain type of an mdev group
Date: Thu, 30 Aug 2018 12:09:21 +0800	[thread overview]
Message-ID: <20180830040922.30426-10-baolu.lu@linux.intel.com> (raw)
In-Reply-To: <20180830040922.30426-1-baolu.lu@linux.intel.com>

This adds the support to determine the domain type of a group
of mediated devices according to the domain type attribute of
each device.

Cc: Ashok Raj <ashok.raj@intel.com>
Cc: Jacob Pan <jacob.jun.pan@linux.intel.com>
Cc: Kevin Tian <kevin.tian@intel.com>
Cc: Liu Yi L <yi.l.liu@intel.com>
Signed-off-by: Sanjay Kumar <sanjay.k.kumar@intel.com>
Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
---
 drivers/vfio/vfio_iommu_type1.c | 47 ++++++++++++++++++++++++++++++---
 1 file changed, 43 insertions(+), 4 deletions(-)

diff --git a/drivers/vfio/vfio_iommu_type1.c b/drivers/vfio/vfio_iommu_type1.c
index 89e2e6123223..64bf55b91de1 100644
--- a/drivers/vfio/vfio_iommu_type1.c
+++ b/drivers/vfio/vfio_iommu_type1.c
@@ -1390,6 +1390,27 @@ static void vfio_iommu_detach_group(struct vfio_domain *domain,
 		iommu_detach_group(domain->domain, group->iommu_group);
 }
 
+static int vfio_mdev_domain_type(struct device *dev, void *data)
+{
+	enum mdev_domain_type new, *old = data;
+	enum mdev_domain_type (*fn)(struct device *dev);
+
+	fn = symbol_get(mdev_get_domain_type);
+	if (fn) {
+		new = fn(dev);
+		symbol_put(mdev_get_domain_type);
+
+		if (*old && *old != new)
+			return -EINVAL;
+
+		*old = new;
+
+		return 0;
+	}
+
+	return -EINVAL;
+}
+
 static int vfio_iommu_type1_attach_group(void *iommu_data,
 					 struct iommu_group *iommu_group)
 {
@@ -1433,9 +1454,19 @@ static int vfio_iommu_type1_attach_group(void *iommu_data,
 
 	mdev_bus = symbol_get(mdev_bus_type);
 
-	if (mdev_bus) {
-		if ((bus == mdev_bus) && !iommu_present(bus)) {
-			symbol_put(mdev_bus_type);
+	if (mdev_bus && bus == mdev_bus) {
+		enum mdev_domain_type type = 0;
+
+		symbol_put(mdev_bus_type);
+
+		/* Determine the domain type: */
+		ret = iommu_group_for_each_dev(iommu_group, &type,
+					       vfio_mdev_domain_type);
+		if (ret)
+			goto out_free;
+
+		switch (type) {
+		case DOMAIN_TYPE_NO_IOMMU:
 			if (!iommu->external_domain) {
 				INIT_LIST_HEAD(&domain->group_list);
 				iommu->external_domain = domain;
@@ -1445,11 +1476,19 @@ static int vfio_iommu_type1_attach_group(void *iommu_data,
 			list_add(&group->next,
 				 &iommu->external_domain->group_list);
 			mutex_unlock(&iommu->lock);
+
 			return 0;
+		case DOMAIN_TYPE_ATTACH_PARENT:
+		/* FALLTHROUGH */
+		default:
+			ret = -EINVAL;
+			goto out_free;
 		}
-		symbol_put(mdev_bus_type);
 	}
 
+	if (mdev_bus)
+		symbol_put(mdev_bus_type);
+
 	domain->domain = iommu_domain_alloc(bus);
 	if (!domain->domain) {
 		ret = -EIO;
-- 
2.17.1

  parent reply	other threads:[~2018-08-30  4:09 UTC|newest]

Thread overview: 58+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-08-30  4:09 [RFC PATCH v2 00/10] vfio/mdev: IOMMU aware mediated device Lu Baolu
     [not found] ` <20180830040922.30426-1-baolu.lu-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2018-08-30  4:09   ` [RFC PATCH v2 01/10] iommu: Add APIs for multiple domains per device Lu Baolu
2018-08-30  4:09     ` Lu Baolu
2018-08-30  4:09   ` [RFC PATCH v2 02/10] iommu/vt-d: Add multiple domains per device query Lu Baolu
2018-08-30  4:09     ` Lu Baolu
2018-09-05 19:35     ` Alex Williamson
     [not found]       ` <20180905133540.5d7a7ea3-1yVPhWWZRC1BDLzU/O5InQ@public.gmane.org>
2018-09-06  0:54         ` Lu Baolu
2018-09-06  0:54           ` Lu Baolu
2018-08-30  4:09   ` [RFC PATCH v2 03/10] iommu/amd: Add default branch in amd_iommu_capable() Lu Baolu
2018-08-30  4:09     ` Lu Baolu
     [not found]     ` <20180830040922.30426-4-baolu.lu-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2018-09-05 19:37       ` Alex Williamson
2018-09-05 19:37         ` Alex Williamson
     [not found]         ` <20180905133703.331c0c17-1yVPhWWZRC1BDLzU/O5InQ@public.gmane.org>
2018-09-06  0:55           ` Lu Baolu
2018-09-06  0:55             ` Lu Baolu
2018-08-30  4:09   ` [RFC PATCH v2 04/10] iommu/vt-d: Enable/disable multiple domains per device Lu Baolu
2018-08-30  4:09     ` Lu Baolu
2018-09-05  3:01   ` [RFC PATCH v2 00/10] vfio/mdev: IOMMU aware mediated device Tian, Kevin
2018-09-05  3:01     ` Tian, Kevin
2018-09-05 19:15     ` Alex Williamson
2018-09-06  1:29       ` Lu Baolu
2018-08-30  4:09 ` [RFC PATCH v2 05/10] iommu/vt-d: Attach/detach domains in auxiliary mode Lu Baolu
2018-08-30  4:09 ` [RFC PATCH v2 06/10] iommu/vt-d: Return ID associated with an auxiliary domain Lu Baolu
2018-08-30  4:09 ` [RFC PATCH v2 07/10] vfio/mdev: Add mediated device domain type Lu Baolu
2018-08-30  4:09 ` [RFC PATCH v2 08/10] vfio/type1: Add domain at(de)taching group helpers Lu Baolu
     [not found]   ` <20180830040922.30426-9-baolu.lu-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2018-09-10 16:23     ` Jean-Philippe Brucker
2018-09-10 16:23       ` Jean-Philippe Brucker
2018-09-12  5:02       ` Lu Baolu
     [not found]         ` <a97c8f75-ff49-5b87-198f-d3c8950d4e90-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2018-09-12 17:54           ` Jean-Philippe Brucker
2018-09-12 17:54             ` Jean-Philippe Brucker
2018-09-13  0:35             ` Tian, Kevin
2018-09-14 14:45               ` Jean-Philippe Brucker
2018-09-15  2:36                 ` Tian, Kevin
2018-09-18 15:52                   ` Jean-Philippe Brucker
     [not found]                     ` <f46bcf5f-002b-4269-a750-c4254c9fc89f-5wv7dgnIgG8@public.gmane.org>
2018-09-18 23:26                       ` Tian, Kevin
2018-09-19  2:10                         ` Lu Baolu
2018-09-25 17:55                         ` Jean-Philippe Brucker
2018-09-26  2:11                           ` Lu Baolu
2018-08-30  4:09 ` Lu Baolu [this message]
2018-08-30  4:09 ` [RFC PATCH v2 10/10] vfio/type1: Attach domain for mdev group Lu Baolu
2018-09-10 16:22 ` [RFC PATCH v2 00/10] vfio/mdev: IOMMU aware mediated device Jean-Philippe Brucker
2018-09-12  2:42   ` Lu Baolu
2018-09-12 17:54     ` Jean-Philippe Brucker
     [not found]       ` <3602f8c1-df17-4894-1bcc-4d779f9aa7fd-5wv7dgnIgG8@public.gmane.org>
2018-09-13  0:19         ` Tian, Kevin
2018-09-13  0:19           ` Tian, Kevin
2018-09-13 15:03           ` Jean-Philippe Brucker
     [not found]             ` <03d496b0-84c2-b3ca-5be5-d4540c6d8ec7-5wv7dgnIgG8@public.gmane.org>
2018-09-13 16:55               ` Raj, Ashok
2018-09-13 16:55                 ` Raj, Ashok
2018-09-14 14:39                 ` Jean-Philippe Brucker
2018-09-14  0:39               ` Tian, Kevin
     [not found]                 ` <AADFC41AFE54684AB9EE6CBC0274A5D191302ECE-0J0gbvR4kThpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2018-09-14 14:40                   ` Jean-Philippe Brucker
2018-09-14 14:40                     ` Jean-Philippe Brucker
2018-09-14 21:04             ` Jacob Pan
2018-09-18 15:46               ` Jean-Philippe Brucker
2018-09-19  2:22                 ` Tian, Kevin
2018-09-20 15:53                   ` Jacob Pan
2018-09-14  2:46       ` Lu Baolu
     [not found]         ` <4b24f0c6-5985-efbc-f842-8bde239dfc2a-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2018-09-14  2:53           ` Tian, Kevin
2018-09-14  2:53             ` Tian, Kevin

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=20180830040922.30426-10-baolu.lu@linux.intel.com \
    --to=baolu.lu@linux.intel.com \
    --cc=alex.williamson@redhat.com \
    --cc=ashok.raj@intel.com \
    --cc=dwmw2@infradead.org \
    --cc=iommu@lists.linux-foundation.org \
    --cc=jacob.jun.pan@intel.com \
    --cc=jacob.jun.pan@linux.intel.com \
    --cc=jean-philippe.brucker@arm.com \
    --cc=joro@8bytes.org \
    --cc=kevin.tian@intel.com \
    --cc=kvm@vger.kernel.org \
    --cc=kwankhede@nvidia.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=peterx@redhat.com \
    --cc=sanjay.k.kumar@intel.com \
    --cc=tiwei.bie@intel.com \
    --cc=yi.l.liu@intel.com \
    --cc=yi.y.sun@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 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.